_ZNK2OT4CBDT13accelerator_t8has_dataEv:
  939|  66.6k|    bool has_data () const { return cbdt.get_length (); }
_ZNK2OT4CBDT13accelerator_t13reference_pngEP9hb_font_tj:
  891|    114|    {
  892|    114|      const void *base;
  893|    114|      const BitmapSizeTable &strike = this->cblc->choose_strike (font);
  894|    114|      const IndexSubtableRecord *subtable_record = strike.find_table (glyph, cblc, &base);
  895|    114|      if (!subtable_record || !strike.ppemX || !strike.ppemY)
  ------------------
  |  Branch (895:11): [True: 66, False: 48]
  |  Branch (895:31): [True: 5, False: 43]
  |  Branch (895:48): [True: 3, False: 40]
  ------------------
  896|     74|	return hb_blob_get_empty ();
  897|       |
  898|     40|      unsigned int image_offset = 0, image_length = 0, image_format = 0;
  899|     40|      if (!subtable_record->get_image_data (glyph, base, &image_offset, &image_length, &image_format))
  ------------------
  |  Branch (899:11): [True: 14, False: 26]
  ------------------
  900|     14|	return hb_blob_get_empty ();
  901|       |
  902|     26|      unsigned int cbdt_len = cbdt.get_length ();
  903|     26|      if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
  ------------------
  |  |  259|     47|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 18]
  |  |  |  Branch (259:47): [True: 5, False: 21]
  |  |  |  Branch (259:47): [True: 3, False: 18]
  |  |  ------------------
  ------------------
  904|      8|	return hb_blob_get_empty ();
  905|       |
  906|     18|      switch (image_format)
  907|     18|      {
  908|      5|      case 17:
  ------------------
  |  Branch (908:7): [True: 5, False: 13]
  ------------------
  909|      5|      {
  910|      5|	if (unlikely (image_length < GlyphBitmapDataFormat17::min_size))
  ------------------
  |  |  259|      5|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 3]
  |  |  ------------------
  ------------------
  911|      2|	  return hb_blob_get_empty ();
  912|      3|	auto &glyphFormat17 = StructAtOffset<GlyphBitmapDataFormat17> (this->cbdt, image_offset);
  913|      3|	return hb_blob_create_sub_blob (cbdt.get_blob (),
  914|      3|					image_offset + GlyphBitmapDataFormat17::min_size,
  915|      3|					glyphFormat17.data.len);
  916|      5|      }
  917|     10|      case 18:
  ------------------
  |  Branch (917:7): [True: 10, False: 8]
  ------------------
  918|     10|      {
  919|     10|	if (unlikely (image_length < GlyphBitmapDataFormat18::min_size))
  ------------------
  |  |  259|     10|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 2]
  |  |  ------------------
  ------------------
  920|      8|	  return hb_blob_get_empty ();
  921|      2|	auto &glyphFormat18 = StructAtOffset<GlyphBitmapDataFormat18> (this->cbdt, image_offset);
  922|      2|	return hb_blob_create_sub_blob (cbdt.get_blob (),
  923|      2|					image_offset + GlyphBitmapDataFormat18::min_size,
  924|      2|					glyphFormat18.data.len);
  925|     10|      }
  926|      2|      case 19:
  ------------------
  |  Branch (926:7): [True: 2, False: 16]
  ------------------
  927|      2|      {
  928|      2|	if (unlikely (image_length < GlyphBitmapDataFormat19::min_size))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  929|      1|	  return hb_blob_get_empty ();
  930|      1|	auto &glyphFormat19 = StructAtOffset<GlyphBitmapDataFormat19> (this->cbdt, image_offset);
  931|      1|	return hb_blob_create_sub_blob (cbdt.get_blob (),
  932|      1|					image_offset + GlyphBitmapDataFormat19::min_size,
  933|      1|					glyphFormat19.data.len);
  934|      2|      }
  935|      1|      default: return hb_blob_get_empty (); /* TODO: Support other image formats. */
  ------------------
  |  Branch (935:7): [True: 1, False: 17]
  ------------------
  936|     18|      }
  937|     18|    }
_ZNK2OT4CBLC13choose_strikeEP9hb_font_t:
  785|   750k|  {
  786|   750k|    unsigned count = sizeTables.len;
  787|   750k|    if (unlikely (!count))
  ------------------
  |  |  259|   750k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 749k, False: 588]
  |  |  ------------------
  ------------------
  788|   749k|      return Null (BitmapSizeTable);
  ------------------
  |  |  124|   749k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  789|       |
  790|    588|    unsigned int requested_ppem = hb_max (font->x_ppem, font->y_ppem);
  791|    588|    if (!requested_ppem)
  ------------------
  |  Branch (791:9): [True: 588, False: 0]
  ------------------
  792|    588|      requested_ppem = 1<<30; /* Choose largest strike. */
  793|    588|    unsigned int best_i = 0;
  794|    588|    unsigned int best_ppem = hb_max (sizeTables[0].ppemX, sizeTables[0].ppemY);
  795|       |
  796|  1.13k|    for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (796:30): [True: 548, False: 588]
  ------------------
  797|    548|    {
  798|    548|      unsigned int ppem = hb_max (sizeTables[i].ppemX, sizeTables[i].ppemY);
  799|    548|      if ((requested_ppem <= ppem && ppem < best_ppem) ||
  ------------------
  |  Branch (799:12): [True: 0, False: 548]
  |  Branch (799:38): [True: 0, False: 0]
  ------------------
  800|    548|	  (requested_ppem > best_ppem && ppem > best_ppem))
  ------------------
  |  Branch (800:5): [True: 548, False: 0]
  |  Branch (800:35): [True: 111, False: 437]
  ------------------
  801|    111|      {
  802|    111|	best_i = i;
  803|    111|	best_ppem = ppem;
  804|    111|      }
  805|    548|    }
  806|       |
  807|    588|    return sizeTables[best_i];
  808|   750k|  }
_ZNK2OT15BitmapSizeTable10find_tableEjPKvPS2_:
  645|   750k|  {
  646|   750k|    *out_base = &(base+indexSubtableArrayOffset);
  647|   750k|    return (base+indexSubtableArrayOffset).find_table (glyph, numberOfIndexSubtables);
  648|   750k|  }
_ZNK2OT18IndexSubtableArray10find_tableEjj:
  614|   750k|  {
  615|   751k|    for (unsigned int i = 0; i < numTables; ++i)
  ------------------
  |  Branch (615:30): [True: 1.44k, False: 749k]
  ------------------
  616|  1.44k|    {
  617|  1.44k|      unsigned int firstGlyphIndex = indexSubtablesZ[i].firstGlyphIndex;
  618|  1.44k|      unsigned int lastGlyphIndex = indexSubtablesZ[i].lastGlyphIndex;
  619|  1.44k|      if (firstGlyphIndex <= glyph && glyph <= lastGlyphIndex)
  ------------------
  |  Branch (619:11): [True: 1.23k, False: 210]
  |  Branch (619:39): [True: 358, False: 881]
  ------------------
  620|    358|	return &indexSubtablesZ[i];
  621|  1.44k|    }
  622|   749k|    return nullptr;
  623|   750k|  }
_ZNK2OT19IndexSubtableRecord14get_image_dataEjPKvPjS3_S3_:
  518|    293|  {
  519|    293|    if (gid < firstGlyphIndex || gid > lastGlyphIndex) return false;
  ------------------
  |  Branch (519:9): [True: 0, False: 293]
  |  Branch (519:34): [True: 0, False: 293]
  ------------------
  520|    293|    return (base+offsetToSubtable).get_image_data (gid - firstGlyphIndex,
  521|    293|						   offset, length, format);
  522|    293|  }
_ZNK2OT13IndexSubtable14get_image_dataEjPjS1_S1_:
  327|    293|  {
  328|    293|    *format = u.header.imageFormat;
  329|    293|    switch (u.header.indexFormat)
  330|    293|    {
  331|     50|    case 1: return u.format1.get_image_data (idx, offset, length);
  ------------------
  |  Branch (331:5): [True: 50, False: 243]
  ------------------
  332|    177|    case 3: return u.format3.get_image_data (idx, offset, length);
  ------------------
  |  Branch (332:5): [True: 177, False: 116]
  ------------------
  333|     66|    default: return false;
  ------------------
  |  Branch (333:5): [True: 66, False: 227]
  ------------------
  334|    293|    }
  335|    293|  }
_ZNK2OT23IndexSubtableFormat1Or3INS_7IntTypeIjLj4EEEE14get_image_dataEjPjS4_:
  170|     50|  {
  171|     50|    if (unlikely (offsetArrayZ[idx + 1] <= offsetArrayZ[idx]))
  ------------------
  |  |  259|     50|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 28]
  |  |  ------------------
  ------------------
  172|     22|      return false;
  173|       |
  174|     28|    *offset = header.imageDataOffset + offsetArrayZ[idx];
  175|     28|    *length = offsetArrayZ[idx + 1] - offsetArrayZ[idx];
  176|     28|    return true;
  177|     50|  }
_ZNK2OT23IndexSubtableFormat1Or3INS_7IntTypeItLj2EEEE14get_image_dataEjPjS4_:
  170|    177|  {
  171|    177|    if (unlikely (offsetArrayZ[idx + 1] <= offsetArrayZ[idx]))
  ------------------
  |  |  259|    177|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21, False: 156]
  |  |  ------------------
  ------------------
  172|     21|      return false;
  173|       |
  174|    156|    *offset = header.imageDataOffset + offsetArrayZ[idx];
  175|    156|    *length = offsetArrayZ[idx + 1] - offsetArrayZ[idx];
  176|    156|    return true;
  177|    177|  }
_ZN2OT18CBDT_accelerator_tC2EP9hb_face_t:
 1019|  32.7k|  CBDT_accelerator_t (hb_face_t *face) : CBDT::accelerator_t (face) {}
_ZN2OT4CBDT13accelerator_tC2EP9hb_face_t:
  824|  32.7k|    {
  825|  32.7k|      this->cblc = hb_sanitize_context_t ().reference_table<CBLC> (face);
  826|  32.7k|      this->cbdt = hb_sanitize_context_t ().reference_table<CBDT> (face);
  827|       |
  828|  32.7k|      upem = hb_face_get_upem (face);
  829|  32.7k|    }
_ZNK2OT4CBLC8sanitizeEP21hb_sanitize_context_t:
  738|    621|  {
  739|    621|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    621|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  740|    621|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  3.58k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    621|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 126, False: 493]
  |  |  |  Branch (349:45): [True: 490, False: 3]
  |  |  |  Branch (349:45): [True: 619, False: 2]
  |  |  |  Branch (349:45): [True: 616, False: 3]
  |  |  |  Branch (349:45): [True: 344, False: 272]
  |  |  ------------------
  ------------------
  741|    621|		  likely (version.major == 2 || version.major == 3) &&
  742|    621|		  sizeTables.sanitize (c, this));
  743|    621|  }
_ZNK2OT15BitmapSizeTable8sanitizeEP21hb_sanitize_context_tPKv:
  635|  3.14k|  {
  636|  3.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  637|  3.14k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  18.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.14k, False: 2]
  |  |  |  Branch (349:45): [True: 2.88k, False: 254]
  |  |  |  Branch (349:45): [True: 2.88k, False: 2]
  |  |  |  Branch (349:45): [True: 2.88k, False: 2]
  |  |  ------------------
  ------------------
  638|  3.14k|		  indexSubtableArrayOffset.sanitize (c, base, numberOfIndexSubtables) &&
  639|  3.14k|		  horizontal.sanitize (c) &&
  640|  3.14k|		  vertical.sanitize (c));
  641|  3.14k|  }
_ZNK2OT18IndexSubtableArray8sanitizeEP21hb_sanitize_context_tj:
  536|  3.13k|  {
  537|  3.13k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.13k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  538|  3.13k|    return_trace (indexSubtablesZ.sanitize (c, count, this));
  ------------------
  |  |  349|  3.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  539|  3.13k|  }
_ZNK2OT19IndexSubtableRecord8sanitizeEP21hb_sanitize_context_tPKv:
  378|   101k|  {
  379|   101k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   101k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  380|   101k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   406k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   101k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 101k, False: 9]
  |  |  |  Branch (349:45): [True: 101k, False: 17]
  |  |  |  Branch (349:45): [True: 101k, False: 211]
  |  |  ------------------
  ------------------
  381|   101k|		  firstGlyphIndex <= lastGlyphIndex &&
  382|   101k|		  offsetToSubtable.sanitize (c, base, lastGlyphIndex - firstGlyphIndex + 1));
  383|   101k|  }
_ZNK2OT13IndexSubtable8sanitizeEP21hb_sanitize_context_tj:
  204|  55.4k|  {
  205|  55.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  55.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  206|  55.4k|    if (!u.header.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  1.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.80k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (206:9): [True: 1.80k, False: 53.6k]
  ------------------
  207|  53.6k|    switch (u.header.indexFormat)
  208|  53.6k|    {
  209|  10.8k|    case 1: return_trace (u.format1.sanitize (c, glyph_count));
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (209:5): [True: 10.8k, False: 42.7k]
  ------------------
  210|    564|    case 3: return_trace (u.format3.sanitize (c, glyph_count));
  ------------------
  |  |  349|    564|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    564|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (210:5): [True: 564, False: 53.0k]
  ------------------
  211|  42.2k|    default:return_trace (true);
  ------------------
  |  |  349|  42.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  42.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (211:5): [True: 42.2k, False: 11.3k]
  ------------------
  212|  53.6k|    }
  213|  53.6k|  }
_ZNK2OT19IndexSubtableHeader8sanitizeEP21hb_sanitize_context_t:
  145|  55.4k|  {
  146|  55.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  55.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  147|  55.4k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  55.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  55.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  148|  55.4k|  }
_ZNK2OT23IndexSubtableFormat1Or3INS_7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_tj:
  161|  10.8k|  {
  162|  10.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  163|  10.8k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  21.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.8k, False: 1]
  |  |  |  Branch (349:45): [True: 10.7k, False: 102]
  |  |  ------------------
  ------------------
  164|  10.8k|		  offsetArrayZ.sanitize (c, glyph_count + 1));
  165|  10.8k|  }
_ZNK2OT23IndexSubtableFormat1Or3INS_7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_tj:
  161|    564|  {
  162|    564|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    564|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  163|    564|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    564|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 563, False: 1]
  |  |  |  Branch (349:45): [True: 524, False: 39]
  |  |  ------------------
  ------------------
  164|    564|		  offsetArrayZ.sanitize (c, glyph_count + 1));
  165|    564|  }
_ZNK2OT15SBitLineMetrics8sanitizeEP21hb_sanitize_context_t:
  116|  5.77k|  {
  117|  5.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  118|  5.77k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  5.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  119|  5.77k|  }
_ZNK2OT4CBDT8sanitizeEP21hb_sanitize_context_t:
  975|    120|  {
  976|    120|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    120|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  977|    120|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    475|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    120|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2, False: 117]
  |  |  |  Branch (349:45): [True: 112, False: 5]
  |  |  |  Branch (349:45): [True: 119, False: 1]
  |  |  |  Branch (349:45): [True: 114, False: 5]
  |  |  ------------------
  ------------------
  978|    120|		  likely (version.major == 2 || version.major == 3));
  979|    120|  }
_ZN2OT4CBDT13accelerator_tD2Ev:
  831|  32.7k|    {
  832|  32.7k|      this->cblc.destroy ();
  833|  32.7k|      this->cbdt.destroy ();
  834|  32.7k|    }
_ZNK2OT17SmallGlyphMetrics11get_extentsEP9hb_font_tP18hb_glyph_extents_tb:
   85|     76|  {
   86|     76|    extents->x_bearing = bearingX;
   87|     76|    extents->y_bearing = bearingY;
   88|     76|    extents->width = width;
   89|     76|    extents->height = -static_cast<int> (height);
   90|       |
   91|     76|    if (scale)
  ------------------
  |  Branch (91:9): [True: 76, False: 0]
  ------------------
   92|     76|      font->scale_glyph_extents (extents);
   93|     76|  }
_ZNK2OT13IndexSubtable11get_extentsEP18hb_glyph_extents_tb:
  315|    253|  {
  316|    253|    switch (u.header.indexFormat)
  317|    253|    {
  318|      0|    case 2: case 5: /* TODO */
  ------------------
  |  Branch (318:5): [True: 0, False: 253]
  |  Branch (318:13): [True: 0, False: 253]
  ------------------
  319|    198|    case 1: case 3: case 4: /* Variable-metrics formats do not have metrics here. */
  ------------------
  |  Branch (319:5): [True: 46, False: 207]
  |  Branch (319:13): [True: 152, False: 101]
  |  Branch (319:21): [True: 0, False: 253]
  ------------------
  320|    253|    default:return (false);
  ------------------
  |  Branch (320:5): [True: 55, False: 198]
  ------------------
  321|    253|    }
  322|    253|  }
_ZNK2OT19IndexSubtableRecord11get_extentsEP18hb_glyph_extents_tPKvb:
  511|    253|  { return (base+offsetToSubtable).get_extents (extents, scale); }
_ZNK2OT4CBDT13accelerator_t11get_extentsEP9hb_font_tjP18hb_glyph_extents_tb:
  838|   749k|    {
  839|   749k|      const void *base;
  840|   749k|      const BitmapSizeTable &strike = this->cblc->choose_strike (font);
  841|   749k|      const IndexSubtableRecord *subtable_record = strike.find_table (glyph, cblc, &base);
  842|   749k|      if (!subtable_record || !strike.ppemX || !strike.ppemY)
  ------------------
  |  Branch (842:11): [True: 749k, False: 310]
  |  Branch (842:31): [True: 34, False: 276]
  |  Branch (842:48): [True: 23, False: 253]
  ------------------
  843|   749k|	return false;
  844|       |
  845|    253|      if (subtable_record->get_extents (extents, base, scale))
  ------------------
  |  Branch (845:11): [True: 0, False: 253]
  ------------------
  846|      0|	return true;
  847|       |
  848|    253|      unsigned int image_offset = 0, image_length = 0, image_format = 0;
  849|    253|      if (!subtable_record->get_image_data (glyph, base, &image_offset, &image_length, &image_format))
  ------------------
  |  Branch (849:11): [True: 95, False: 158]
  ------------------
  850|     95|	return false;
  851|       |
  852|    158|      unsigned int cbdt_len = cbdt.get_length ();
  853|    158|      if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
  ------------------
  |  |  259|    278|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47, False: 111]
  |  |  |  Branch (259:47): [True: 38, False: 120]
  |  |  |  Branch (259:47): [True: 9, False: 111]
  |  |  ------------------
  ------------------
  854|     47|	return false;
  855|       |
  856|    111|      switch (image_format)
  857|    111|      {
  858|     52|      case 17: {
  ------------------
  |  Branch (858:7): [True: 52, False: 59]
  ------------------
  859|     52|	if (unlikely (image_length < GlyphBitmapDataFormat17::min_size))
  ------------------
  |  |  259|     52|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 42]
  |  |  ------------------
  ------------------
  860|     10|	  return false;
  861|     42|	auto &glyphFormat17 = StructAtOffset<GlyphBitmapDataFormat17> (this->cbdt, image_offset);
  862|     42|	glyphFormat17.glyphMetrics.get_extents (font, extents, scale);
  863|     42|	break;
  864|     52|      }
  865|     49|      case 18: {
  ------------------
  |  Branch (865:7): [True: 49, False: 62]
  ------------------
  866|     49|	if (unlikely (image_length < GlyphBitmapDataFormat18::min_size))
  ------------------
  |  |  259|     49|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 34]
  |  |  ------------------
  ------------------
  867|     15|	  return false;
  868|     34|	auto &glyphFormat18 = StructAtOffset<GlyphBitmapDataFormat18> (this->cbdt, image_offset);
  869|     34|	glyphFormat18.glyphMetrics.get_extents (font, extents, scale);
  870|     34|	break;
  871|     49|      }
  872|     10|      default: return false; /* TODO: Support other image formats. */
  ------------------
  |  Branch (872:7): [True: 10, False: 101]
  ------------------
  873|    111|      }
  874|       |
  875|       |      /* Convert to font units. */
  876|     76|      if (scale)
  ------------------
  |  Branch (876:11): [True: 76, False: 0]
  ------------------
  877|     76|      {
  878|     76|	float x_scale = upem / (float) strike.ppemX;
  879|     76|	float y_scale = upem / (float) strike.ppemY;
  880|     76|	extents->x_bearing = roundf (extents->x_bearing * x_scale);
  ------------------
  |  |  207|     76|#define roundf(x) _hb_roundf(x)
  ------------------
  881|     76|	extents->y_bearing = roundf (extents->y_bearing * y_scale);
  ------------------
  |  |  207|     76|#define roundf(x) _hb_roundf(x)
  ------------------
  882|     76|	extents->width = roundf (extents->width * x_scale);
  ------------------
  |  |  207|     76|#define roundf(x) _hb_roundf(x)
  ------------------
  883|     76|	extents->height = roundf (extents->height * y_scale);
  ------------------
  |  |  207|     76|#define roundf(x) _hb_roundf(x)
  ------------------
  884|     76|      }
  885|       |
  886|     76|      return true;
  887|    111|    }

_ZN2OT18hb_paint_context_t20default_return_valueEv:
   58|   553k|  static return_t default_return_value () { return hb_empty_t (); }
_ZNK2OT18hb_paint_context_t14get_colr_tableEv:
   61|   159k|  { return reinterpret_cast<const COLR *> (base); }
_ZN2OT18hb_paint_context_tC2EPKvP16hb_paint_funcs_tPvP9hb_font_tjjRNS_17VarStoreInstancerE:
   88|  11.1k|  { }
_ZN2OT18hb_paint_context_t9get_colorEjfPi:
   91|  48.3k|  {
   92|  48.3k|    hb_color_t color = foreground;
   93|       |
   94|  48.3k|    *is_foreground = true;
   95|       |
   96|  48.3k|    if (color_index != 0xffff)
  ------------------
  |  Branch (96:9): [True: 47.6k, False: 682]
  ------------------
   97|  47.6k|    {
   98|  47.6k|      if (!funcs->custom_palette_color (data, color_index, &color))
  ------------------
  |  Branch (98:11): [True: 47.6k, False: 0]
  ------------------
   99|  47.6k|      {
  100|  47.6k|	unsigned int clen = 1;
  101|  47.6k|	hb_face_t *face = hb_font_get_face (font);
  102|       |
  103|  47.6k|	hb_ot_color_palette_get_colors (face, palette_index, color_index, &clen, &color);
  104|  47.6k|      }
  105|       |
  106|  47.6k|      *is_foreground = false;
  107|  47.6k|    }
  108|       |
  109|  48.3k|    return HB_COLOR (hb_color_get_blue (color),
  ------------------
  |  |  892|  48.3k|#define HB_COLOR(b,g,r,a) ((hb_color_t) HB_TAG ((b),(g),(r),(a)))
  |  |  ------------------
  |  |  |  |  179|  48.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  110|  48.3k|                     hb_color_get_green (color),
  111|  48.3k|                     hb_color_get_red (color),
  112|  48.3k|                     hb_color_get_alpha (color) * alpha);
  113|  48.3k|  }
_ZNK2OT15BaseGlyphRecord3cmpEj:
  209|  2.79k|  { return g < glyphId ? -1 : g > glyphId ? 1 : 0; }
  ------------------
  |  Branch (209:12): [True: 355, False: 2.43k]
  |  Branch (209:31): [True: 2.27k, False: 163]
  ------------------
_ZNK2OT9Affine2x38sanitizeEP21hb_sanitize_context_t:
  535|   154k|  {
  536|   154k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   154k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  537|   154k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   154k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   154k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  538|   154k|  }
_ZNK2OT9Affine2x311paint_glyphEPNS_18hb_paint_context_tEj:
  560|  29.8k|  {
  561|  29.8k|    c->funcs->push_transform (c->data,
  562|  29.8k|			      xx.to_float (c->instancer (varIdxBase, 0)),
  563|  29.8k|			      yx.to_float (c->instancer (varIdxBase, 1)),
  564|  29.8k|                              xy.to_float (c->instancer (varIdxBase, 2)),
  565|  29.8k|			      yy.to_float (c->instancer (varIdxBase, 3)),
  566|  29.8k|                              dx.to_float (c->instancer (varIdxBase, 4)),
  567|  29.8k|			      dy.to_float (c->instancer (varIdxBase, 5)));
  568|  29.8k|  }
_ZNK2OT15PaintColrLayers8sanitizeEP21hb_sanitize_context_t:
  597|  43.6k|  {
  598|  43.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  43.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  599|  43.6k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  43.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  43.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|  43.6k|  }
_ZNK2OT10PaintSolid8sanitizeEP21hb_sanitize_context_t:
  635|  75.5k|  {
  636|  75.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  75.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  637|  75.5k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  75.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  75.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  638|  75.5k|  }
_ZNK2OT10PaintSolid11paint_glyphEPNS_18hb_paint_context_tEj:
  641|  47.5k|  {
  642|  47.5k|    hb_bool_t is_foreground;
  643|  47.5k|    hb_color_t color;
  644|       |
  645|  47.5k|    color = c->get_color (paletteIndex,
  646|  47.5k|                          alpha.to_float (c->instancer (varIdxBase, 0)),
  647|  47.5k|                          &is_foreground);
  648|  47.5k|    c->funcs->color (c->data, is_foreground, color);
  649|  47.5k|  }
_ZNK2OT10PaintGlyph8sanitizeEP21hb_sanitize_context_t:
  870|  77.9k|  {
  871|  77.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  77.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  872|  77.9k|    return_trace (c->check_struct (this) && paint.sanitize (c, this));
  ------------------
  |  |  349|   155k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  77.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 77.9k, False: 77]
  |  |  |  Branch (349:45): [True: 77.7k, False: 185]
  |  |  ------------------
  ------------------
  873|  77.9k|  }
_ZNK2OT10PaintGlyph11paint_glyphEPNS_18hb_paint_context_tE:
  876|   105k|  {
  877|   105k|    c->funcs->push_inverse_root_transform (c->data, c->font);
  878|   105k|    c->funcs->push_clip_glyph (c->data, gid, c->font);
  879|   105k|    c->funcs->push_root_transform (c->data, c->font);
  880|   105k|    c->recurse (this+paint);
  881|   105k|    c->funcs->pop_transform (c->data);
  882|   105k|    c->funcs->pop_clip (c->data);
  883|   105k|    c->funcs->pop_transform (c->data);
  884|   105k|  }
_ZNK2OT14PaintColrGlyph8sanitizeEP21hb_sanitize_context_t:
  909|  2.97k|  {
  910|  2.97k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.97k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  911|  2.97k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  2.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.97k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  912|  2.97k|  }
_ZNK2OT14PaintTranslate8sanitizeEP21hb_sanitize_context_t:
  986|  87.0k|  {
  987|  87.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  87.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  988|  87.0k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|   174k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  87.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 87.0k, False: 4]
  |  |  |  Branch (349:45): [True: 86.9k, False: 131]
  |  |  ------------------
  ------------------
  989|  87.0k|  }
_ZNK2OT14PaintTranslate11paint_glyphEPNS_18hb_paint_context_tEj:
  992|  84.2k|  {
  993|  84.2k|    float ddx = dx + c->instancer (varIdxBase, 0);
  994|  84.2k|    float ddy = dy + c->instancer (varIdxBase, 1);
  995|       |
  996|  84.2k|    bool p1 = c->funcs->push_translate (c->data, ddx, ddy);
  997|  84.2k|    c->recurse (this+src);
  998|  84.2k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (998:9): [True: 82.2k, False: 1.92k]
  ------------------
  999|  84.2k|  }
_ZNK2OT10PaintScale8sanitizeEP21hb_sanitize_context_t:
 1034|   132k|  {
 1035|   132k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   132k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1036|   132k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|   265k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   132k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 132k, False: 4]
  |  |  |  Branch (349:45): [True: 132k, False: 155]
  |  |  ------------------
  ------------------
 1037|   132k|  }
_ZNK2OT10PaintScale11paint_glyphEPNS_18hb_paint_context_tEj:
 1040|  16.5k|  {
 1041|  16.5k|    float sx = scaleX.to_float (c->instancer (varIdxBase, 0));
 1042|  16.5k|    float sy = scaleY.to_float (c->instancer (varIdxBase, 1));
 1043|       |
 1044|  16.5k|    bool p1 = c->funcs->push_scale (c->data, sx, sy);
 1045|  16.5k|    c->recurse (this+src);
 1046|  16.5k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1046:9): [True: 16.4k, False: 31]
  ------------------
 1047|  16.5k|  }
_ZNK2OT22PaintScaleAroundCenter8sanitizeEP21hb_sanitize_context_t:
 1084|  42.2k|  {
 1085|  42.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  42.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1086|  42.2k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|  84.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  42.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 42.2k, False: 5]
  |  |  |  Branch (349:45): [True: 42.1k, False: 103]
  |  |  ------------------
  ------------------
 1087|  42.2k|  }
_ZNK2OT22PaintScaleAroundCenter11paint_glyphEPNS_18hb_paint_context_tEj:
 1090|  13.6k|  {
 1091|  13.6k|    float sx = scaleX.to_float (c->instancer (varIdxBase, 0));
 1092|  13.6k|    float sy = scaleY.to_float (c->instancer (varIdxBase, 1));
 1093|  13.6k|    float tCenterX = centerX + c->instancer (varIdxBase, 2);
 1094|  13.6k|    float tCenterY = centerY + c->instancer (varIdxBase, 3);
 1095|       |
 1096|  13.6k|    bool p1 = c->funcs->push_translate (c->data, +tCenterX, +tCenterY);
 1097|  13.6k|    bool p2 = c->funcs->push_scale (c->data, sx, sy);
 1098|  13.6k|    bool p3 = c->funcs->push_translate (c->data, -tCenterX, -tCenterY);
 1099|  13.6k|    c->recurse (this+src);
 1100|  13.6k|    if (p3) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1100:9): [True: 13.4k, False: 219]
  ------------------
 1101|  13.6k|    if (p2) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1101:9): [True: 13.3k, False: 260]
  ------------------
 1102|  13.6k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1102:9): [True: 13.4k, False: 219]
  ------------------
 1103|  13.6k|  }
_ZNK2OT17PaintScaleUniform8sanitizeEP21hb_sanitize_context_t:
 1137|  51.7k|  {
 1138|  51.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  51.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1139|  51.7k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|   103k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  51.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 51.7k, False: 3]
  |  |  |  Branch (349:45): [True: 51.6k, False: 90]
  |  |  ------------------
  ------------------
 1140|  51.7k|  }
_ZNK2OT17PaintScaleUniform11paint_glyphEPNS_18hb_paint_context_tEj:
 1143|  13.4k|  {
 1144|  13.4k|    float s = scale.to_float (c->instancer (varIdxBase, 0));
 1145|       |
 1146|  13.4k|    bool p1 = c->funcs->push_scale (c->data, s, s);
 1147|  13.4k|    c->recurse (this+src);
 1148|  13.4k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1148:9): [True: 13.1k, False: 378]
  ------------------
 1149|  13.4k|  }
_ZNK2OT29PaintScaleUniformAroundCenter8sanitizeEP21hb_sanitize_context_t:
 1184|  4.72k|  {
 1185|  4.72k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.72k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1186|  4.72k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|  9.44k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.72k, False: 3]
  |  |  |  Branch (349:45): [True: 4.65k, False: 70]
  |  |  ------------------
  ------------------
 1187|  4.72k|  }
_ZNK2OT29PaintScaleUniformAroundCenter11paint_glyphEPNS_18hb_paint_context_tEj:
 1190|  15.8k|  {
 1191|  15.8k|    float s = scale.to_float (c->instancer (varIdxBase, 0));
 1192|  15.8k|    float tCenterX = centerX + c->instancer (varIdxBase, 1);
 1193|  15.8k|    float tCenterY = centerY + c->instancer (varIdxBase, 2);
 1194|       |
 1195|  15.8k|    bool p1 = c->funcs->push_translate (c->data, +tCenterX, +tCenterY);
 1196|  15.8k|    bool p2 = c->funcs->push_scale (c->data, s, s);
 1197|  15.8k|    bool p3 = c->funcs->push_translate (c->data, -tCenterX, -tCenterY);
 1198|  15.8k|    c->recurse (this+src);
 1199|  15.8k|    if (p3) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1199:9): [True: 15.3k, False: 507]
  ------------------
 1200|  15.8k|    if (p2) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1200:9): [True: 14.8k, False: 986]
  ------------------
 1201|  15.8k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1201:9): [True: 15.3k, False: 507]
  ------------------
 1202|  15.8k|  }
_ZNK2OT11PaintRotate8sanitizeEP21hb_sanitize_context_t:
 1235|  20.7k|  {
 1236|  20.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1237|  20.7k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|  41.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 20.7k, False: 3]
  |  |  |  Branch (349:45): [True: 20.6k, False: 68]
  |  |  ------------------
  ------------------
 1238|  20.7k|  }
_ZNK2OT11PaintRotate11paint_glyphEPNS_18hb_paint_context_tEj:
 1241|  14.9k|  {
 1242|  14.9k|    float a = angle.to_float (c->instancer (varIdxBase, 0));
 1243|       |
 1244|  14.9k|    bool p1 = c->funcs->push_rotate (c->data, a);
 1245|  14.9k|    c->recurse (this+src);
 1246|  14.9k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1246:9): [True: 14.3k, False: 655]
  ------------------
 1247|  14.9k|  }
_ZNK2OT23PaintRotateAroundCenter8sanitizeEP21hb_sanitize_context_t:
 1282|  6.32k|  {
 1283|  6.32k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.32k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1284|  6.32k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|  12.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.32k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.32k, False: 3]
  |  |  |  Branch (349:45): [True: 6.23k, False: 86]
  |  |  ------------------
  ------------------
 1285|  6.32k|  }
_ZNK2OT23PaintRotateAroundCenter11paint_glyphEPNS_18hb_paint_context_tEj:
 1288|  19.8k|  {
 1289|  19.8k|    float a = angle.to_float (c->instancer (varIdxBase, 0));
 1290|  19.8k|    float tCenterX = centerX + c->instancer (varIdxBase, 1);
 1291|  19.8k|    float tCenterY = centerY + c->instancer (varIdxBase, 2);
 1292|       |
 1293|  19.8k|    bool p1 = c->funcs->push_translate (c->data, +tCenterX, +tCenterY);
 1294|  19.8k|    bool p2 = c->funcs->push_rotate (c->data, a);
 1295|  19.8k|    bool p3 = c->funcs->push_translate (c->data, -tCenterX, -tCenterY);
 1296|  19.8k|    c->recurse (this+src);
 1297|  19.8k|    if (p3) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1297:9): [True: 19.6k, False: 237]
  ------------------
 1298|  19.8k|    if (p2) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1298:9): [True: 18.6k, False: 1.21k]
  ------------------
 1299|  19.8k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1299:9): [True: 19.6k, False: 237]
  ------------------
 1300|  19.8k|  }
_ZNK2OT9PaintSkew8sanitizeEP21hb_sanitize_context_t:
 1336|  84.8k|  {
 1337|  84.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  84.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1338|  84.8k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|   169k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  84.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 84.8k, False: 4]
  |  |  |  Branch (349:45): [True: 84.7k, False: 76]
  |  |  ------------------
  ------------------
 1339|  84.8k|  }
_ZNK2OT9PaintSkew11paint_glyphEPNS_18hb_paint_context_tEj:
 1342|  55.4k|  {
 1343|  55.4k|    float sx = xSkewAngle.to_float(c->instancer (varIdxBase, 0));
 1344|  55.4k|    float sy = ySkewAngle.to_float(c->instancer (varIdxBase, 1));
 1345|       |
 1346|  55.4k|    bool p1 = c->funcs->push_skew (c->data, sx, sy);
 1347|  55.4k|    c->recurse (this+src);
 1348|  55.4k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1348:9): [True: 55.2k, False: 213]
  ------------------
 1349|  55.4k|  }
_ZNK2OT21PaintSkewAroundCenter8sanitizeEP21hb_sanitize_context_t:
 1386|  7.91k|  {
 1387|  7.91k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.91k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1388|  7.91k|    return_trace (c->check_struct (this) && src.sanitize (c, this));
  ------------------
  |  |  349|  15.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.91k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.90k, False: 3]
  |  |  |  Branch (349:45): [True: 7.79k, False: 113]
  |  |  ------------------
  ------------------
 1389|  7.91k|  }
_ZNK2OT21PaintSkewAroundCenter11paint_glyphEPNS_18hb_paint_context_tEj:
 1392|  51.4k|  {
 1393|  51.4k|    float sx = xSkewAngle.to_float(c->instancer (varIdxBase, 0));
 1394|  51.4k|    float sy = ySkewAngle.to_float(c->instancer (varIdxBase, 1));
 1395|  51.4k|    float tCenterX = centerX + c->instancer (varIdxBase, 2);
 1396|  51.4k|    float tCenterY = centerY + c->instancer (varIdxBase, 3);
 1397|       |
 1398|  51.4k|    bool p1 = c->funcs->push_translate (c->data, +tCenterX, +tCenterY);
 1399|  51.4k|    bool p2 = c->funcs->push_skew (c->data, sx, sy);
 1400|  51.4k|    bool p3 = c->funcs->push_translate (c->data, -tCenterX, -tCenterY);
 1401|  51.4k|    c->recurse (this+src);
 1402|  51.4k|    if (p3) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1402:9): [True: 50.8k, False: 563]
  ------------------
 1403|  51.4k|    if (p2) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1403:9): [True: 50.6k, False: 759]
  ------------------
 1404|  51.4k|    if (p1) c->funcs->pop_transform (c->data);
  ------------------
  |  Branch (1404:9): [True: 50.8k, False: 563]
  ------------------
 1405|  51.4k|  }
_ZNK2OT14PaintComposite8sanitizeEP21hb_sanitize_context_t:
 1433|  2.20M|  {
 1434|  2.20M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.20M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1435|  2.20M|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  8.81M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.20M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.20M, False: 96]
  |  |  |  Branch (349:45): [True: 2.20M, False: 2.24k]
  |  |  |  Branch (349:45): [True: 2.19M, False: 1.72k]
  |  |  ------------------
  ------------------
 1436|  2.20M|                  src.sanitize (c, this) &&
 1437|  2.20M|                  backdrop.sanitize (c, this));
 1438|  2.20M|  }
_ZNK2OT14PaintComposite11paint_glyphEPNS_18hb_paint_context_tE:
 1441|   446k|  {
 1442|   446k|    c->recurse (this+backdrop);
 1443|   446k|    c->funcs->push_group (c->data);
 1444|   446k|    c->recurse (this+src);
 1445|   446k|    c->funcs->pop_group (c->data, (hb_paint_composite_mode_t) (int) mode);
 1446|   446k|  }
_ZNK2OT14ClipBoxFormat18sanitizeEP21hb_sanitize_context_t:
 1464|    636|  {
 1465|    636|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    636|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1466|    636|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    636|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    636|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1467|    636|  }
_ZNK2OT14ClipBoxFormat112get_clip_boxERNS_11ClipBoxDataERKNS_17VarStoreInstancerE:
 1470|    550|  {
 1471|    550|    clip_box.xMin = xMin;
 1472|    550|    clip_box.yMin = yMin;
 1473|    550|    clip_box.xMax = xMax;
 1474|    550|    clip_box.yMax = yMax;
 1475|    550|  }
_ZNK2OT14ClipBoxFormat212get_clip_boxERNS_11ClipBoxDataERKNS_17VarStoreInstancerE:
 1512|    429|  {
 1513|    429|    value.get_clip_box(clip_box, instancer);
 1514|    429|    if (instancer)
  ------------------
  |  Branch (1514:9): [True: 0, False: 429]
  ------------------
 1515|      0|    {
 1516|      0|      clip_box.xMin += roundf (instancer (varIdxBase, 0));
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
 1517|      0|      clip_box.yMin += roundf (instancer (varIdxBase, 1));
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
 1518|      0|      clip_box.xMax += roundf (instancer (varIdxBase, 2));
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
 1519|      0|      clip_box.yMax += roundf (instancer (varIdxBase, 3));
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
 1520|      0|    }
 1521|    429|  }
_ZNK2OT7ClipBox11get_extentsEP18hb_glyph_extents_tRKNS_17VarStoreInstancerE:
 1551|  1.15k|  {
 1552|  1.15k|    ClipBoxData clip_box;
 1553|  1.15k|    switch (u.format) {
 1554|    121|    case 1:
  ------------------
  |  Branch (1554:5): [True: 121, False: 1.02k]
  ------------------
 1555|    121|      u.format1.get_clip_box (clip_box, instancer);
 1556|    121|      break;
 1557|    429|    case 2:
  ------------------
  |  Branch (1557:5): [True: 429, False: 721]
  ------------------
 1558|    429|      u.format2.get_clip_box (clip_box, instancer);
 1559|    429|      break;
 1560|    600|    default:
  ------------------
  |  Branch (1560:5): [True: 600, False: 550]
  ------------------
 1561|    600|      return false;
 1562|  1.15k|    }
 1563|       |
 1564|    550|    extents->x_bearing = clip_box.xMin;
 1565|    550|    extents->y_bearing = clip_box.yMax;
 1566|    550|    extents->width = clip_box.xMax - clip_box.xMin;
 1567|    550|    extents->height = clip_box.yMin - clip_box.yMax;
 1568|    550|    return true;
 1569|  1.15k|  }
_ZNK2OT10ClipRecord3cmpEj:
 1582|  9.43k|  { return g < startGlyphID ? -1 : g <= endGlyphID ? 0 : +1; }
  ------------------
  |  Branch (1582:12): [True: 7.07k, False: 2.35k]
  |  Branch (1582:36): [True: 1.15k, False: 1.20k]
  ------------------
_ZNK2OT10ClipRecord8sanitizeEP21hb_sanitize_context_tPKv:
 1596|   240k|  {
 1597|   240k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   240k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1598|   240k|    return_trace (c->check_struct (this) && clipBox.sanitize (c, base));
  ------------------
  |  |  349|   481k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   240k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 240k, False: 4]
  |  |  |  Branch (349:45): [True: 240k, False: 32]
  |  |  ------------------
  ------------------
 1599|   240k|  }
_ZNK2OT10ClipRecord11get_extentsEP18hb_glyph_extents_tPKvRKNS_17VarStoreInstancerE:
 1604|  1.15k|  {
 1605|  1.15k|    return (base+clipBox).get_extents (extents, instancer);
 1606|  1.15k|  }
_ZNK2OT8ClipList8sanitizeEP21hb_sanitize_context_t:
 1704|  2.60k|  {
 1705|  2.60k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.60k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1706|       |    // TODO Make a formatted struct!
 1707|  2.60k|    return_trace (c->check_struct (this) && clips.sanitize (c, this));
  ------------------
  |  |  349|  3.21k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 603, False: 2.00k]
  |  |  |  Branch (349:45): [True: 426, False: 177]
  |  |  ------------------
  ------------------
 1708|  2.60k|  }
_ZNK2OT8ClipList11get_extentsEjP18hb_glyph_extents_tRKNS_17VarStoreInstancerE:
 1714|   138k|  {
 1715|   138k|    auto *rec = clips.as_array ().bsearch (gid);
 1716|   138k|    if (rec)
  ------------------
  |  Branch (1716:9): [True: 1.15k, False: 137k]
  ------------------
 1717|  1.15k|    {
 1718|  1.15k|      rec->get_extents (extents, this, instancer);
 1719|  1.15k|      return true;
 1720|  1.15k|    }
 1721|   137k|    return false;
 1722|   138k|  }
_ZNK2OT20BaseGlyphPaintRecord3cmpEj:
 1829|   215k|  { return g < glyphId ? -1 : g > glyphId ? 1 : 0; }
  ------------------
  |  Branch (1829:12): [True: 73.0k, False: 142k]
  |  Branch (1829:31): [True: 8.67k, False: 133k]
  ------------------
_ZNK2OT20BaseGlyphPaintRecord8sanitizeEP21hb_sanitize_context_tPKv:
 1846|  37.0k|  {
 1847|  37.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  37.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1848|  37.0k|    return_trace (likely (c->check_struct (this) && paint.sanitize (c, base)));
  ------------------
  |  |  349|  73.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  37.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 36.9k, False: 122]
  |  |  |  Branch (349:45): [True: 34.5k, False: 2.33k]
  |  |  ------------------
  ------------------
 1849|  37.0k|  }
_ZNK2OT13BaseGlyphList8sanitizeEP21hb_sanitize_context_t:
 1882|  7.19k|  {
 1883|  7.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1884|  7.19k|    return_trace (SortedArray32Of<BaseGlyphPaintRecord>::sanitize (c, this));
  ------------------
  |  |  349|  7.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1885|  7.19k|  }
_ZNK2OT9LayerList9get_paintEj:
 1891|  1.16M|  { return this+(*this)[i]; }
_ZNK2OT9LayerList8sanitizeEP21hb_sanitize_context_t:
 1912|  2.84k|  {
 1913|  2.84k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.84k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1914|  2.84k|    return_trace (Array32OfOffset32To<Paint>::sanitize (c, this));
  ------------------
  |  |  349|  2.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1915|  2.84k|  }
_ZNK2OT4COLR11has_v0_dataEv:
 1922|  33.3k|  bool has_v0_data () const { return numBaseGlyphs; }
_ZNK2OT4COLR16get_glyph_layersEjjPjP19hb_ot_color_layer_t:
 1935|  33.3k|  {
 1936|  33.3k|    const BaseGlyphRecord &record = (this+baseGlyphsZ).bsearch (numBaseGlyphs, glyph);
 1937|       |
 1938|  33.3k|    hb_array_t<const LayerRecord> all_layers = (this+layersZ).as_array (numLayers);
 1939|  33.3k|    hb_array_t<const LayerRecord> glyph_layers = all_layers.sub_array (record.firstLayerIdx,
 1940|  33.3k|								       record.numLayers);
 1941|  33.3k|    if (count)
  ------------------
  |  Branch (1941:9): [True: 0, False: 33.3k]
  ------------------
 1942|      0|    {
 1943|      0|      + glyph_layers.sub_array (start_offset, count)
 1944|      0|      | hb_sink (hb_array (layers, *count))
 1945|      0|      ;
 1946|      0|    }
 1947|  33.3k|    return glyph_layers.length;
 1948|  33.3k|  }
_ZNK2OT4COLR13get_layerListEv:
 2026|  32.8k|  { return (this+layerList); }
_ZNK2OT4COLR8sanitizeEP21hb_sanitize_context_t:
 2032|  7.88k|  {
 2033|  7.88k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.88k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2034|  7.88k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   129k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.87k, False: 4]
  |  |  |  Branch (349:45): [True: 7.85k, False: 21]
  |  |  |  Branch (349:45): [True: 7.84k, False: 10]
  |  |  |  Branch (349:45): [True: 7.81k, False: 3]
  |  |  |  Branch (349:45): [True: 5.25k, False: 2.56k]
  |  |  |  Branch (349:45): [True: 4.90k, False: 349]
  |  |  |  Branch (349:45): [True: 4.84k, False: 59]
  |  |  |  Branch (349:45): [True: 4.81k, False: 27]
  |  |  |  Branch (349:45): [True: 4.79k, False: 22]
  |  |  |  Branch (349:45): [True: 25, False: 7.82k]
  |  |  ------------------
  ------------------
 2035|  7.88k|                  (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) &&
 2036|  7.88k|                  (this+layersZ).sanitize (c, numLayers) &&
 2037|  7.88k|                  (version == 0 ||
 2038|  7.88k|		   (version == 1 &&
 2039|  7.88k|		    baseGlyphList.sanitize (c, this) &&
 2040|  7.88k|		    layerList.sanitize (c, this) &&
 2041|  7.88k|		    clipList.sanitize (c, this) &&
 2042|  7.88k|		    varIdxMap.sanitize (c, this) &&
 2043|  7.88k|		    varStore.sanitize (c, this))));
 2044|  7.88k|  }
_ZNK2OT4COLR21get_base_glyph_recordEj:
 2088|  1.56k|  {
 2089|  1.56k|    const BaseGlyphRecord* record = &(this+baseGlyphsZ).bsearch (numBaseGlyphs, (unsigned int) gid);
 2090|  1.56k|    if (record == &Null (BaseGlyphRecord) ||
  ------------------
  |  |  124|  3.12k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (2090:9): [True: 1.54k, False: 20]
  ------------------
 2091|  1.56k|        (record && (hb_codepoint_t) record->glyphId != gid))
  ------------------
  |  Branch (2091:10): [True: 20, False: 0]
  |  Branch (2091:20): [True: 0, False: 20]
  ------------------
 2092|  1.54k|      record = nullptr;
 2093|  1.56k|    return record;
 2094|  1.56k|  }
_ZNK2OT4COLR26get_base_glyph_paintrecordEj:
 2097|   137k|  {
 2098|   137k|    const BaseGlyphPaintRecord* record = &(this+baseGlyphList).bsearch ((unsigned) gid);
 2099|   137k|    if ((record && (hb_codepoint_t) record->glyphId != gid))
  ------------------
  |  Branch (2099:10): [True: 137k, False: 0]
  |  Branch (2099:20): [True: 3.43k, False: 134k]
  ------------------
 2100|  3.43k|      record = nullptr;
 2101|   137k|    return record;
 2102|   137k|  }
_ZNK2OT4COLR20get_base_glyph_paintEj:
 2203|   137k|  {
 2204|   137k|    const BaseGlyphList &baseglyph_paintrecords = this+baseGlyphList;
 2205|   137k|    const BaseGlyphPaintRecord* record = get_base_glyph_paintrecord (glyph);
 2206|   137k|    if (record)
  ------------------
  |  Branch (2206:9): [True: 134k, False: 3.43k]
  ------------------
 2207|   134k|    {
 2208|   134k|      const Paint &paint = &baseglyph_paintrecords+record->paint;
 2209|   134k|      return &paint;
 2210|   134k|    }
 2211|  3.43k|    else
 2212|  3.43k|      return nullptr;
 2213|   137k|  }
_ZNK2OT4COLR11get_extentsEP9hb_font_tjP18hb_glyph_extents_t:
 2218|   749k|  {
 2219|   749k|    if (version != 1)
  ------------------
  |  Branch (2219:9): [True: 743k, False: 6.56k]
  ------------------
 2220|   743k|      return false;
 2221|       |
 2222|  6.56k|    VarStoreInstancer instancer (&(this+varStore),
 2223|  6.56k|				 &(this+varIdxMap),
 2224|  6.56k|				 hb_array (font->coords, font->num_coords));
 2225|       |
 2226|  6.56k|    if (get_clip (glyph, extents, instancer))
  ------------------
  |  Branch (2226:9): [True: 221, False: 6.34k]
  ------------------
 2227|    221|    {
 2228|    221|      font->scale_glyph_extents (extents);
 2229|    221|      return true;
 2230|    221|    }
 2231|       |
 2232|  6.34k|    auto *extents_funcs = hb_paint_extents_get_funcs ();
 2233|  6.34k|    hb_paint_extents_context_t extents_data;
 2234|  6.34k|    bool ret = paint_glyph (font, glyph, extents_funcs, &extents_data, 0, HB_COLOR(0,0,0,0));
  ------------------
  |  |  892|  6.34k|#define HB_COLOR(b,g,r,a) ((hb_color_t) HB_TAG ((b),(g),(r),(a)))
  |  |  ------------------
  |  |  |  |  179|  6.34k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
 2235|       |
 2236|  6.34k|    hb_extents_t e = extents_data.get_extents ();
 2237|  6.34k|    if (e.is_void ())
  ------------------
  |  Branch (2237:9): [True: 5.34k, False: 995]
  ------------------
 2238|  5.34k|    {
 2239|  5.34k|      extents->x_bearing = 0;
 2240|  5.34k|      extents->y_bearing = 0;
 2241|  5.34k|      extents->width = 0;
 2242|  5.34k|      extents->height = 0;
 2243|  5.34k|    }
 2244|    995|    else
 2245|    995|    {
 2246|    995|      extents->x_bearing = e.xmin;
 2247|    995|      extents->y_bearing = e.ymax;
 2248|    995|      extents->width = e.xmax - e.xmin;
 2249|    995|      extents->height = e.ymin - e.ymax;
 2250|    995|    }
 2251|       |
 2252|  6.34k|    return ret;
 2253|  6.56k|  }
_ZNK2OT4COLR8get_clipEjP18hb_glyph_extents_tNS_17VarStoreInstancerE:
 2272|   138k|  {
 2273|   138k|    return (this+clipList).get_extents (glyph,
 2274|   138k|					extents,
 2275|   138k|					instancer);
 2276|   138k|  }
_ZNK2OT4COLR11paint_glyphEP9hb_font_tjP16hb_paint_funcs_tPvjjb:
 2281|  11.1k|  {
 2282|  11.1k|    VarStoreInstancer instancer (&(this+varStore),
 2283|  11.1k|	                         &(this+varIdxMap),
 2284|  11.1k|	                         hb_array (font->coords, font->num_coords));
 2285|  11.1k|    hb_paint_context_t c (this, funcs, data, font, palette_index, foreground, instancer);
 2286|       |
 2287|  11.1k|    if (version == 1)
  ------------------
  |  Branch (2287:9): [True: 11.1k, False: 0]
  ------------------
 2288|  11.1k|    {
 2289|  11.1k|      const Paint *paint = get_base_glyph_paint (glyph);
 2290|  11.1k|      if (paint)
  ------------------
  |  Branch (2290:11): [True: 9.55k, False: 1.56k]
  ------------------
 2291|  9.55k|      {
 2292|       |        // COLRv1 glyph
 2293|       |
 2294|  9.55k|	VarStoreInstancer instancer (&(this+varStore),
 2295|  9.55k|				     &(this+varIdxMap),
 2296|  9.55k|				     hb_array (font->coords, font->num_coords));
 2297|       |
 2298|  9.55k|	bool is_bounded = true;
 2299|  9.55k|	if (clip)
  ------------------
  |  Branch (2299:6): [True: 4.77k, False: 4.77k]
  ------------------
 2300|  4.77k|	{
 2301|  4.77k|	  hb_glyph_extents_t extents;
 2302|  4.77k|	  if (get_clip (glyph, &extents, instancer))
  ------------------
  |  Branch (2302:8): [True: 0, False: 4.77k]
  ------------------
 2303|      0|	  {
 2304|      0|	    font->scale_glyph_extents (&extents);
 2305|      0|	    c.funcs->push_clip_rectangle (c.data,
 2306|      0|					  extents.x_bearing,
 2307|      0|					  extents.y_bearing + extents.height,
 2308|      0|					  extents.x_bearing + extents.width,
 2309|      0|					  extents.y_bearing);
 2310|      0|	  }
 2311|  4.77k|	  else
 2312|  4.77k|	  {
 2313|  4.77k|	    auto *extents_funcs = hb_paint_extents_get_funcs ();
 2314|  4.77k|	    hb_paint_extents_context_t extents_data;
 2315|       |
 2316|  4.77k|	    paint_glyph (font, glyph,
 2317|  4.77k|			 extents_funcs, &extents_data,
 2318|  4.77k|			 palette_index, foreground,
 2319|  4.77k|			 false);
 2320|       |
 2321|  4.77k|	    hb_extents_t extents = extents_data.get_extents ();
 2322|  4.77k|	    is_bounded = extents_data.is_bounded ();
 2323|       |
 2324|  4.77k|	    c.funcs->push_clip_rectangle (c.data,
 2325|  4.77k|					  extents.xmin,
 2326|  4.77k|					  extents.ymin,
 2327|  4.77k|					  extents.xmax,
 2328|  4.77k|					  extents.ymax);
 2329|  4.77k|	  }
 2330|  4.77k|	}
 2331|       |
 2332|  9.55k|	c.funcs->push_root_transform (c.data, font);
 2333|       |
 2334|  9.55k|	if (is_bounded)
  ------------------
  |  Branch (2334:6): [True: 8.01k, False: 1.54k]
  ------------------
 2335|  8.01k|	  c.recurse (*paint);
 2336|       |
 2337|  9.55k|	c.funcs->pop_transform (c.data);
 2338|       |
 2339|  9.55k|	if (clip)
  ------------------
  |  Branch (2339:6): [True: 4.77k, False: 4.77k]
  ------------------
 2340|  4.77k|	  c.funcs->pop_clip (c.data);
 2341|       |
 2342|  9.55k|        return true;
 2343|  9.55k|      }
 2344|  11.1k|    }
 2345|       |
 2346|  1.56k|    const BaseGlyphRecord *record = get_base_glyph_record (glyph);
 2347|  1.56k|    if (record && ((hb_codepoint_t) record->glyphId == glyph))
  ------------------
  |  Branch (2347:9): [True: 20, False: 1.54k]
  |  Branch (2347:19): [True: 20, False: 0]
  ------------------
 2348|     20|    {
 2349|       |      // COLRv0 glyph
 2350|     20|      for (const auto &r : (this+layersZ).as_array (numLayers)
  ------------------
  |  Branch (2350:26): [True: 771, False: 20]
  ------------------
 2351|     20|			   .sub_array (record->firstLayerIdx, record->numLayers))
 2352|    771|      {
 2353|    771|        hb_bool_t is_foreground;
 2354|    771|        hb_color_t color = c.get_color (r.colorIdx, 1., &is_foreground);
 2355|    771|        c.funcs->push_clip_glyph (c.data, r.glyphId, c.font);
 2356|    771|        c.funcs->color (c.data, is_foreground, color);
 2357|    771|        c.funcs->pop_clip (c.data);
 2358|    771|      }
 2359|       |
 2360|     20|      return true;
 2361|     20|    }
 2362|       |
 2363|  1.54k|    return false;
 2364|  1.56k|  }
_ZN2OT18hb_paint_context_t7recurseERKNS_5PaintE:
 2391|  2.60M|{
 2392|  2.60M|  if (unlikely (depth_left <= 0 || edge_count <= 0)) return;
  ------------------
  |  |  259|  5.06M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 901k, False: 1.70M]
  |  |  |  Branch (259:47): [True: 149k, False: 2.45M]
  |  |  |  Branch (259:47): [True: 752k, False: 1.70M]
  |  |  ------------------
  ------------------
 2393|  1.70M|  depth_left--;
 2394|  1.70M|  edge_count--;
 2395|  1.70M|  paint.dispatch (this);
 2396|  1.70M|  depth_left++;
 2397|  1.70M|}
_ZNK2OT15PaintColrLayers11paint_glyphEPNS_18hb_paint_context_tE:
 2400|  32.8k|{
 2401|  32.8k|  const LayerList &paint_offset_lists = c->get_colr_table ()->get_layerList ();
 2402|  1.19M|  for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++)
  ------------------
  |  Branch (2402:38): [True: 1.16M, False: 32.8k]
  ------------------
 2403|  1.16M|  {
 2404|  1.16M|    const Paint &paint = paint_offset_lists.get_paint (i);
 2405|  1.16M|    c->funcs->push_group (c->data);
 2406|  1.16M|    c->recurse (paint);
 2407|  1.16M|    c->funcs->pop_group (c->data, HB_PAINT_COMPOSITE_MODE_SRC_OVER);
 2408|  1.16M|  }
 2409|  32.8k|}
_ZNK2OT14PaintColrGlyph11paint_glyphEPNS_18hb_paint_context_tE:
 2412|   126k|{
 2413|   126k|  const COLR *colr_table = c->get_colr_table ();
 2414|   126k|  const Paint *paint = colr_table->get_base_glyph_paint (gid);
 2415|       |
 2416|   126k|  hb_glyph_extents_t extents = {0};
 2417|   126k|  bool has_clip_box = colr_table->get_clip (gid, &extents, c->instancer);
 2418|       |
 2419|   126k|  if (has_clip_box)
  ------------------
  |  Branch (2419:7): [True: 929, False: 125k]
  ------------------
 2420|    929|    c->funcs->push_clip_rectangle (c->data,
 2421|    929|				   extents.x_bearing,
 2422|    929|				   extents.y_bearing + extents.height,
 2423|    929|				   extents.x_bearing + extents.width,
 2424|    929|				   extents.y_bearing);
 2425|       |
 2426|   126k|  if (paint)
  ------------------
  |  Branch (2426:7): [True: 124k, False: 1.87k]
  ------------------
 2427|   124k|    c->recurse (*paint);
 2428|       |
 2429|   126k|  if (has_clip_box)
  ------------------
  |  Branch (2429:7): [True: 929, False: 125k]
  ------------------
 2430|    929|    c->funcs->pop_clip (c->data);
 2431|   126k|}
_ZNK2OT5Paint8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1735|  4.59M|  {
 1736|  4.59M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.59M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1737|       |
 1738|  4.59M|    if (unlikely (!c->check_start_recursion (HB_MAX_NESTING_LEVEL)))
  ------------------
  |  |  259|  4.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 75, False: 4.59M]
  |  |  ------------------
  ------------------
 1739|     75|      return_trace (c->no_dispatch_return_value ());
  ------------------
  |  |  349|     75|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     75|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1740|       |
 1741|  4.59M|    return_trace (c->end_recursion (this->dispatch (c, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|  4.59M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.59M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1742|  4.59M|  }
_ZNK2OT5Paint8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
 1746|  4.59M|  {
 1747|  4.59M|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  4.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20.9k, False: 4.57M]
  |  |  ------------------
  ------------------
 1748|  4.57M|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  4.57M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1749|  4.57M|    switch (u.format) {
 1750|  43.6k|    case 1: return_trace (c->dispatch (u.paintformat1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  43.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  43.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1750:5): [True: 43.6k, False: 4.52M]
  ------------------
 1751|  40.4k|    case 2: return_trace (c->dispatch (u.paintformat2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  40.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1751:5): [True: 40.4k, False: 4.53M]
  ------------------
 1752|  35.2k|    case 3: return_trace (c->dispatch (u.paintformat3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  35.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1752:5): [True: 35.2k, False: 4.53M]
  ------------------
 1753|  35.3k|    case 4: return_trace (c->dispatch (u.paintformat4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  35.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1753:5): [True: 35.3k, False: 4.53M]
  ------------------
 1754|  57.2k|    case 5: return_trace (c->dispatch (u.paintformat5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  57.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  57.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1754:5): [True: 57.2k, False: 4.51M]
  ------------------
 1755|   187k|    case 6: return_trace (c->dispatch (u.paintformat6, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   187k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   187k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1755:5): [True: 187k, False: 4.38M]
  ------------------
 1756|  64.3k|    case 7: return_trace (c->dispatch (u.paintformat7, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  64.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1756:5): [True: 64.3k, False: 4.50M]
  ------------------
 1757|  15.1k|    case 8: return_trace (c->dispatch (u.paintformat8, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  15.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1757:5): [True: 15.1k, False: 4.55M]
  ------------------
 1758|  24.9k|    case 9: return_trace (c->dispatch (u.paintformat9, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  24.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1758:5): [True: 24.9k, False: 4.54M]
  ------------------
 1759|  77.9k|    case 10: return_trace (c->dispatch (u.paintformat10, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  77.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  77.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1759:5): [True: 77.9k, False: 4.49M]
  ------------------
 1760|  2.97k|    case 11: return_trace (c->dispatch (u.paintformat11, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.97k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1760:5): [True: 2.97k, False: 4.57M]
  ------------------
 1761|  84.2k|    case 12: return_trace (c->dispatch (u.paintformat12, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  84.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  84.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1761:5): [True: 84.2k, False: 4.48M]
  ------------------
 1762|   126k|    case 13: return_trace (c->dispatch (u.paintformat13, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   126k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   126k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1762:5): [True: 126k, False: 4.44M]
  ------------------
 1763|  2.41k|    case 14: return_trace (c->dispatch (u.paintformat14, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.41k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1763:5): [True: 2.41k, False: 4.57M]
  ------------------
 1764|  84.7k|    case 15: return_trace (c->dispatch (u.paintformat15, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  84.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  84.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1764:5): [True: 84.7k, False: 4.48M]
  ------------------
 1765|  9.82k|    case 16: return_trace (c->dispatch (u.paintformat16, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1765:5): [True: 9.82k, False: 4.56M]
  ------------------
 1766|   123k|    case 17: return_trace (c->dispatch (u.paintformat17, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   123k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   123k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1766:5): [True: 123k, False: 4.45M]
  ------------------
 1767|  38.9k|    case 18: return_trace (c->dispatch (u.paintformat18, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  38.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  38.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1767:5): [True: 38.9k, False: 4.53M]
  ------------------
 1768|  3.42k|    case 19: return_trace (c->dispatch (u.paintformat19, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1768:5): [True: 3.42k, False: 4.57M]
  ------------------
 1769|  47.8k|    case 20: return_trace (c->dispatch (u.paintformat20, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  47.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1769:5): [True: 47.8k, False: 4.52M]
  ------------------
 1770|  4.07k|    case 21: return_trace (c->dispatch (u.paintformat21, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1770:5): [True: 4.07k, False: 4.56M]
  ------------------
 1771|  1.52k|    case 22: return_trace (c->dispatch (u.paintformat22, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.52k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1771:5): [True: 1.52k, False: 4.57M]
  ------------------
 1772|  3.29k|    case 23: return_trace (c->dispatch (u.paintformat23, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1772:5): [True: 3.29k, False: 4.57M]
  ------------------
 1773|  9.19k|    case 24: return_trace (c->dispatch (u.paintformat24, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1773:5): [True: 9.19k, False: 4.56M]
  ------------------
 1774|  11.6k|    case 25: return_trace (c->dispatch (u.paintformat25, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  11.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1774:5): [True: 11.6k, False: 4.56M]
  ------------------
 1775|  4.00k|    case 26: return_trace (c->dispatch (u.paintformat26, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1775:5): [True: 4.00k, False: 4.56M]
  ------------------
 1776|  2.42k|    case 27: return_trace (c->dispatch (u.paintformat27, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1776:5): [True: 2.42k, False: 4.57M]
  ------------------
 1777|  82.1k|    case 28: return_trace (c->dispatch (u.paintformat28, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  82.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  82.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1777:5): [True: 82.1k, False: 4.49M]
  ------------------
 1778|  2.77k|    case 29: return_trace (c->dispatch (u.paintformat29, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1778:5): [True: 2.77k, False: 4.57M]
  ------------------
 1779|  2.00k|    case 30: return_trace (c->dispatch (u.paintformat30, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1779:5): [True: 2.00k, False: 4.57M]
  ------------------
 1780|  6.04k|    case 31: return_trace (c->dispatch (u.paintformat31, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1780:5): [True: 6.04k, False: 4.56M]
  ------------------
 1781|  2.20M|    case 32: return_trace (c->dispatch (u.paintformat32, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.20M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.20M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1781:5): [True: 2.20M, False: 2.36M]
  ------------------
 1782|  1.13M|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.13M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.13M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1782:5): [True: 1.13M, False: 3.43M]
  ------------------
 1783|  4.57M|    }
 1784|  4.57M|  }
_ZNK2OT10NoVariableINS_10PaintSolidEE8sanitizeEP21hb_sanitize_context_t:
  311|  40.4k|  {
  312|  40.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  40.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  40.4k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  80.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 40.3k, False: 46]
  |  |  |  Branch (349:45): [True: 40.3k, False: 0]
  |  |  ------------------
  ------------------
  314|  40.4k|  }
_ZNK2OT8VariableINS_10PaintSolidEE8sanitizeEP21hb_sanitize_context_t:
  257|  35.2k|  {
  258|  35.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  35.2k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  70.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 35.2k, False: 72]
  |  |  |  Branch (349:45): [True: 35.2k, False: 2]
  |  |  ------------------
  ------------------
  260|  35.2k|  }
_ZNK2OT10NoVariableINS_19PaintLinearGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  311|  35.3k|  {
  312|  35.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  35.3k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  70.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 35.3k, False: 81]
  |  |  |  Branch (349:45): [True: 35.2k, False: 43]
  |  |  ------------------
  ------------------
  314|  35.3k|  }
_ZNK2OT19PaintLinearGradientINS_10NoVariableEE8sanitizeEP21hb_sanitize_context_t:
  689|  35.3k|  {
  690|  35.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  691|  35.3k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|  70.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 35.3k, False: 3]
  |  |  |  Branch (349:45): [True: 35.2k, False: 40]
  |  |  ------------------
  ------------------
  692|  35.3k|  }
_ZNK2OT9ColorLineINS_10NoVariableEE8sanitizeEP21hb_sanitize_context_t:
  425|  16.5k|  {
  426|  16.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  427|  16.5k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  32.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.8k, False: 653]
  |  |  |  Branch (349:45): [True: 15.7k, False: 106]
  |  |  ------------------
  ------------------
  428|  16.5k|                  stops.sanitize (c));
  429|  16.5k|  }
_ZNK2OT8VariableINS_19PaintLinearGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  257|  57.2k|  {
  258|  57.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  57.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  57.2k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   114k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  57.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 57.1k, False: 73]
  |  |  |  Branch (349:45): [True: 57.0k, False: 52]
  |  |  ------------------
  ------------------
  260|  57.2k|  }
_ZNK2OT19PaintLinearGradientINS_8VariableEE8sanitizeEP21hb_sanitize_context_t:
  689|  57.1k|  {
  690|  57.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  57.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  691|  57.1k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|   114k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  57.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 57.1k, False: 4]
  |  |  |  Branch (349:45): [True: 57.0k, False: 48]
  |  |  ------------------
  ------------------
  692|  57.1k|  }
_ZNK2OT9ColorLineINS_8VariableEE8sanitizeEP21hb_sanitize_context_t:
  425|  88.3k|  {
  426|  88.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  88.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  427|  88.3k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   175k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  88.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 87.6k, False: 662]
  |  |  |  Branch (349:45): [True: 87.5k, False: 119]
  |  |  ------------------
  ------------------
  428|  88.3k|                  stops.sanitize (c));
  429|  88.3k|  }
_ZNK2OT10NoVariableINS_19PaintRadialGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  311|   187k|  {
  312|   187k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   187k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|   187k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   375k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   187k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 187k, False: 99]
  |  |  |  Branch (349:45): [True: 187k, False: 33]
  |  |  ------------------
  ------------------
  314|   187k|  }
_ZNK2OT19PaintRadialGradientINS_10NoVariableEE8sanitizeEP21hb_sanitize_context_t:
  755|   187k|  {
  756|   187k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   187k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  757|   187k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|   375k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   187k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 187k, False: 6]
  |  |  |  Branch (349:45): [True: 187k, False: 27]
  |  |  ------------------
  ------------------
  758|   187k|  }
_ZNK2OT8VariableINS_19PaintRadialGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  257|  64.3k|  {
  258|  64.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  64.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  64.3k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   128k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64.2k, False: 87]
  |  |  |  Branch (349:45): [True: 64.1k, False: 53]
  |  |  ------------------
  ------------------
  260|  64.3k|  }
_ZNK2OT19PaintRadialGradientINS_8VariableEE8sanitizeEP21hb_sanitize_context_t:
  755|  64.2k|  {
  756|  64.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  64.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  757|  64.2k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|   128k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64.2k, False: 3]
  |  |  |  Branch (349:45): [True: 64.1k, False: 50]
  |  |  ------------------
  ------------------
  758|  64.2k|  }
_ZNK2OT10NoVariableINS_18PaintSweepGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  311|  15.1k|  {
  312|  15.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  15.1k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  30.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.0k, False: 91]
  |  |  |  Branch (349:45): [True: 15.0k, False: 20]
  |  |  ------------------
  ------------------
  314|  15.1k|  }
_ZNK2OT18PaintSweepGradientINS_10NoVariableEE8sanitizeEP21hb_sanitize_context_t:
  819|  15.0k|  {
  820|  15.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  821|  15.0k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|  30.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.0k, False: 3]
  |  |  |  Branch (349:45): [True: 15.0k, False: 17]
  |  |  ------------------
  ------------------
  822|  15.0k|  }
_ZNK2OT8VariableINS_18PaintSweepGradientIS0_EEE8sanitizeEP21hb_sanitize_context_t:
  257|  24.9k|  {
  258|  24.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  24.9k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  49.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 24.8k, False: 93]
  |  |  |  Branch (349:45): [True: 24.7k, False: 101]
  |  |  ------------------
  ------------------
  260|  24.9k|  }
_ZNK2OT18PaintSweepGradientINS_8VariableEE8sanitizeEP21hb_sanitize_context_t:
  819|  24.8k|  {
  820|  24.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  821|  24.8k|    return_trace (c->check_struct (this) && colorLine.sanitize (c, this));
  ------------------
  |  |  349|  49.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 24.8k, False: 3]
  |  |  |  Branch (349:45): [True: 24.7k, False: 98]
  |  |  ------------------
  ------------------
  822|  24.8k|  }
_ZNK2OT14PaintTransformINS_10NoVariableEE8sanitizeEP21hb_sanitize_context_t:
  940|  84.2k|  {
  941|  84.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  84.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  942|  84.2k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   336k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  84.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 84.1k, False: 85]
  |  |  |  Branch (349:45): [True: 83.9k, False: 180]
  |  |  |  Branch (349:45): [True: 83.8k, False: 94]
  |  |  ------------------
  ------------------
  943|  84.2k|                  src.sanitize (c, this) &&
  944|  84.2k|                  transform.sanitize (c, this));
  945|  84.2k|  }
_ZNK2OT10NoVariableINS_9Affine2x3EE8sanitizeEP21hb_sanitize_context_t:
  311|  76.9k|  {
  312|  76.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  76.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  76.9k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   153k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  76.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 76.5k, False: 427]
  |  |  |  Branch (349:45): [True: 76.5k, False: 4]
  |  |  ------------------
  ------------------
  314|  76.9k|  }
_ZNK2OT14PaintTransformINS_8VariableEE8sanitizeEP21hb_sanitize_context_t:
  940|   126k|  {
  941|   126k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   126k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  942|   126k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   506k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   126k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 126k, False: 92]
  |  |  |  Branch (349:45): [True: 126k, False: 146]
  |  |  |  Branch (349:45): [True: 126k, False: 118]
  |  |  ------------------
  ------------------
  943|   126k|                  src.sanitize (c, this) &&
  944|   126k|                  transform.sanitize (c, this));
  945|   126k|  }
_ZNK2OT8VariableINS_9Affine2x3EE8sanitizeEP21hb_sanitize_context_t:
  257|  78.3k|  {
  258|  78.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  78.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  78.3k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   156k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 78.0k, False: 276]
  |  |  |  Branch (349:45): [True: 78.0k, False: 0]
  |  |  ------------------
  ------------------
  260|  78.3k|  }
_ZNK2OT10NoVariableINS_14PaintTranslateEE8sanitizeEP21hb_sanitize_context_t:
  311|  2.41k|  {
  312|  2.41k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.41k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  2.41k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  4.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.34k, False: 71]
  |  |  |  Branch (349:45): [True: 2.31k, False: 24]
  |  |  ------------------
  ------------------
  314|  2.41k|  }
_ZNK2OT8VariableINS_14PaintTranslateEE8sanitizeEP21hb_sanitize_context_t:
  257|  84.7k|  {
  258|  84.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  84.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  84.7k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   169k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  84.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 84.7k, False: 26]
  |  |  |  Branch (349:45): [True: 84.6k, False: 111]
  |  |  ------------------
  ------------------
  260|  84.7k|  }
_ZNK2OT10NoVariableINS_10PaintScaleEE8sanitizeEP21hb_sanitize_context_t:
  311|  9.82k|  {
  312|  9.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  9.82k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  19.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.74k, False: 82]
  |  |  |  Branch (349:45): [True: 9.68k, False: 59]
  |  |  ------------------
  ------------------
  314|  9.82k|  }
_ZNK2OT8VariableINS_10PaintScaleEE8sanitizeEP21hb_sanitize_context_t:
  257|   123k|  {
  258|   123k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   123k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|   123k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   246k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   123k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 123k, False: 84]
  |  |  |  Branch (349:45): [True: 122k, False: 100]
  |  |  ------------------
  ------------------
  260|   123k|  }
_ZNK2OT10NoVariableINS_22PaintScaleAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  311|  38.9k|  {
  312|  38.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  38.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  38.9k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  77.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  38.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 38.8k, False: 86]
  |  |  |  Branch (349:45): [True: 38.8k, False: 33]
  |  |  ------------------
  ------------------
  314|  38.9k|  }
_ZNK2OT8VariableINS_22PaintScaleAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  257|  3.42k|  {
  258|  3.42k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.42k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  3.42k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  6.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.33k, False: 85]
  |  |  |  Branch (349:45): [True: 3.26k, False: 75]
  |  |  ------------------
  ------------------
  260|  3.42k|  }
_ZNK2OT10NoVariableINS_17PaintScaleUniformEE8sanitizeEP21hb_sanitize_context_t:
  311|  47.8k|  {
  312|  47.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  47.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  47.8k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  95.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 47.7k, False: 79]
  |  |  |  Branch (349:45): [True: 47.6k, False: 32]
  |  |  ------------------
  ------------------
  314|  47.8k|  }
_ZNK2OT8VariableINS_17PaintScaleUniformEE8sanitizeEP21hb_sanitize_context_t:
  257|  4.07k|  {
  258|  4.07k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.07k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  4.07k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  8.14k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.06k, False: 14]
  |  |  |  Branch (349:45): [True: 4.00k, False: 61]
  |  |  ------------------
  ------------------
  260|  4.07k|  }
_ZNK2OT10NoVariableINS_29PaintScaleUniformAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  311|  1.52k|  {
  312|  1.52k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.52k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  1.52k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  3.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.52k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.47k, False: 46]
  |  |  |  Branch (349:45): [True: 1.45k, False: 25]
  |  |  ------------------
  ------------------
  314|  1.52k|  }
_ZNK2OT8VariableINS_29PaintScaleUniformAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  257|  3.29k|  {
  258|  3.29k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.29k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  3.29k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  6.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.24k, False: 49]
  |  |  |  Branch (349:45): [True: 3.19k, False: 48]
  |  |  ------------------
  ------------------
  260|  3.29k|  }
_ZNK2OT10NoVariableINS_11PaintRotateEE8sanitizeEP21hb_sanitize_context_t:
  311|  9.19k|  {
  312|  9.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  9.19k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  18.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.17k, False: 21]
  |  |  |  Branch (349:45): [True: 9.15k, False: 21]
  |  |  ------------------
  ------------------
  314|  9.19k|  }
_ZNK2OT8VariableINS_11PaintRotateEE8sanitizeEP21hb_sanitize_context_t:
  257|  11.6k|  {
  258|  11.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  11.6k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  23.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.5k, False: 79]
  |  |  |  Branch (349:45): [True: 11.5k, False: 50]
  |  |  ------------------
  ------------------
  260|  11.6k|  }
_ZNK2OT10NoVariableINS_23PaintRotateAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  311|  4.00k|  {
  312|  4.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  4.00k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  7.99k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.98k, False: 25]
  |  |  |  Branch (349:45): [True: 3.93k, False: 46]
  |  |  ------------------
  ------------------
  314|  4.00k|  }
_ZNK2OT8VariableINS_23PaintRotateAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  257|  2.42k|  {
  258|  2.42k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.42k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  2.42k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  4.76k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.33k, False: 87]
  |  |  |  Branch (349:45): [True: 2.29k, False: 43]
  |  |  ------------------
  ------------------
  260|  2.42k|  }
_ZNK2OT10NoVariableINS_9PaintSkewEE8sanitizeEP21hb_sanitize_context_t:
  311|  82.1k|  {
  312|  82.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  82.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  82.1k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|   164k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  82.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 82.1k, False: 24]
  |  |  |  Branch (349:45): [True: 82.0k, False: 38]
  |  |  ------------------
  ------------------
  314|  82.1k|  }
_ZNK2OT8VariableINS_9PaintSkewEE8sanitizeEP21hb_sanitize_context_t:
  257|  2.77k|  {
  258|  2.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  2.77k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  5.50k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.72k, False: 45]
  |  |  |  Branch (349:45): [True: 2.68k, False: 42]
  |  |  ------------------
  ------------------
  260|  2.77k|  }
_ZNK2OT10NoVariableINS_21PaintSkewAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  311|  2.00k|  {
  312|  2.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  313|  2.00k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  3.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.96k, False: 41]
  |  |  |  Branch (349:45): [True: 1.92k, False: 39]
  |  |  ------------------
  ------------------
  314|  2.00k|  }
_ZNK2OT8VariableINS_21PaintSkewAroundCenterEE8sanitizeEP21hb_sanitize_context_t:
  257|  6.04k|  {
  258|  6.04k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.04k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|  6.04k|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|  11.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5.94k, False: 97]
  |  |  |  Branch (349:45): [True: 5.86k, False: 77]
  |  |  ------------------
  ------------------
  260|  6.04k|  }
_ZNK2OT7ClipBox8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
 1539|  2.82k|  {
 1540|  2.82k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  2.82k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.48k, False: 1.34k]
  |  |  ------------------
  ------------------
 1541|  1.34k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  1.34k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1542|  1.34k|    switch (u.format) {
 1543|    361|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    361|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    361|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1543:5): [True: 361, False: 980]
  ------------------
 1544|    318|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    318|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    318|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1544:5): [True: 318, False: 1.02k]
  ------------------
 1545|    662|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|    662|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    662|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1545:5): [True: 662, False: 679]
  ------------------
 1546|  1.34k|    }
 1547|  1.34k|  }
_ZNK2OT8VariableINS_14ClipBoxFormat1EE8sanitizeEP21hb_sanitize_context_t:
  257|    318|  {
  258|    318|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    318|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  259|    318|    return_trace (c->check_struct (this) && value.sanitize (c));
  ------------------
  |  |  349|    593|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    318|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 275, False: 43]
  |  |  |  Branch (349:45): [True: 275, False: 0]
  |  |  ------------------
  ------------------
  260|    318|  }
_ZNK2OT5Paint8dispatchINS_18hb_paint_context_tEJEEENT_8return_tEPS3_DpOT0_:
 1746|  1.70M|  {
 1747|  1.70M|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  1.70M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70M]
  |  |  ------------------
  ------------------
 1748|  1.70M|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  1.70M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1749|  1.70M|    switch (u.format) {
 1750|  32.8k|    case 1: return_trace (c->dispatch (u.paintformat1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  32.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1750:5): [True: 32.8k, False: 1.67M]
  ------------------
 1751|  20.2k|    case 2: return_trace (c->dispatch (u.paintformat2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  20.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1751:5): [True: 20.2k, False: 1.68M]
  ------------------
 1752|  27.3k|    case 3: return_trace (c->dispatch (u.paintformat3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  27.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  27.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1752:5): [True: 27.3k, False: 1.67M]
  ------------------
 1753|  23.2k|    case 4: return_trace (c->dispatch (u.paintformat4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  23.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1753:5): [True: 23.2k, False: 1.68M]
  ------------------
 1754|  6.34k|    case 5: return_trace (c->dispatch (u.paintformat5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1754:5): [True: 6.34k, False: 1.70M]
  ------------------
 1755|  13.1k|    case 6: return_trace (c->dispatch (u.paintformat6, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  13.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1755:5): [True: 13.1k, False: 1.69M]
  ------------------
 1756|  10.3k|    case 7: return_trace (c->dispatch (u.paintformat7, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1756:5): [True: 10.3k, False: 1.69M]
  ------------------
 1757|  16.0k|    case 8: return_trace (c->dispatch (u.paintformat8, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  16.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1757:5): [True: 16.0k, False: 1.69M]
  ------------------
 1758|  9.91k|    case 9: return_trace (c->dispatch (u.paintformat9, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.91k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.91k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1758:5): [True: 9.91k, False: 1.69M]
  ------------------
 1759|   105k|    case 10: return_trace (c->dispatch (u.paintformat10, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   105k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   105k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1759:5): [True: 105k, False: 1.60M]
  ------------------
 1760|   126k|    case 11: return_trace (c->dispatch (u.paintformat11, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   126k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   126k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1760:5): [True: 126k, False: 1.58M]
  ------------------
 1761|  17.1k|    case 12: return_trace (c->dispatch (u.paintformat12, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  17.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1761:5): [True: 17.1k, False: 1.68M]
  ------------------
 1762|  12.6k|    case 13: return_trace (c->dispatch (u.paintformat13, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  12.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1762:5): [True: 12.6k, False: 1.69M]
  ------------------
 1763|  76.3k|    case 14: return_trace (c->dispatch (u.paintformat14, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  76.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  76.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1763:5): [True: 76.3k, False: 1.63M]
  ------------------
 1764|  7.86k|    case 15: return_trace (c->dispatch (u.paintformat15, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.86k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.86k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1764:5): [True: 7.86k, False: 1.69M]
  ------------------
 1765|  10.6k|    case 16: return_trace (c->dispatch (u.paintformat16, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1765:5): [True: 10.6k, False: 1.69M]
  ------------------
 1766|  5.85k|    case 17: return_trace (c->dispatch (u.paintformat17, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1766:5): [True: 5.85k, False: 1.70M]
  ------------------
 1767|  3.81k|    case 18: return_trace (c->dispatch (u.paintformat18, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.81k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1767:5): [True: 3.81k, False: 1.70M]
  ------------------
 1768|  9.83k|    case 19: return_trace (c->dispatch (u.paintformat19, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.83k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1768:5): [True: 9.83k, False: 1.69M]
  ------------------
 1769|  5.06k|    case 20: return_trace (c->dispatch (u.paintformat20, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1769:5): [True: 5.06k, False: 1.70M]
  ------------------
 1770|  8.42k|    case 21: return_trace (c->dispatch (u.paintformat21, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1770:5): [True: 8.42k, False: 1.69M]
  ------------------
 1771|  10.4k|    case 22: return_trace (c->dispatch (u.paintformat22, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1771:5): [True: 10.4k, False: 1.69M]
  ------------------
 1772|  5.42k|    case 23: return_trace (c->dispatch (u.paintformat23, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1772:5): [True: 5.42k, False: 1.70M]
  ------------------
 1773|  8.90k|    case 24: return_trace (c->dispatch (u.paintformat24, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.90k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.90k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1773:5): [True: 8.90k, False: 1.69M]
  ------------------
 1774|  6.07k|    case 25: return_trace (c->dispatch (u.paintformat25, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1774:5): [True: 6.07k, False: 1.70M]
  ------------------
 1775|  9.57k|    case 26: return_trace (c->dispatch (u.paintformat26, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.57k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1775:5): [True: 9.57k, False: 1.69M]
  ------------------
 1776|  10.2k|    case 27: return_trace (c->dispatch (u.paintformat27, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1776:5): [True: 10.2k, False: 1.69M]
  ------------------
 1777|  8.06k|    case 28: return_trace (c->dispatch (u.paintformat28, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1777:5): [True: 8.06k, False: 1.69M]
  ------------------
 1778|  47.4k|    case 29: return_trace (c->dispatch (u.paintformat29, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  47.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1778:5): [True: 47.4k, False: 1.65M]
  ------------------
 1779|  46.2k|    case 30: return_trace (c->dispatch (u.paintformat30, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  46.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  46.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1779:5): [True: 46.2k, False: 1.66M]
  ------------------
 1780|  5.14k|    case 31: return_trace (c->dispatch (u.paintformat31, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.14k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1780:5): [True: 5.14k, False: 1.70M]
  ------------------
 1781|   446k|    case 32: return_trace (c->dispatch (u.paintformat32, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   446k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   446k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1781:5): [True: 446k, False: 1.26M]
  ------------------
 1782|   553k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|   553k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   553k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1782:5): [True: 553k, False: 1.15M]
  ------------------
 1783|  1.70M|    }
 1784|  1.70M|  }
_ZN2OT18hb_paint_context_t8dispatchINS_15PaintColrLayersEEE10hb_empty_tRKT_:
   57|  32.8k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_10PaintSolidEEEEE10hb_empty_tRKT_:
   57|  20.2k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_10PaintSolidEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  20.2k|  {
  318|  20.2k|    value.paint_glyph (c, varIdxBase);
  319|  20.2k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_10PaintSolidEEEEE10hb_empty_tRKT_:
   57|  27.3k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_10PaintSolidEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  27.3k|  {
  264|  27.3k|    value.paint_glyph (c, varIdxBase);
  265|  27.3k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_19PaintLinearGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  23.2k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_19PaintLinearGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  23.2k|  {
  318|  23.2k|    value.paint_glyph (c, varIdxBase);
  319|  23.2k|  }
_ZNK2OT19PaintLinearGradientINS_10NoVariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  695|  23.2k|  {
  696|  23.2k|    hb_color_line_t cl = {
  697|  23.2k|      (void *) &(this+colorLine),
  698|  23.2k|      (this+colorLine).static_get_color_stops, c,
  699|  23.2k|      (this+colorLine).static_get_extend, nullptr
  700|  23.2k|    };
  701|       |
  702|  23.2k|    c->funcs->linear_gradient (c->data, &cl,
  703|  23.2k|			       x0 + c->instancer (varIdxBase, 0),
  704|  23.2k|			       y0 + c->instancer (varIdxBase, 1),
  705|  23.2k|			       x1 + c->instancer (varIdxBase, 2),
  706|  23.2k|			       y1 + c->instancer (varIdxBase, 3),
  707|  23.2k|			       x2 + c->instancer (varIdxBase, 4),
  708|  23.2k|			       y2 + c->instancer (varIdxBase, 5));
  709|  23.2k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_19PaintLinearGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  6.34k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_19PaintLinearGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  6.34k|  {
  264|  6.34k|    value.paint_glyph (c, varIdxBase);
  265|  6.34k|  }
_ZNK2OT19PaintLinearGradientINS_8VariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  695|  6.34k|  {
  696|  6.34k|    hb_color_line_t cl = {
  697|  6.34k|      (void *) &(this+colorLine),
  698|  6.34k|      (this+colorLine).static_get_color_stops, c,
  699|  6.34k|      (this+colorLine).static_get_extend, nullptr
  700|  6.34k|    };
  701|       |
  702|  6.34k|    c->funcs->linear_gradient (c->data, &cl,
  703|  6.34k|			       x0 + c->instancer (varIdxBase, 0),
  704|  6.34k|			       y0 + c->instancer (varIdxBase, 1),
  705|  6.34k|			       x1 + c->instancer (varIdxBase, 2),
  706|  6.34k|			       y1 + c->instancer (varIdxBase, 3),
  707|  6.34k|			       x2 + c->instancer (varIdxBase, 4),
  708|  6.34k|			       y2 + c->instancer (varIdxBase, 5));
  709|  6.34k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_19PaintRadialGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  13.1k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_19PaintRadialGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  13.1k|  {
  318|  13.1k|    value.paint_glyph (c, varIdxBase);
  319|  13.1k|  }
_ZNK2OT19PaintRadialGradientINS_10NoVariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  761|  13.1k|  {
  762|  13.1k|    hb_color_line_t cl = {
  763|  13.1k|      (void *) &(this+colorLine),
  764|  13.1k|      (this+colorLine).static_get_color_stops, c,
  765|  13.1k|      (this+colorLine).static_get_extend, nullptr
  766|  13.1k|    };
  767|       |
  768|  13.1k|    c->funcs->radial_gradient (c->data, &cl,
  769|  13.1k|			       x0 + c->instancer (varIdxBase, 0),
  770|  13.1k|			       y0 + c->instancer (varIdxBase, 1),
  771|  13.1k|			       radius0 + c->instancer (varIdxBase, 2),
  772|  13.1k|			       x1 + c->instancer (varIdxBase, 3),
  773|  13.1k|			       y1 + c->instancer (varIdxBase, 4),
  774|  13.1k|			       radius1 + c->instancer (varIdxBase, 5));
  775|  13.1k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_19PaintRadialGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  10.3k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_19PaintRadialGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  10.3k|  {
  264|  10.3k|    value.paint_glyph (c, varIdxBase);
  265|  10.3k|  }
_ZNK2OT19PaintRadialGradientINS_8VariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  761|  10.3k|  {
  762|  10.3k|    hb_color_line_t cl = {
  763|  10.3k|      (void *) &(this+colorLine),
  764|  10.3k|      (this+colorLine).static_get_color_stops, c,
  765|  10.3k|      (this+colorLine).static_get_extend, nullptr
  766|  10.3k|    };
  767|       |
  768|  10.3k|    c->funcs->radial_gradient (c->data, &cl,
  769|  10.3k|			       x0 + c->instancer (varIdxBase, 0),
  770|  10.3k|			       y0 + c->instancer (varIdxBase, 1),
  771|  10.3k|			       radius0 + c->instancer (varIdxBase, 2),
  772|  10.3k|			       x1 + c->instancer (varIdxBase, 3),
  773|  10.3k|			       y1 + c->instancer (varIdxBase, 4),
  774|  10.3k|			       radius1 + c->instancer (varIdxBase, 5));
  775|  10.3k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_18PaintSweepGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  16.0k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_18PaintSweepGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  16.0k|  {
  318|  16.0k|    value.paint_glyph (c, varIdxBase);
  319|  16.0k|  }
_ZNK2OT18PaintSweepGradientINS_10NoVariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  825|  16.0k|  {
  826|  16.0k|    hb_color_line_t cl = {
  827|  16.0k|      (void *) &(this+colorLine),
  828|  16.0k|      (this+colorLine).static_get_color_stops, c,
  829|  16.0k|      (this+colorLine).static_get_extend, nullptr
  830|  16.0k|    };
  831|       |
  832|  16.0k|    c->funcs->sweep_gradient (c->data, &cl,
  833|  16.0k|			      centerX + c->instancer (varIdxBase, 0),
  834|  16.0k|			      centerY + c->instancer (varIdxBase, 1),
  835|  16.0k|                              (startAngle.to_float (c->instancer (varIdxBase, 2)) + 1) * HB_PI,
  ------------------
  |  |  514|  16.0k|#define HB_PI 3.14159265358979f
  ------------------
  836|  16.0k|                              (endAngle.to_float   (c->instancer (varIdxBase, 3)) + 1) * HB_PI);
  ------------------
  |  |  514|  16.0k|#define HB_PI 3.14159265358979f
  ------------------
  837|  16.0k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_18PaintSweepGradientIS2_EEEEEE10hb_empty_tRKT_:
   57|  9.91k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_18PaintSweepGradientIS0_EEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  9.91k|  {
  264|  9.91k|    value.paint_glyph (c, varIdxBase);
  265|  9.91k|  }
_ZNK2OT18PaintSweepGradientINS_8VariableEE11paint_glyphEPNS_18hb_paint_context_tEj:
  825|  9.91k|  {
  826|  9.91k|    hb_color_line_t cl = {
  827|  9.91k|      (void *) &(this+colorLine),
  828|  9.91k|      (this+colorLine).static_get_color_stops, c,
  829|  9.91k|      (this+colorLine).static_get_extend, nullptr
  830|  9.91k|    };
  831|       |
  832|  9.91k|    c->funcs->sweep_gradient (c->data, &cl,
  833|  9.91k|			      centerX + c->instancer (varIdxBase, 0),
  834|  9.91k|			      centerY + c->instancer (varIdxBase, 1),
  835|  9.91k|                              (startAngle.to_float (c->instancer (varIdxBase, 2)) + 1) * HB_PI,
  ------------------
  |  |  514|  9.91k|#define HB_PI 3.14159265358979f
  ------------------
  836|  9.91k|                              (endAngle.to_float   (c->instancer (varIdxBase, 3)) + 1) * HB_PI);
  ------------------
  |  |  514|  9.91k|#define HB_PI 3.14159265358979f
  ------------------
  837|  9.91k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10PaintGlyphEEE10hb_empty_tRKT_:
   57|   105k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZN2OT18hb_paint_context_t8dispatchINS_14PaintColrGlyphEEE10hb_empty_tRKT_:
   57|   126k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZN2OT18hb_paint_context_t8dispatchINS_14PaintTransformINS_10NoVariableEEEEE10hb_empty_tRKT_:
   57|  17.1k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT14PaintTransformINS_10NoVariableEE11paint_glyphEPNS_18hb_paint_context_tE:
  948|  17.1k|  {
  949|  17.1k|    (this+transform).paint_glyph (c);
  950|  17.1k|    c->recurse (this+src);
  951|  17.1k|    c->funcs->pop_transform (c->data);
  952|  17.1k|  }
_ZNK2OT10NoVariableINS_9Affine2x3EE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  17.1k|  {
  318|  17.1k|    value.paint_glyph (c, varIdxBase);
  319|  17.1k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_14PaintTransformINS_8VariableEEEEE10hb_empty_tRKT_:
   57|  12.6k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT14PaintTransformINS_8VariableEE11paint_glyphEPNS_18hb_paint_context_tE:
  948|  12.6k|  {
  949|  12.6k|    (this+transform).paint_glyph (c);
  950|  12.6k|    c->recurse (this+src);
  951|  12.6k|    c->funcs->pop_transform (c->data);
  952|  12.6k|  }
_ZNK2OT8VariableINS_9Affine2x3EE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  12.6k|  {
  264|  12.6k|    value.paint_glyph (c, varIdxBase);
  265|  12.6k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_14PaintTranslateEEEEE10hb_empty_tRKT_:
   57|  76.3k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_14PaintTranslateEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  76.3k|  {
  318|  76.3k|    value.paint_glyph (c, varIdxBase);
  319|  76.3k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_14PaintTranslateEEEEE10hb_empty_tRKT_:
   57|  7.86k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_14PaintTranslateEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  7.86k|  {
  264|  7.86k|    value.paint_glyph (c, varIdxBase);
  265|  7.86k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_10PaintScaleEEEEE10hb_empty_tRKT_:
   57|  10.6k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_10PaintScaleEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  10.6k|  {
  318|  10.6k|    value.paint_glyph (c, varIdxBase);
  319|  10.6k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_10PaintScaleEEEEE10hb_empty_tRKT_:
   57|  5.85k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_10PaintScaleEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  5.85k|  {
  264|  5.85k|    value.paint_glyph (c, varIdxBase);
  265|  5.85k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_22PaintScaleAroundCenterEEEEE10hb_empty_tRKT_:
   57|  3.81k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_22PaintScaleAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  3.81k|  {
  318|  3.81k|    value.paint_glyph (c, varIdxBase);
  319|  3.81k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_22PaintScaleAroundCenterEEEEE10hb_empty_tRKT_:
   57|  9.83k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_22PaintScaleAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  9.83k|  {
  264|  9.83k|    value.paint_glyph (c, varIdxBase);
  265|  9.83k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_17PaintScaleUniformEEEEE10hb_empty_tRKT_:
   57|  5.06k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_17PaintScaleUniformEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  5.06k|  {
  318|  5.06k|    value.paint_glyph (c, varIdxBase);
  319|  5.06k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_17PaintScaleUniformEEEEE10hb_empty_tRKT_:
   57|  8.42k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_17PaintScaleUniformEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  8.42k|  {
  264|  8.42k|    value.paint_glyph (c, varIdxBase);
  265|  8.42k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_29PaintScaleUniformAroundCenterEEEEE10hb_empty_tRKT_:
   57|  10.4k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_29PaintScaleUniformAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  10.4k|  {
  318|  10.4k|    value.paint_glyph (c, varIdxBase);
  319|  10.4k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_29PaintScaleUniformAroundCenterEEEEE10hb_empty_tRKT_:
   57|  5.42k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_29PaintScaleUniformAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  5.42k|  {
  264|  5.42k|    value.paint_glyph (c, varIdxBase);
  265|  5.42k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_11PaintRotateEEEEE10hb_empty_tRKT_:
   57|  8.90k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_11PaintRotateEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  8.90k|  {
  318|  8.90k|    value.paint_glyph (c, varIdxBase);
  319|  8.90k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_11PaintRotateEEEEE10hb_empty_tRKT_:
   57|  6.07k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_11PaintRotateEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  6.07k|  {
  264|  6.07k|    value.paint_glyph (c, varIdxBase);
  265|  6.07k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_23PaintRotateAroundCenterEEEEE10hb_empty_tRKT_:
   57|  9.57k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_23PaintRotateAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  9.57k|  {
  318|  9.57k|    value.paint_glyph (c, varIdxBase);
  319|  9.57k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_23PaintRotateAroundCenterEEEEE10hb_empty_tRKT_:
   57|  10.2k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_23PaintRotateAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  10.2k|  {
  264|  10.2k|    value.paint_glyph (c, varIdxBase);
  265|  10.2k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_9PaintSkewEEEEE10hb_empty_tRKT_:
   57|  8.06k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_9PaintSkewEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  8.06k|  {
  318|  8.06k|    value.paint_glyph (c, varIdxBase);
  319|  8.06k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_9PaintSkewEEEEE10hb_empty_tRKT_:
   57|  47.4k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_9PaintSkewEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  47.4k|  {
  264|  47.4k|    value.paint_glyph (c, varIdxBase);
  265|  47.4k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_10NoVariableINS_21PaintSkewAroundCenterEEEEE10hb_empty_tRKT_:
   57|  46.2k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT10NoVariableINS_21PaintSkewAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  317|  46.2k|  {
  318|  46.2k|    value.paint_glyph (c, varIdxBase);
  319|  46.2k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_8VariableINS_21PaintSkewAroundCenterEEEEE10hb_empty_tRKT_:
   57|  5.14k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }
_ZNK2OT8VariableINS_21PaintSkewAroundCenterEE11paint_glyphEPNS_18hb_paint_context_tE:
  263|  5.14k|  {
  264|  5.14k|    value.paint_glyph (c, varIdxBase);
  265|  5.14k|  }
_ZN2OT18hb_paint_context_t8dispatchINS_14PaintCompositeEEE10hb_empty_tRKT_:
   57|   446k|  return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); }

_ZNK2OT4CPAL8has_dataEv:
  173|  33.3k|  bool has_data () const { return numPalettes; }
_ZNK2OT4CPAL17get_palette_countEv:
  178|  33.3k|  unsigned int get_palette_count () const { return numPalettes; }
_ZNK2OT4CPAL19get_palette_name_idEj:
  185|  33.3k|  { return v1 ().get_palette_name_id (this, palette_index, numPalettes); }
_ZNK2OT4CPAL2v1Ev:
  222|   100k|  {
  223|   100k|    if (version == 0) return Null (CPALV1Tail);
  ------------------
  |  |  124|  99.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (223:9): [True: 99.8k, False: 307]
  ------------------
  224|    307|    return StructAfter<CPALV1Tail> (*this);
  225|   100k|  }
_ZNK2OT4CPAL8get_sizeEv:
  176|    307|  { return min_size + numPalettes * sizeof (colorRecordIndicesZ[0]); }
_ZNK2OT10CPALV1Tail19get_palette_name_idEPKvjj:
   62|  33.3k|  {
   63|  33.3k|    if (!paletteLabelsZ) return HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (63:9): [True: 33.2k, False: 64]
  ------------------
   64|     64|    return (base+paletteLabelsZ).as_array (palette_count)[palette_index];
   65|  33.3k|  }
_ZNK2OT4CPAL17get_color_name_idEj:
  188|  33.3k|  { return v1 ().get_color_name_id (this, color_index, numColors); }
_ZNK2OT10CPALV1Tail17get_color_name_idEPKvjj:
   70|  33.3k|  {
   71|  33.3k|    if (!colorLabelsZ) return HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (71:9): [True: 33.2k, False: 61]
  ------------------
   72|     61|    return (base+colorLabelsZ).as_array (color_count)[color_index];
   73|  33.3k|  }
_ZNK2OT4CPAL17get_palette_flagsEj:
  182|  33.3k|  { return v1 ().get_palette_flags (this, palette_index, numPalettes); }
_ZNK2OT10CPALV1Tail17get_palette_flagsEPKvjj:
   53|  33.3k|  {
   54|  33.3k|    if (!paletteFlagsZ) return HB_OT_COLOR_PALETTE_FLAG_DEFAULT;
  ------------------
  |  Branch (54:9): [True: 33.2k, False: 62]
  ------------------
   55|     62|    return (hb_ot_color_palette_flags_t) (uint32_t)
   56|     62|	   (base+paletteFlagsZ).as_array (palette_count)[palette_index];
   57|  33.3k|  }
_ZNK2OT4CPAL18get_palette_colorsEjjPjS1_:
  194|  80.9k|  {
  195|  80.9k|    if (unlikely (palette_index >= numPalettes))
  ------------------
  |  |  259|  80.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 75.6k, False: 5.30k]
  |  |  ------------------
  ------------------
  196|  75.6k|    {
  197|  75.6k|      if (color_count) *color_count = 0;
  ------------------
  |  Branch (197:11): [True: 42.3k, False: 33.3k]
  ------------------
  198|  75.6k|      return 0;
  199|  75.6k|    }
  200|  5.30k|    unsigned int start_index = colorRecordIndicesZ[palette_index];
  201|  5.30k|    hb_array_t<const BGRAColor> all_colors ((this+colorRecordsZ).arrayZ, numColorRecords);
  202|  5.30k|    hb_array_t<const BGRAColor> palette_colors = all_colors.sub_array (start_index,
  203|  5.30k|								       numColors);
  204|  5.30k|    if (color_count)
  ------------------
  |  Branch (204:9): [True: 5.28k, False: 16]
  ------------------
  205|  5.28k|    {
  206|  5.28k|      + palette_colors.sub_array (start_offset, color_count)
  207|  5.28k|      | hb_sink (hb_array (colors, *color_count))
  208|  5.28k|      ;
  209|  5.28k|    }
  210|  5.30k|    return numColors;
  211|  80.9k|  }
_ZNK2OT4CPAL8sanitizeEP21hb_sanitize_context_t:
  321|    284|  {
  322|    284|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    284|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  323|    284|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 282, False: 2]
  |  |  |  Branch (349:45): [True: 261, False: 21]
  |  |  |  Branch (349:45): [True: 259, False: 2]
  |  |  |  Branch (349:45): [True: 165, False: 94]
  |  |  |  Branch (349:45): [True: 71, False: 23]
  |  |  ------------------
  ------------------
  324|    284|		  (this+colorRecordsZ).sanitize (c, numColorRecords) &&
  325|    284|		  colorRecordIndicesZ.sanitize (c, numPalettes) &&
  326|    284|		  (version == 0 || v1 ().sanitize (c, this, numPalettes, numColors)));
  327|    284|  }
_ZNK2OT10CPALV1Tail8sanitizeEP21hb_sanitize_context_tPKvjj:
  140|     94|  {
  141|     94|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     94|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  142|     94|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     94|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11, False: 80]
  |  |  |  Branch (349:45): [True: 77, False: 3]
  |  |  |  Branch (349:45): [True: 91, False: 3]
  |  |  |  Branch (349:45): [True: 8, False: 80]
  |  |  |  Branch (349:45): [True: 78, False: 2]
  |  |  |  Branch (349:45): [True: 10, False: 76]
  |  |  |  Branch (349:45): [True: 61, False: 15]
  |  |  ------------------
  ------------------
  143|     94|		  (!paletteFlagsZ  || (base+paletteFlagsZ).sanitize (c, palette_count)) &&
  144|     94|		  (!paletteLabelsZ || (base+paletteLabelsZ).sanitize (c, palette_count)) &&
  145|     94|		  (!colorLabelsZ   || (base+colorLabelsZ).sanitize (c, color_count)));
  146|     94|  }

_ZNK2OT4sbix13accelerator_t8has_dataEv:
  210|   816k|    bool has_data () const { return table->has_data (); }
_ZNK2OT4sbix8has_dataEv:
  197|   816k|  bool has_data () const { return version; }
_ZNK2OT4sbix13accelerator_t13reference_pngEP9hb_font_tjPiS4_Pj:
  226|    694|    {
  227|    694|      return choose_strike (font).get_glyph_blob (glyph_id, table.get_blob (),
  228|    694|						  HB_TAG ('p','n','g',' '),
  ------------------
  |  |  179|    694|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  229|    694|						  x_offset, y_offset,
  230|    694|						  num_glyphs, available_ppem);
  231|    694|    }
_ZNK2OT4sbix13accelerator_t13choose_strikeEP9hb_font_t:
  267|    694|    {
  268|    694|      unsigned count = table->strikes.len;
  269|    694|      if (unlikely (!count))
  ------------------
  |  |  259|    694|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 43, False: 651]
  |  |  ------------------
  ------------------
  270|     43|	return Null (SBIXStrike);
  ------------------
  |  |  124|     43|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  271|       |
  272|    651|      unsigned int requested_ppem = hb_max (font->x_ppem, font->y_ppem);
  273|    651|      if (!requested_ppem)
  ------------------
  |  Branch (273:11): [True: 651, False: 0]
  ------------------
  274|    651|	requested_ppem = 1<<30; /* Choose largest strike. */
  275|       |      /* TODO Add DPI sensitivity as well? */
  276|    651|      unsigned int best_i = 0;
  277|    651|      unsigned int best_ppem = table->get_strike (0).ppem;
  278|       |
  279|  7.94k|      for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (279:32): [True: 7.28k, False: 651]
  ------------------
  280|  7.28k|      {
  281|  7.28k|	unsigned int ppem = (table->get_strike (i)).ppem;
  282|  7.28k|	if ((requested_ppem <= ppem && ppem < best_ppem) ||
  ------------------
  |  Branch (282:7): [True: 0, False: 7.28k]
  |  Branch (282:33): [True: 0, False: 0]
  ------------------
  283|  7.28k|	    (requested_ppem > best_ppem && ppem > best_ppem))
  ------------------
  |  Branch (283:7): [True: 7.28k, False: 0]
  |  Branch (283:37): [True: 236, False: 7.05k]
  ------------------
  284|    236|	{
  285|    236|	  best_i = i;
  286|    236|	  best_ppem = ppem;
  287|    236|	}
  288|  7.28k|      }
  289|       |
  290|    651|      return table->get_strike (best_i);
  291|    694|    }
_ZNK2OT4sbix10get_strikeEj:
  199|  8.59k|  const SBIXStrike &get_strike (unsigned int i) const { return this+strikes[i]; }
_ZNK2OT10SBIXStrike14get_glyph_blobEjP9hb_blob_tjPiS3_jPj:
   99|    694|  {
  100|    694|    if (unlikely (!ppem)) return hb_blob_get_empty (); /* To get Null() object out of the way. */
  ------------------
  |  |  259|    694|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 173, False: 521]
  |  |  ------------------
  ------------------
  101|       |
  102|    521|    unsigned int retry_count = 8;
  103|    521|    unsigned int sbix_len = sbix_blob->length;
  104|    521|    unsigned int strike_offset = (const char *) this - (const char *) sbix_blob->data;
  105|    521|    assert (strike_offset < sbix_len);
  106|       |
  107|    620|  retry:
  108|    620|    if (unlikely (glyph_id >= num_glyphs ||
  ------------------
  |  |  259|  2.98k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 374, False: 246]
  |  |  |  Branch (259:47): [True: 178, False: 442]
  |  |  |  Branch (259:47): [True: 82, False: 360]
  |  |  |  Branch (259:47): [True: 36, False: 324]
  |  |  |  Branch (259:47): [True: 78, False: 246]
  |  |  ------------------
  ------------------
  109|    620|		  imageOffsetsZ[glyph_id + 1] <= imageOffsetsZ[glyph_id] ||
  110|    620|		  imageOffsetsZ[glyph_id + 1] - imageOffsetsZ[glyph_id] <= SBIXGlyph::min_size ||
  111|    620|		  (unsigned int) imageOffsetsZ[glyph_id + 1] > sbix_len - strike_offset))
  112|    374|      return hb_blob_get_empty ();
  113|       |
  114|    246|    unsigned int glyph_offset = strike_offset + (unsigned int) imageOffsetsZ[glyph_id] + SBIXGlyph::min_size;
  115|    246|    unsigned int glyph_length = imageOffsetsZ[glyph_id + 1] - imageOffsetsZ[glyph_id] - SBIXGlyph::min_size;
  116|       |
  117|    246|    const SBIXGlyph *glyph = &(this+imageOffsetsZ[glyph_id]);
  118|       |
  119|    246|    if (glyph->graphicType == HB_TAG ('d','u','p','e'))
  ------------------
  |  |  179|    246|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (119:9): [True: 120, False: 126]
  ------------------
  120|    120|    {
  121|    120|      if (glyph_length >= 2)
  ------------------
  |  Branch (121:11): [True: 110, False: 10]
  ------------------
  122|    110|      {
  123|    110|	glyph_id = *((HBUINT16 *) &glyph->data);
  124|    110|	if (retry_count--)
  ------------------
  |  Branch (124:6): [True: 99, False: 11]
  ------------------
  125|     99|	  goto retry;
  126|    110|      }
  127|     21|      return hb_blob_get_empty ();
  128|    120|    }
  129|       |
  130|    126|    if (unlikely (file_type != glyph->graphicType))
  ------------------
  |  |  259|    126|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 82]
  |  |  ------------------
  ------------------
  131|     44|      return hb_blob_get_empty ();
  132|       |
  133|     82|    if (strike_ppem) *strike_ppem = ppem;
  ------------------
  |  Branch (133:9): [True: 70, False: 12]
  ------------------
  134|     82|    if (x_offset) *x_offset = glyph->xOffset;
  ------------------
  |  Branch (134:9): [True: 70, False: 12]
  ------------------
  135|     82|    if (y_offset) *y_offset = glyph->yOffset;
  ------------------
  |  Branch (135:9): [True: 70, False: 12]
  ------------------
  136|     82|    return hb_blob_create_sub_blob (sbix_blob, glyph_offset, glyph_length);
  137|    126|  }
_ZN2OT18sbix_accelerator_tC2EP9hb_face_t:
  441|  32.8k|  sbix_accelerator_t (hb_face_t *face) : sbix::accelerator_t (face) {}
_ZN2OT4sbix13accelerator_tC2EP9hb_face_t:
  204|  32.8k|    {
  205|  32.8k|      table = hb_sanitize_context_t ().reference_table<sbix> (face);
  206|  32.8k|      num_glyphs = face->get_num_glyphs ();
  207|  32.8k|    }
_ZNK2OT4sbix8sanitizeEP21hb_sanitize_context_t:
  368|    382|  {
  369|    382|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    382|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  370|    382|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  1.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    382|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 380, False: 2]
  |  |  |  Branch (349:45): [True: 378, False: 2]
  |  |  |  Branch (349:45): [True: 264, False: 114]
  |  |  ------------------
  ------------------
  371|    382|			  version >= 1 &&
  372|    382|			  strikes.sanitize (c, this)));
  373|    382|  }
_ZNK2OT10SBIXStrike8sanitizeEP21hb_sanitize_context_t:
   86|  2.68k|  {
   87|  2.68k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.68k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   88|  2.68k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  3.72k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.68k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.04k, False: 1.64k]
  |  |  |  Branch (349:45): [True: 1.01k, False: 23]
  |  |  ------------------
  ------------------
   89|  2.68k|		  imageOffsetsZ.sanitize_shallow (c, c->get_num_glyphs () + 1));
   90|  2.68k|  }
_ZN2OT4sbix13accelerator_tD2Ev:
  208|  32.8k|    ~accelerator_t () { table.destroy (); }
_ZNK2OT4sbix13accelerator_t11get_extentsEP9hb_font_tjP18hb_glyph_extents_tb:
  216|   749k|    {
  217|       |      /* We only support PNG right now, and following function checks type. */
  218|   749k|      return get_png_extents (font, glyph, extents, scale);
  219|   749k|    }
_ZNK2OT4sbix13accelerator_t15get_png_extentsEP9hb_font_tjP18hb_glyph_extents_tb:
  320|   749k|    {
  321|       |      /* Following code is safe to call even without data.
  322|       |       * But faster to short-circuit. */
  323|   749k|      if (!has_data ())
  ------------------
  |  Branch (323:11): [True: 749k, False: 516]
  ------------------
  324|   749k|	return false;
  325|       |
  326|    516|      int x_offset = 0, y_offset = 0;
  327|    516|      unsigned int strike_ppem = 0;
  328|    516|      hb_blob_t *blob = reference_png (font, glyph, &x_offset, &y_offset, &strike_ppem);
  329|       |
  330|    516|      const PNGHeader &png = *blob->as<PNGHeader>();
  331|       |
  332|    516|      if (png.IHDR.height >= 65536 || png.IHDR.width >= 65536)
  ------------------
  |  Branch (332:11): [True: 20, False: 496]
  |  Branch (332:39): [True: 20, False: 476]
  ------------------
  333|     40|      {
  334|     40|	hb_blob_destroy (blob);
  335|     40|	return false;
  336|     40|      }
  337|       |
  338|    476|      extents->x_bearing = x_offset;
  339|    476|      extents->y_bearing = png.IHDR.height + y_offset;
  340|    476|      extents->width     = png.IHDR.width;
  341|    476|      extents->height    = -1 * png.IHDR.height;
  342|       |
  343|       |      /* Convert to font units. */
  344|    476|      if (strike_ppem && scale)
  ------------------
  |  Branch (344:11): [True: 30, False: 446]
  |  Branch (344:26): [True: 30, False: 0]
  ------------------
  345|     30|      {
  346|     30|	float scale = font->face->get_upem () / (float) strike_ppem;
  347|     30|	extents->x_bearing = roundf (extents->x_bearing * scale);
  ------------------
  |  |  207|     30|#define roundf(x) _hb_roundf(x)
  ------------------
  348|     30|	extents->y_bearing = roundf (extents->y_bearing * scale);
  ------------------
  |  |  207|     30|#define roundf(x) _hb_roundf(x)
  ------------------
  349|     30|	extents->width = roundf (extents->width * scale);
  ------------------
  |  |  207|     30|#define roundf(x) _hb_roundf(x)
  ------------------
  350|     30|	extents->height = roundf (extents->height * scale);
  ------------------
  |  |  207|     30|#define roundf(x) _hb_roundf(x)
  ------------------
  351|     30|      }
  352|       |
  353|    476|      if (scale)
  ------------------
  |  Branch (353:11): [True: 476, False: 0]
  ------------------
  354|    476|	font->scale_glyph_extents (extents);
  355|       |
  356|    476|      hb_blob_destroy (blob);
  357|       |
  358|    476|      return strike_ppem;
  359|    516|    }

_ZNK2OT3SVG13accelerator_t8has_dataEv:
   94|  33.3k|    bool has_data () const { return table->has_data (); }
_ZNK2OT3SVG8has_dataEv:
   80|  33.3k|  bool has_data () const { return svgDocEntries; }
_ZNK2OT3SVG13accelerator_t24reference_blob_for_glyphEj:
   89|  33.3k|    {
   90|  33.3k|      return table->get_glyph_entry (glyph_id).reference_blob (table.get_blob (),
   91|  33.3k|							       table->svgDocEntries);
   92|  33.3k|    }
_ZNK2OT3SVG15get_glyph_entryEj:
  124|  33.3k|  { return (this+svgDocEntries).bsearch (glyph_id); }
_ZNK2OT21SVGDocumentIndexEntry3cmpEj:
   46|    115|  { return g < startGlyphID ? -1 : g > endGlyphID ? 1 : 0; }
  ------------------
  |  Branch (46:12): [True: 23, False: 92]
  |  Branch (46:36): [True: 91, False: 1]
  ------------------
_ZNK2OT21SVGDocumentIndexEntry14reference_blobEP9hb_blob_tj:
   49|  33.3k|  {
   50|  33.3k|    return hb_blob_create_sub_blob (svg_blob,
   51|  33.3k|				    index_offset + (unsigned int) svgDoc,
   52|  33.3k|				    svgDocLength);
   53|  33.3k|  }
_ZN2OT17SVG_accelerator_tC2EP9hb_face_t:
  145|  32.5k|  SVG_accelerator_t (hb_face_t *face) : SVG::accelerator_t (face) {}
_ZN2OT3SVG13accelerator_tC2EP9hb_face_t:
   85|  32.5k|    { table = hb_sanitize_context_t ().reference_table<SVG> (face); }
_ZNK2OT3SVG8sanitizeEP21hb_sanitize_context_t:
  127|     50|  {
  128|     50|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     50|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  129|     50|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|     98|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     50|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 48, False: 2]
  |  |  |  Branch (349:45): [True: 34, False: 14]
  |  |  ------------------
  ------------------
  130|     50|			  (this+svgDocEntries).sanitize_shallow (c)));
  131|     50|  }
_ZN2OT3SVG13accelerator_tD2Ev:
   86|  32.5k|    ~accelerator_t () { table.destroy (); }

_ZNK2OT6Layout6Common8Coverage8sanitizeEP21hb_sanitize_context_t:
   61|   651k|  {
   62|   651k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   651k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   63|   651k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  10.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (63:9): [True: 10.5k, False: 640k]
  ------------------
   64|   640k|    switch (u.format)
   65|   640k|    {
   66|  31.4k|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|  31.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (66:5): [True: 31.4k, False: 609k]
  ------------------
   67|  85.5k|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|  85.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (67:5): [True: 85.5k, False: 555k]
  ------------------
   68|      0|#ifndef HB_NO_BEYOND_64K
   69|  19.7k|    case 3: return_trace (u.format3.sanitize (c));
  ------------------
  |  |  349|  19.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (69:5): [True: 19.7k, False: 621k]
  ------------------
   70|  20.3k|    case 4: return_trace (u.format4.sanitize (c));
  ------------------
  |  |  349|  20.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (70:5): [True: 20.3k, False: 620k]
  ------------------
   71|      0|#endif
   72|   483k|    default:return_trace (true);
  ------------------
  |  |  349|   483k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   483k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (72:5): [True: 483k, False: 157k]
  ------------------
   73|   640k|    }
   74|   640k|  }
_ZNK2OT6Layout6Common8Coverage12get_coverageEj:
   84|  26.7M|  {
   85|  26.7M|    switch (u.format) {
   86|  3.19M|    case 1: return u.format1.get_coverage (glyph_id);
  ------------------
  |  Branch (86:5): [True: 3.19M, False: 23.5M]
  ------------------
   87|  18.5M|    case 2: return u.format2.get_coverage (glyph_id);
  ------------------
  |  Branch (87:5): [True: 18.5M, False: 8.17M]
  ------------------
   88|      0|#ifndef HB_NO_BEYOND_64K
   89|   379k|    case 3: return u.format3.get_coverage (glyph_id);
  ------------------
  |  Branch (89:5): [True: 379k, False: 26.3M]
  ------------------
   90|  1.69M|    case 4: return u.format4.get_coverage (glyph_id);
  ------------------
  |  Branch (90:5): [True: 1.69M, False: 25.0M]
  ------------------
   91|      0|#endif
   92|  2.90M|    default:return NOT_COVERED;
  ------------------
  |  |   37|  2.90M|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (92:5): [True: 2.90M, False: 23.8M]
  ------------------
   93|  26.7M|    }
   94|  26.7M|  }
_ZNK2OT6Layout6Common8Coverage14get_populationEv:
   97|  7.65k|  {
   98|  7.65k|    switch (u.format) {
   99|  3.78k|    case 1: return u.format1.get_population ();
  ------------------
  |  Branch (99:5): [True: 3.78k, False: 3.87k]
  ------------------
  100|  1.78k|    case 2: return u.format2.get_population ();
  ------------------
  |  Branch (100:5): [True: 1.78k, False: 5.87k]
  ------------------
  101|      0|#ifndef HB_NO_BEYOND_64K
  102|    779|    case 3: return u.format3.get_population ();
  ------------------
  |  Branch (102:5): [True: 779, False: 6.87k]
  ------------------
  103|  1.22k|    case 4: return u.format4.get_population ();
  ------------------
  |  Branch (103:5): [True: 1.22k, False: 6.43k]
  ------------------
  104|      0|#endif
  105|     87|    default:return NOT_COVERED;
  ------------------
  |  |   37|     87|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (105:5): [True: 87, False: 7.56k]
  ------------------
  106|  7.65k|    }
  107|  7.65k|  }
_ZNK2OT6Layout6Common8Coverage16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES4_IS5_ImLj0EES5_ImLj9EEEEEEbPT_:
  204|  60.2k|  {
  205|  60.2k|    switch (u.format)
  206|  60.2k|    {
  207|  6.04k|    case 1: return u.format1.collect_coverage (glyphs);
  ------------------
  |  Branch (207:5): [True: 6.04k, False: 54.2k]
  ------------------
  208|  20.5k|    case 2: return u.format2.collect_coverage (glyphs);
  ------------------
  |  Branch (208:5): [True: 20.5k, False: 39.6k]
  ------------------
  209|      0|#ifndef HB_NO_BEYOND_64K
  210|  2.28k|    case 3: return u.format3.collect_coverage (glyphs);
  ------------------
  |  Branch (210:5): [True: 2.28k, False: 57.9k]
  ------------------
  211|  3.92k|    case 4: return u.format4.collect_coverage (glyphs);
  ------------------
  |  Branch (211:5): [True: 3.92k, False: 56.3k]
  ------------------
  212|      0|#endif
  213|  27.4k|    default:return false;
  ------------------
  |  Branch (213:5): [True: 27.4k, False: 32.8k]
  ------------------
  214|  60.2k|    }
  215|  60.2k|  }
_ZN2OT6Layout6Common8Coverage9serializeI17hb_sorted_array_tIKNS_11HBGlyphID16EELPv0EEEbP22hb_serialize_context_tT_:
  112|    767|  {
  113|    767|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    767|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  114|    767|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    767|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 750]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  115|       |
  116|    750|    unsigned count = hb_len (glyphs);
  117|    750|    unsigned num_ranges = 0;
  118|    750|    hb_codepoint_t last = (hb_codepoint_t) -2;
  119|    750|    hb_codepoint_t max = 0;
  120|    750|    bool unsorted = false;
  121|    750|    for (auto g: glyphs)
  ------------------
  |  Branch (121:16): [True: 4.78k, False: 750]
  ------------------
  122|  4.78k|    {
  123|  4.78k|      if (last != (hb_codepoint_t) -2 && g < last)
  ------------------
  |  Branch (123:11): [True: 4.03k, False: 750]
  |  Branch (123:42): [True: 0, False: 4.03k]
  ------------------
  124|      0|	unsorted = true;
  125|  4.78k|      if (last + 1 != g)
  ------------------
  |  Branch (125:11): [True: 4.11k, False: 670]
  ------------------
  126|  4.11k|	num_ranges++;
  127|  4.78k|      last = g;
  128|  4.78k|      if (g > max) max = g;
  ------------------
  |  Branch (128:11): [True: 3.12k, False: 1.65k]
  ------------------
  129|  4.78k|    }
  130|    750|    u.format = !unsorted && count <= num_ranges * 3 ? 1 : 2;
  ------------------
  |  Branch (130:16): [True: 750, False: 0]
  |  Branch (130:29): [True: 747, False: 3]
  ------------------
  131|       |
  132|    750|#ifndef HB_NO_BEYOND_64K
  133|    750|    if (max > 0xFFFFu)
  ------------------
  |  Branch (133:9): [True: 0, False: 750]
  ------------------
  134|      0|      u.format += 2;
  135|    750|    if (unlikely (max > 0xFFFFFFu))
  ------------------
  |  |  259|    750|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 750]
  |  |  ------------------
  ------------------
  136|       |#else
  137|       |    if (unlikely (max > 0xFFFFu))
  138|       |#endif
  139|      0|    {
  140|      0|      c->check_success (false, HB_SERIALIZE_ERROR_INT_OVERFLOW);
  141|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  142|      0|    }
  143|       |
  144|    750|    switch (u.format)
  145|    750|    {
  146|    747|    case 1: return_trace (u.format1.serialize (c, glyphs));
  ------------------
  |  |  349|    747|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    747|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (146:5): [True: 747, False: 3]
  ------------------
  147|      3|    case 2: return_trace (u.format2.serialize (c, glyphs));
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (147:5): [True: 3, False: 747]
  ------------------
  148|      0|#ifndef HB_NO_BEYOND_64K
  149|      0|    case 3: return_trace (u.format3.serialize (c, glyphs));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (149:5): [True: 0, False: 750]
  ------------------
  150|      0|    case 4: return_trace (u.format4.serialize (c, glyphs));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (150:5): [True: 0, False: 750]
  ------------------
  151|      0|#endif
  152|      0|    default:return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (152:5): [True: 0, False: 750]
  ------------------
  153|    750|    }
  154|    750|  }
hb-ot-shaper-arabic.cc:_ZN2OT6Layout6Common8Coverage9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS7_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSG_0EEEbP22hb_serialize_context_tT_:
  112|    787|  {
  113|    787|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    787|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  114|    787|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    787|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 787]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  115|       |
  116|    787|    unsigned count = hb_len (glyphs);
  117|    787|    unsigned num_ranges = 0;
  118|    787|    hb_codepoint_t last = (hb_codepoint_t) -2;
  119|    787|    hb_codepoint_t max = 0;
  120|    787|    bool unsorted = false;
  121|    787|    for (auto g: glyphs)
  ------------------
  |  Branch (121:16): [True: 26.7k, False: 787]
  ------------------
  122|  26.7k|    {
  123|  26.7k|      if (last != (hb_codepoint_t) -2 && g < last)
  ------------------
  |  Branch (123:11): [True: 25.9k, False: 787]
  |  Branch (123:42): [True: 0, False: 25.9k]
  ------------------
  124|      0|	unsorted = true;
  125|  26.7k|      if (last + 1 != g)
  ------------------
  |  Branch (125:11): [True: 13.1k, False: 13.5k]
  ------------------
  126|  13.1k|	num_ranges++;
  127|  26.7k|      last = g;
  128|  26.7k|      if (g > max) max = g;
  ------------------
  |  Branch (128:11): [True: 23.1k, False: 3.63k]
  ------------------
  129|  26.7k|    }
  130|    787|    u.format = !unsorted && count <= num_ranges * 3 ? 1 : 2;
  ------------------
  |  Branch (130:16): [True: 787, False: 0]
  |  Branch (130:29): [True: 537, False: 250]
  ------------------
  131|       |
  132|    787|#ifndef HB_NO_BEYOND_64K
  133|    787|    if (max > 0xFFFFu)
  ------------------
  |  Branch (133:9): [True: 0, False: 787]
  ------------------
  134|      0|      u.format += 2;
  135|    787|    if (unlikely (max > 0xFFFFFFu))
  ------------------
  |  |  259|    787|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 787]
  |  |  ------------------
  ------------------
  136|       |#else
  137|       |    if (unlikely (max > 0xFFFFu))
  138|       |#endif
  139|      0|    {
  140|      0|      c->check_success (false, HB_SERIALIZE_ERROR_INT_OVERFLOW);
  141|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  142|      0|    }
  143|       |
  144|    787|    switch (u.format)
  145|    787|    {
  146|    537|    case 1: return_trace (u.format1.serialize (c, glyphs));
  ------------------
  |  |  349|    537|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (146:5): [True: 537, False: 250]
  ------------------
  147|    250|    case 2: return_trace (u.format2.serialize (c, glyphs));
  ------------------
  |  |  349|    250|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    250|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (147:5): [True: 250, False: 537]
  ------------------
  148|      0|#ifndef HB_NO_BEYOND_64K
  149|      0|    case 3: return_trace (u.format3.serialize (c, glyphs));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (149:5): [True: 0, False: 787]
  ------------------
  150|      0|    case 4: return_trace (u.format4.serialize (c, glyphs));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (150:5): [True: 0, False: 787]
  ------------------
  151|      0|#endif
  152|      0|    default:return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (152:5): [True: 0, False: 787]
  ------------------
  153|    787|    }
  154|    787|  }

_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   53|  31.4k|  {
   54|  31.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   55|  31.4k|    return_trace (glyphArray.sanitize (c));
  ------------------
  |  |  349|  31.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   56|  31.4k|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   53|  19.7k|  {
   54|  19.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  19.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   55|  19.7k|    return_trace (glyphArray.sanitize (c));
  ------------------
  |  |  349|  19.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   56|  19.7k|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE12get_coverageEj:
   59|  3.19M|  {
   60|  3.19M|    unsigned int i;
   61|  3.19M|    glyphArray.bfind (glyph_id, &i, HB_NOT_FOUND_STORE, NOT_COVERED);
  ------------------
  |  |   37|  3.19M|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
   62|  3.19M|    return i;
   63|  3.19M|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_11MediumTypesEE12get_coverageEj:
   59|   379k|  {
   60|   379k|    unsigned int i;
   61|   379k|    glyphArray.bfind (glyph_id, &i, HB_NOT_FOUND_STORE, NOT_COVERED);
  ------------------
  |  |   37|   379k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
   62|   379k|    return i;
   63|   379k|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE14get_populationEv:
   66|  3.78k|  {
   67|  3.78k|    return glyphArray.len;
   68|  3.78k|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_11MediumTypesEE14get_populationEv:
   66|    779|  {
   67|    779|    return glyphArray.len;
   68|    779|  }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
  108|  6.04k|  { return glyphs->add_sorted_array (glyphArray.as_array ()); }
_ZNK2OT6Layout6Common17CoverageFormat1_3INS0_11MediumTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
  108|  2.28k|  { return glyphs->add_sorted_array (glyphArray.as_array ()); }
_ZN2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE9serializeI17hb_sorted_array_tIKNS_11HBGlyphID16EELPv0EEEbP22hb_serialize_context_tT_:
   73|    747|  {
   74|    747|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    747|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   75|    747|    return_trace (glyphArray.serialize (c, glyphs));
  ------------------
  |  |  349|    747|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    747|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   76|    747|  }
hb-ot-shaper-arabic.cc:_ZN2OT6Layout6Common17CoverageFormat1_3INS0_10SmallTypesEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS9_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSI_0EEEbP22hb_serialize_context_tT_:
   73|    537|  {
   74|    537|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    537|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   75|    537|    return_trace (glyphArray.serialize (c, glyphs));
  ------------------
  |  |  349|    537|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   76|    537|  }

_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   55|  85.5k|  {
   56|  85.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   57|  85.5k|    return_trace (rangeRecord.sanitize (c));
  ------------------
  |  |  349|  85.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   58|  85.5k|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   55|  20.3k|  {
   56|  20.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   57|  20.3k|    return_trace (rangeRecord.sanitize (c));
  ------------------
  |  |  349|  20.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   58|  20.3k|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE12get_coverageEj:
   61|  18.5M|  {
   62|  18.5M|    const RangeRecord<Types> &range = rangeRecord.bsearch (glyph_id);
   63|  18.5M|    return likely (range.first <= range.last)
  ------------------
  |  |  258|  18.5M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 12.5M, False: 5.99M]
  |  |  ------------------
  ------------------
   64|  18.5M|         ? (unsigned int) range.value + (glyph_id - range.first)
   65|  18.5M|         : NOT_COVERED;
  ------------------
  |  |   37|  5.99M|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
   66|  18.5M|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_11MediumTypesEE12get_coverageEj:
   61|  1.69M|  {
   62|  1.69M|    const RangeRecord<Types> &range = rangeRecord.bsearch (glyph_id);
   63|  1.69M|    return likely (range.first <= range.last)
  ------------------
  |  |  258|  1.69M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.46M, False: 226k]
  |  |  ------------------
  ------------------
   64|  1.69M|         ? (unsigned int) range.value + (glyph_id - range.first)
   65|  1.69M|         : NOT_COVERED;
  ------------------
  |  |   37|   226k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
   66|  1.69M|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE14get_populationEv:
   69|  1.78k|  {
   70|  1.78k|    typename Types::large_int ret = 0;
   71|  1.78k|    for (const auto &r : rangeRecord)
  ------------------
  |  Branch (71:24): [True: 5.85k, False: 1.78k]
  ------------------
   72|  5.85k|      ret += r.get_population ();
   73|  1.78k|    return ret > UINT_MAX ? UINT_MAX : (unsigned) ret;
  ------------------
  |  Branch (73:12): [True: 0, False: 1.78k]
  ------------------
   74|  1.78k|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_11MediumTypesEE14get_populationEv:
   69|  1.22k|  {
   70|  1.22k|    typename Types::large_int ret = 0;
   71|  1.22k|    for (const auto &r : rangeRecord)
  ------------------
  |  Branch (71:24): [True: 44.5k, False: 1.22k]
  ------------------
   72|  44.5k|      ret += r.get_population ();
   73|  1.22k|    return ret > UINT_MAX ? UINT_MAX : (unsigned) ret;
  ------------------
  |  Branch (73:12): [True: 13, False: 1.21k]
  ------------------
   74|  1.22k|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
  162|  20.5k|  {
  163|  20.5k|    for (const auto& range: rangeRecord)
  ------------------
  |  Branch (163:27): [True: 165k, False: 20.5k]
  ------------------
  164|   165k|      if (unlikely (!range.collect_coverage (glyphs)))
  ------------------
  |  |  259|   165k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 165k]
  |  |  ------------------
  ------------------
  165|      0|        return false;
  166|  20.5k|    return true;
  167|  20.5k|  }
_ZNK2OT6Layout6Common17CoverageFormat2_4INS0_11MediumTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
  162|  3.92k|  {
  163|  3.92k|    for (const auto& range: rangeRecord)
  ------------------
  |  Branch (163:27): [True: 26.5k, False: 3.92k]
  ------------------
  164|  26.5k|      if (unlikely (!range.collect_coverage (glyphs)))
  ------------------
  |  |  259|  26.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 26.5k]
  |  |  ------------------
  ------------------
  165|      0|        return false;
  166|  3.92k|    return true;
  167|  3.92k|  }
_ZN2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE9serializeI17hb_sorted_array_tIKNS_11HBGlyphID16EELPv0EEEbP22hb_serialize_context_tT_:
   79|      3|  {
   80|      3|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|      3|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   81|      3|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|      3|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   82|       |
   83|      3|    unsigned num_ranges = 0;
   84|      3|    hb_codepoint_t last = (hb_codepoint_t) -2;
   85|      3|    for (auto g: glyphs)
  ------------------
  |  Branch (85:16): [True: 16, False: 3]
  ------------------
   86|     16|    {
   87|     16|      if (last + 1 != g)
  ------------------
  |  Branch (87:11): [True: 4, False: 12]
  ------------------
   88|      4|        num_ranges++;
   89|     16|      last = g;
   90|     16|    }
   91|       |
   92|      3|    if (unlikely (!rangeRecord.serialize (c, num_ranges))) return_trace (false);
  ------------------
  |  |  259|      3|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3]
  |  |  ------------------
  ------------------
                  if (unlikely (!rangeRecord.serialize (c, num_ranges))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   93|      3|    if (!num_ranges) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (93:9): [True: 0, False: 3]
  ------------------
   94|       |
   95|      3|    unsigned count = 0;
   96|      3|    unsigned range = (unsigned) -1;
   97|      3|    last = (hb_codepoint_t) -2;
   98|      3|    unsigned unsorted = false;
   99|      3|    for (auto g: glyphs)
  ------------------
  |  Branch (99:16): [True: 16, False: 3]
  ------------------
  100|     16|    {
  101|     16|      if (last + 1 != g)
  ------------------
  |  Branch (101:11): [True: 4, False: 12]
  ------------------
  102|      4|      {
  103|      4|	if (unlikely (last != (hb_codepoint_t) -2 && last + 1 > g))
  ------------------
  |  |  259|      5|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4]
  |  |  |  Branch (259:47): [True: 1, False: 3]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  104|      0|	  unsorted = true;
  105|       |
  106|      4|        range++;
  107|      4|        rangeRecord.arrayZ[range].first = g;
  108|      4|        rangeRecord.arrayZ[range].value = count;
  109|      4|      }
  110|     16|      rangeRecord.arrayZ[range].last = g;
  111|     16|      last = g;
  112|     16|      count++;
  113|     16|    }
  114|       |
  115|      3|    if (unlikely (unsorted))
  ------------------
  |  |  259|      3|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  116|      0|      rangeRecord.as_array ().qsort (RangeRecord<Types>::cmp_range);
  117|       |
  118|      3|    return_trace (true);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  119|      3|  }
hb-ot-shaper-arabic.cc:_ZN2OT6Layout6Common17CoverageFormat2_4INS0_10SmallTypesEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS9_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSI_0EEEbP22hb_serialize_context_tT_:
   79|    250|  {
   80|    250|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    250|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   81|    250|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    250|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 250]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   82|       |
   83|    250|    unsigned num_ranges = 0;
   84|    250|    hb_codepoint_t last = (hb_codepoint_t) -2;
   85|    250|    for (auto g: glyphs)
  ------------------
  |  Branch (85:16): [True: 11.4k, False: 250]
  ------------------
   86|  11.4k|    {
   87|  11.4k|      if (last + 1 != g)
  ------------------
  |  Branch (87:11): [True: 3.25k, False: 8.20k]
  ------------------
   88|  3.25k|        num_ranges++;
   89|  11.4k|      last = g;
   90|  11.4k|    }
   91|       |
   92|    250|    if (unlikely (!rangeRecord.serialize (c, num_ranges))) return_trace (false);
  ------------------
  |  |  259|    250|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 250]
  |  |  ------------------
  ------------------
                  if (unlikely (!rangeRecord.serialize (c, num_ranges))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   93|    250|    if (!num_ranges) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (93:9): [True: 0, False: 250]
  ------------------
   94|       |
   95|    250|    unsigned count = 0;
   96|    250|    unsigned range = (unsigned) -1;
   97|    250|    last = (hb_codepoint_t) -2;
   98|    250|    unsigned unsorted = false;
   99|    250|    for (auto g: glyphs)
  ------------------
  |  Branch (99:16): [True: 11.4k, False: 250]
  ------------------
  100|  11.4k|    {
  101|  11.4k|      if (last + 1 != g)
  ------------------
  |  Branch (101:11): [True: 3.25k, False: 8.20k]
  ------------------
  102|  3.25k|      {
  103|  3.25k|	if (unlikely (last != (hb_codepoint_t) -2 && last + 1 > g))
  ------------------
  |  |  259|  6.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 206, False: 3.04k]
  |  |  |  Branch (259:47): [True: 3.00k, False: 250]
  |  |  |  Branch (259:47): [True: 206, False: 2.79k]
  |  |  ------------------
  ------------------
  104|    206|	  unsorted = true;
  105|       |
  106|  3.25k|        range++;
  107|  3.25k|        rangeRecord.arrayZ[range].first = g;
  108|  3.25k|        rangeRecord.arrayZ[range].value = count;
  109|  3.25k|      }
  110|  11.4k|      rangeRecord.arrayZ[range].last = g;
  111|  11.4k|      last = g;
  112|  11.4k|      count++;
  113|  11.4k|    }
  114|       |
  115|    250|    if (unlikely (unsorted))
  ------------------
  |  |  259|    250|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 66, False: 184]
  |  |  ------------------
  ------------------
  116|     66|      rangeRecord.as_array ().qsort (RangeRecord<Types>::cmp_range);
  117|       |
  118|    250|    return_trace (true);
  ------------------
  |  |  349|    250|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    250|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  119|    250|  }

_ZNK2OT6Layout6Common11RangeRecordINS0_10SmallTypesEE3cmpEj:
   52|  44.4M|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (52:12): [True: 13.3M, False: 31.0M]
  |  Branch (52:29): [True: 13.3M, False: 17.6M]
  ------------------
_ZN4NullIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE8get_nullEv:
   91|  19.6M|  static OT::Layout::Common::RangeRecord<Spec> const & get_null () {
   92|  19.6M|    return *reinterpret_cast<const OT::Layout::Common::RangeRecord<Spec> *> (_hb_Null_OT_RangeRecord);
   93|  19.6M|  }
_ZNK2OT6Layout6Common11RangeRecordINS0_11MediumTypesEE3cmpEj:
   52|  3.32M|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (52:12): [True: 1.58M, False: 1.73M]
  |  Branch (52:29): [True: 1.53M, False: 204k]
  ------------------
_ZN4NullIN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE8get_nullEv:
   91|  1.77M|  static OT::Layout::Common::RangeRecord<Spec> const & get_null () {
   92|  1.77M|    return *reinterpret_cast<const OT::Layout::Common::RangeRecord<Spec> *> (_hb_Null_OT_RangeRecord);
   93|  1.77M|  }
_ZNK2OT6Layout6Common11RangeRecordINS0_10SmallTypesEE14get_populationEv:
   67|  5.85k|  {
   68|  5.85k|    if (unlikely (last < first)) return 0;
  ------------------
  |  |  259|  5.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.96k, False: 3.88k]
  |  |  ------------------
  ------------------
   69|  3.88k|    return (last - first + 1);
   70|  5.85k|  }
_ZNK2OT6Layout6Common11RangeRecordINS0_11MediumTypesEE14get_populationEv:
   67|  44.5k|  {
   68|  44.5k|    if (unlikely (last < first)) return 0;
  ------------------
  |  |  259|  44.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.0k, False: 28.5k]
  |  |  ------------------
  ------------------
   69|  28.5k|    return (last - first + 1);
   70|  44.5k|  }
_ZN2OT6Layout6Common11RangeRecordINS0_10SmallTypesEE9cmp_rangeEPKvS6_:
   54|  1.43k|  HB_INTERNAL static int cmp_range (const void *pa, const void *pb) {
   55|  1.43k|    const RangeRecord *a = (const RangeRecord *) pa;
   56|  1.43k|    const RangeRecord *b = (const RangeRecord *) pb;
   57|  1.43k|    if (a->first < b->first) return -1;
  ------------------
  |  Branch (57:9): [True: 833, False: 597]
  ------------------
   58|    597|    if (a->first > b->first) return +1;
  ------------------
  |  Branch (58:9): [True: 302, False: 295]
  ------------------
   59|    295|    if (a->last < b->last) return -1;
  ------------------
  |  Branch (59:9): [True: 37, False: 258]
  ------------------
   60|    258|    if (a->last > b->last) return +1;
  ------------------
  |  Branch (60:9): [True: 10, False: 248]
  ------------------
   61|    248|    if (a->value < b->value) return -1;
  ------------------
  |  Branch (61:9): [True: 185, False: 63]
  ------------------
   62|     63|    if (a->value > b->value) return +1;
  ------------------
  |  Branch (62:9): [True: 63, False: 0]
  ------------------
   63|      0|    return 0;
   64|     63|  }
_ZNK2OT6Layout6Common11RangeRecordINS0_10SmallTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
   77|   165k|  { return glyphs->add_range (first, last); }
_ZNK2OT6Layout6Common11RangeRecordINS0_11MediumTypesEE16collect_coverageI24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES6_IS7_ImLj0EES7_ImLj9EEEEEEbPT_:
   77|  26.5k|  { return glyphs->add_range (first, last); }

_ZN2OT18GDEF_accelerator_tC2EP9hb_face_t:
  933|  32.8k|  GDEF_accelerator_t (hb_face_t *face) : GDEF::accelerator_t (face) {}
_ZN2OT4GDEF13accelerator_tC2EP9hb_face_t:
  852|  32.8k|    {
  853|  32.8k|      table = hb_sanitize_context_t ().reference_table<GDEF> (face);
  854|  32.8k|      if (unlikely (table->is_blocklisted (table.get_blob (), face)))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.8k]
  |  |  ------------------
  ------------------
  855|      0|      {
  856|      0|	hb_blob_destroy (table.get_blob ());
  857|      0|	table = hb_blob_get_empty ();
  858|      0|      }
  859|  32.8k|    }
_ZNK2OT4GDEF8sanitizeEP21hb_sanitize_context_t:
  652|  5.05k|  {
  653|  5.05k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.05k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  654|  5.05k|    if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  5.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 5.04k]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  655|  5.04k|    switch (u.version.major) {
  656|  4.02k|    case 1: return_trace (u.version1.sanitize (c));
  ------------------
  |  |  349|  4.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (656:5): [True: 4.02k, False: 1.01k]
  ------------------
  657|      0|#ifndef HB_NO_BEYOND_64K
  658|    793|    case 2: return_trace (u.version2.sanitize (c));
  ------------------
  |  |  349|    793|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    793|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (658:5): [True: 793, False: 4.24k]
  ------------------
  659|      0|#endif
  660|    225|    default: return_trace (true);
  ------------------
  |  |  349|    225|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    225|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (660:5): [True: 225, False: 4.81k]
  ------------------
  661|  5.04k|    }
  662|  5.04k|  }
_ZNK2OT14GDEFVersion1_2INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
  575|  4.02k|  {
  576|  4.02k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.02k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  577|  4.02k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  50.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.02k, False: 1]
  |  |  |  Branch (349:45): [True: 3.80k, False: 220]
  |  |  |  Branch (349:45): [True: 3.20k, False: 597]
  |  |  |  Branch (349:45): [True: 2.80k, False: 400]
  |  |  |  Branch (349:45): [True: 2.70k, False: 98]
  |  |  |  Branch (349:45): [True: 1.62k, False: 1.08k]
  |  |  |  Branch (349:45): [True: 972, False: 116]
  |  |  |  Branch (349:45): [True: 1.64k, False: 951]
  |  |  |  Branch (349:45): [True: 893, False: 58]
  |  |  ------------------
  ------------------
  578|  4.02k|		  glyphClassDef.sanitize (c, this) &&
  579|  4.02k|		  attachList.sanitize (c, this) &&
  580|  4.02k|		  ligCaretList.sanitize (c, this) &&
  581|  4.02k|		  markAttachClassDef.sanitize (c, this) &&
  582|  4.02k|		  (version.to_int () < 0x00010002u || markGlyphSetsDef.sanitize (c, this)) &&
  583|  4.02k|		  (version.to_int () < 0x00010003u || varStore.sanitize (c, this)));
  584|  4.02k|  }
_ZNK2OT10AttachList8sanitizeEP21hb_sanitize_context_t:
  105|  3.10k|  {
  106|  3.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  107|  3.10k|    return_trace (coverage.sanitize (c, this) && attachPoint.sanitize (c, this));
  ------------------
  |  |  349|  5.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.13k, False: 975]
  |  |  |  Branch (349:45): [True: 1.73k, False: 395]
  |  |  ------------------
  ------------------
  108|  3.10k|  }
_ZNK2OT12LigCaretList8sanitizeEP21hb_sanitize_context_t:
  420|  1.90k|  {
  421|  1.90k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.90k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  422|  1.90k|    return_trace (coverage.sanitize (c, this) && ligGlyph.sanitize (c, this));
  ------------------
  |  |  349|  2.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.90k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 913, False: 992]
  |  |  |  Branch (349:45): [True: 608, False: 305]
  |  |  ------------------
  ------------------
  423|  1.90k|  }
_ZNK2OT8LigGlyph8sanitizeEP21hb_sanitize_context_t:
  353|  12.2k|  {
  354|  12.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  355|  12.2k|    return_trace (carets.sanitize (c, this));
  ------------------
  |  |  349|  12.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  356|  12.2k|  }
_ZNK2OT10CaretValue8sanitizeEP21hb_sanitize_context_t:
  289|  17.6M|  {
  290|  17.6M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.6M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  291|  17.6M|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  2.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (291:9): [True: 2.02k, False: 17.6M]
  ------------------
  292|  17.6M|    switch (u.format) {
  293|   559k|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|   559k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   559k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (293:5): [True: 559k, False: 17.0M]
  ------------------
  294|   413k|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|   413k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   413k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (294:5): [True: 413k, False: 17.2M]
  ------------------
  295|   384k|    case 3: return_trace (u.format3.sanitize (c));
  ------------------
  |  |  349|   384k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   384k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (295:5): [True: 384k, False: 17.2M]
  ------------------
  296|  16.2M|    default:return_trace (true);
  ------------------
  |  |  349|  16.2M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.2M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (296:5): [True: 16.2M, False: 1.35M]
  ------------------
  297|  17.6M|    }
  298|  17.6M|  }
_ZNK2OT17CaretValueFormat18sanitizeEP21hb_sanitize_context_t:
  143|   559k|  {
  144|   559k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   559k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  145|   559k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   559k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   559k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  146|   559k|  }
_ZNK2OT17CaretValueFormat28sanitizeEP21hb_sanitize_context_t:
  175|   413k|  {
  176|   413k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   413k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  177|   413k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   413k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   413k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  178|   413k|  }
_ZNK2OT17CaretValueFormat38sanitizeEP21hb_sanitize_context_t:
  231|   384k|  {
  232|   384k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   384k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  233|   384k|    return_trace (c->check_struct (this) && deviceTable.sanitize (c, this));
  ------------------
  |  |  349|   767k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   384k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 383k, False: 77]
  |  |  |  Branch (349:45): [True: 383k, False: 12]
  |  |  ------------------
  ------------------
  234|   384k|  }
_ZNK2OT13MarkGlyphSets8sanitizeEP21hb_sanitize_context_t:
  505|  1.01k|  {
  506|  1.01k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.01k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  507|  1.01k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|    537|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (507:9): [True: 537, False: 474]
  ------------------
  508|    474|    switch (u.format) {
  509|    190|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|    190|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    190|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (509:5): [True: 190, False: 284]
  ------------------
  510|    284|    default:return_trace (true);
  ------------------
  |  |  349|    284|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (510:5): [True: 284, False: 190]
  ------------------
  511|    474|    }
  512|    474|  }
_ZNK2OT20MarkGlyphSetsFormat18sanitizeEP21hb_sanitize_context_t:
  471|    190|  {
  472|    190|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    190|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  473|    190|    return_trace (coverage.sanitize (c, this));
  ------------------
  |  |  349|    190|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    190|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  474|    190|  }
_ZNK2OT14GDEFVersion1_2INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
  575|    793|  {
  576|    793|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    793|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  577|    793|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  10.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    793|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 792, False: 1]
  |  |  |  Branch (349:45): [True: 736, False: 56]
  |  |  |  Branch (349:45): [True: 558, False: 178]
  |  |  |  Branch (349:45): [True: 517, False: 41]
  |  |  |  Branch (349:45): [True: 502, False: 15]
  |  |  |  Branch (349:45): [True: 2, False: 500]
  |  |  |  Branch (349:45): [True: 490, False: 10]
  |  |  |  Branch (349:45): [True: 2, False: 490]
  |  |  |  Branch (349:45): [True: 482, False: 8]
  |  |  ------------------
  ------------------
  578|    793|		  glyphClassDef.sanitize (c, this) &&
  579|    793|		  attachList.sanitize (c, this) &&
  580|    793|		  ligCaretList.sanitize (c, this) &&
  581|    793|		  markAttachClassDef.sanitize (c, this) &&
  582|    793|		  (version.to_int () < 0x00010002u || markGlyphSetsDef.sanitize (c, this)) &&
  583|    793|		  (version.to_int () < 0x00010003u || varStore.sanitize (c, this)));
  584|    793|  }
_ZN2OT4GDEF13accelerator_tD2Ev:
  860|  32.8k|    ~accelerator_t () { table.destroy (); }
_ZNK2OT4GDEF17has_glyph_classesEv:
  676|   738k|  {
  677|   738k|    switch (u.version.major) {
  678|  33.3k|    case 1: return u.version1.glyphClassDef != 0;
  ------------------
  |  Branch (678:5): [True: 33.3k, False: 704k]
  ------------------
  679|      0|#ifndef HB_NO_BEYOND_64K
  680|  6.70k|    case 2: return u.version2.glyphClassDef != 0;
  ------------------
  |  Branch (680:5): [True: 6.70k, False: 731k]
  ------------------
  681|      0|#endif
  682|   698k|    default: return false;
  ------------------
  |  Branch (682:5): [True: 698k, False: 40.0k]
  ------------------
  683|   738k|    }
  684|   738k|  }
_ZNK2OT4GDEF15get_glyph_propsEj:
  829|   947k|  {
  830|   947k|    unsigned int klass = get_glyph_class (glyph);
  831|       |
  832|   947k|    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs), "");
  833|   947k|    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures), "");
  834|   947k|    static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks), "");
  835|       |
  836|   947k|    switch (klass) {
  837|   645k|    default:			return HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED;
  ------------------
  |  Branch (837:5): [True: 645k, False: 301k]
  ------------------
  838|  3.29k|    case BaseGlyph:		return HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH;
  ------------------
  |  Branch (838:5): [True: 3.29k, False: 944k]
  ------------------
  839|  4.02k|    case LigatureGlyph:		return HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE;
  ------------------
  |  Branch (839:5): [True: 4.02k, False: 943k]
  ------------------
  840|   294k|    case MarkGlyph:
  ------------------
  |  Branch (840:5): [True: 294k, False: 653k]
  ------------------
  841|   294k|	  klass = get_mark_attachment_type (glyph);
  842|   294k|	  return HB_OT_LAYOUT_GLYPH_PROPS_MARK | (klass << 8);
  843|   947k|    }
  844|   947k|  }
_ZNK2OT4GDEF15get_glyph_classEj:
  799|   947k|  { return get_glyph_class_def ().get_class (glyph); }
_ZNK2OT4GDEF19get_glyph_class_defEv:
  686|   947k|  {
  687|   947k|    switch (u.version.major) {
  688|   672k|    case 1: return this+u.version1.glyphClassDef;
  ------------------
  |  Branch (688:5): [True: 672k, False: 274k]
  ------------------
  689|      0|#ifndef HB_NO_BEYOND_64K
  690|   210k|    case 2: return this+u.version2.glyphClassDef;
  ------------------
  |  Branch (690:5): [True: 210k, False: 737k]
  ------------------
  691|      0|#endif
  692|  64.4k|    default: return Null(ClassDef);
  ------------------
  |  |  124|  64.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (692:5): [True: 64.4k, False: 883k]
  ------------------
  693|   947k|    }
  694|   947k|  }
_ZNK2OT4GDEF24get_mark_attachment_typeEj:
  804|   294k|  { return get_mark_attach_class_def ().get_class (glyph); }
_ZNK2OT4GDEF25get_mark_attach_class_defEv:
  746|   294k|  {
  747|   294k|    switch (u.version.major) {
  748|   294k|    case 1: return this+u.version1.markAttachClassDef;
  ------------------
  |  Branch (748:5): [True: 294k, False: 635]
  ------------------
  749|      0|#ifndef HB_NO_BEYOND_64K
  750|    635|    case 2: return this+u.version2.markAttachClassDef;
  ------------------
  |  Branch (750:5): [True: 635, False: 294k]
  ------------------
  751|      0|#endif
  752|      0|    default: return Null(ClassDef);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (752:5): [True: 0, False: 294k]
  ------------------
  753|   294k|    }
  754|   294k|  }
_ZNK2OT4GDEF13get_var_storeEv:
  786|   682k|  {
  787|   682k|    switch (u.version.major) {
  788|  30.4k|    case 1: return u.version.to_int () >= 0x00010003u ? this+u.version1.varStore : Null(VariationStore);
  ------------------
  |  |  124|  51.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (788:5): [True: 30.4k, False: 651k]
  |  Branch (788:20): [True: 9.15k, False: 21.3k]
  ------------------
  789|      0|#ifndef HB_NO_BEYOND_64K
  790|  5.84k|    case 2: return this+u.version2.varStore;
  ------------------
  |  Branch (790:5): [True: 5.84k, False: 676k]
  ------------------
  791|      0|#endif
  792|   646k|    default: return Null(VariationStore);
  ------------------
  |  |  124|   646k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (792:5): [True: 646k, False: 36.3k]
  ------------------
  793|   682k|    }
  794|   682k|  }
_ZNK2OT4GDEF15mark_set_coversEjj:
  823|   229k|  { return get_mark_glyph_sets ().covers (set_index, glyph_id); }
_ZNK2OT4GDEF19get_mark_glyph_setsEv:
  766|   229k|  {
  767|   229k|    switch (u.version.major) {
  768|  3.45k|    case 1: return u.version.to_int () >= 0x00010002u ? this+u.version1.markGlyphSetsDef : Null(MarkGlyphSets);
  ------------------
  |  |  124|  5.22k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (768:5): [True: 3.45k, False: 226k]
  |  Branch (768:20): [True: 1.68k, False: 1.76k]
  ------------------
  769|      0|#ifndef HB_NO_BEYOND_64K
  770|  2.75k|    case 2: return this+u.version2.markGlyphSetsDef;
  ------------------
  |  Branch (770:5): [True: 2.75k, False: 226k]
  ------------------
  771|      0|#endif
  772|   223k|    default: return Null(MarkGlyphSets);
  ------------------
  |  |  124|   223k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (772:5): [True: 223k, False: 6.20k]
  ------------------
  773|   229k|    }
  774|   229k|  }
_ZNK2OT13MarkGlyphSets6coversEjj:
  488|   229k|  {
  489|   229k|    switch (u.format) {
  490|  2.31k|    case 1: return u.format1.covers (set_index, glyph_id);
  ------------------
  |  Branch (490:5): [True: 2.31k, False: 227k]
  ------------------
  491|   227k|    default:return false;
  ------------------
  |  Branch (491:5): [True: 227k, False: 2.31k]
  ------------------
  492|   229k|    }
  493|   229k|  }
_ZNK2OT20MarkGlyphSetsFormat16coversEjj:
  440|  2.31k|  { return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; }
  ------------------
  |  |   37|  2.31k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
_ZNK2OT8LigGlyph14get_lig_caretsEP9hb_font_t14hb_direction_tjRKNS_14VariationStoreEjPjPi:
  320|      9|  {
  321|      9|    if (caret_count)
  ------------------
  |  Branch (321:9): [True: 0, False: 9]
  ------------------
  322|      0|    {
  323|      0|      + carets.as_array ().sub_array (start_offset, caret_count)
  324|      0|      | hb_map (hb_add (this))
  325|      0|      | hb_map ([&] (const CaretValue &value) { return value.get_caret_value (font, direction, glyph_id, var_store); })
  326|      0|      | hb_sink (hb_array (caret_array, *caret_count))
  327|      0|      ;
  328|      0|    }
  329|       |
  330|      9|    return carets.len;
  331|      9|  }
_ZNK2OT12LigCaretList14get_lig_caretsEP9hb_font_t14hb_direction_tjRKNS_14VariationStoreEjPjPi:
  376|  33.3k|  {
  377|  33.3k|    unsigned int index = (this+coverage).get_coverage (glyph_id);
  378|  33.3k|    if (index == NOT_COVERED)
  ------------------
  |  |   37|  33.3k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (378:9): [True: 33.3k, False: 9]
  ------------------
  379|  33.3k|    {
  380|  33.3k|      if (caret_count)
  ------------------
  |  Branch (380:11): [True: 0, False: 33.3k]
  ------------------
  381|      0|	*caret_count = 0;
  382|  33.3k|      return 0;
  383|  33.3k|    }
  384|      9|    const LigGlyph &lig_glyph = this+ligGlyph[index];
  385|      9|    return lig_glyph.get_lig_carets (font, direction, glyph_id, var_store, start_offset, caret_count, caret_array);
  386|  33.3k|  }
_ZNK2OT4GDEF18get_lig_caret_listEv:
  726|  33.3k|  {
  727|  33.3k|    switch (u.version.major) {
  728|  1.32k|    case 1: return this+u.version1.ligCaretList;
  ------------------
  |  Branch (728:5): [True: 1.32k, False: 32.0k]
  ------------------
  729|      0|#ifndef HB_NO_BEYOND_64K
  730|    238|    case 2: return this+u.version2.ligCaretList;
  ------------------
  |  Branch (730:5): [True: 238, False: 33.1k]
  ------------------
  731|      0|#endif
  732|  31.7k|    default: return Null(LigCaretList);
  ------------------
  |  |  124|  31.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (732:5): [True: 31.7k, False: 1.55k]
  ------------------
  733|  33.3k|    }
  734|  33.3k|  }
_ZNK2OT4GDEF14get_lig_caretsEP9hb_font_t14hb_direction_tjjPjPi:
  818|  33.3k|  { return get_lig_caret_list ().get_lig_carets (font,
  819|  33.3k|						 direction, glyph_id, get_var_store(),
  820|  33.3k|						 start_offset, caret_count, caret_array); }
_ZNK2OT4GDEF13accelerator_t15get_glyph_propsEj:
  863|  5.02M|    {
  864|  5.02M|      unsigned v;
  865|       |
  866|  5.02M|#ifndef HB_NO_GDEF_CACHE
  867|  5.02M|      if (glyph_props_cache.get (glyph, &v))
  ------------------
  |  Branch (867:11): [True: 4.14M, False: 884k]
  ------------------
  868|  4.14M|        return v;
  869|   884k|#endif
  870|       |
  871|   884k|      v = table->get_glyph_props (glyph);
  872|       |
  873|   884k|#ifndef HB_NO_GDEF_CACHE
  874|   884k|      if (likely (table.get_blob ())) // Don't try setting if we are the null instance!
  ------------------
  |  |  258|   884k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 884k, False: 332]
  |  |  ------------------
  ------------------
  875|   884k|	glyph_props_cache.set (glyph, v);
  876|   884k|#endif
  877|       |
  878|   884k|      return v;
  879|       |
  880|  5.02M|    }

_ZNK2OT6Layout9GPOS_impl6Anchor8sanitizeEP21hb_sanitize_context_t:
   25|  13.6M|  {
   26|  13.6M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.6M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   27|  13.6M|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  4.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (27:9): [True: 4.98k, False: 13.6M]
  ------------------
   28|  13.6M|    switch (u.format) {
   29|   548k|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|   548k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   548k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 548k, False: 13.1M]
  ------------------
   30|   279k|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|   279k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   279k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 279k, False: 13.4M]
  ------------------
   31|   530k|    case 3: return_trace (u.format3.sanitize (c));
  ------------------
  |  |  349|   530k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   530k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 530k, False: 13.1M]
  ------------------
   32|  12.3M|    default:return_trace (true);
  ------------------
  |  |  349|  12.3M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.3M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 12.3M, False: 1.35M]
  ------------------
   33|  13.6M|    }
   34|  13.6M|  }
_ZNK2OT6Layout9GPOS_impl6Anchor10get_anchorEPNS_21hb_ot_apply_context_tEjPfS5_:
   38|   586k|  {
   39|   586k|    *x = *y = 0;
   40|   586k|    switch (u.format) {
   41|  54.2k|    case 1: u.format1.get_anchor (c, glyph_id, x, y); return;
  ------------------
  |  Branch (41:5): [True: 54.2k, False: 532k]
  ------------------
   42|  60.7k|    case 2: u.format2.get_anchor (c, glyph_id, x, y); return;
  ------------------
  |  Branch (42:5): [True: 60.7k, False: 525k]
  ------------------
   43|  13.4k|    case 3: u.format3.get_anchor (c, glyph_id, x, y); return;
  ------------------
  |  Branch (43:5): [True: 13.4k, False: 573k]
  ------------------
   44|   457k|    default:                                          return;
  ------------------
  |  Branch (44:5): [True: 457k, False: 128k]
  ------------------
   45|   586k|    }
   46|   586k|  }

_ZNK2OT6Layout9GPOS_impl13AnchorFormat18sanitizeEP21hb_sanitize_context_t:
   18|   548k|  {
   19|   548k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   548k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   20|   548k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   548k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   548k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   21|   548k|  }
_ZNK2OT6Layout9GPOS_impl13AnchorFormat110get_anchorEPNS_21hb_ot_apply_context_tEjPfS5_:
   25|  54.2k|  {
   26|  54.2k|    hb_font_t *font = c->font;
   27|  54.2k|    *x = font->em_fscale_x (xCoordinate);
   28|  54.2k|    *y = font->em_fscale_y (yCoordinate);
   29|  54.2k|  }

_ZNK2OT6Layout9GPOS_impl13AnchorFormat28sanitizeEP21hb_sanitize_context_t:
   20|   279k|  {
   21|   279k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   279k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   22|   279k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   279k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   279k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   23|   279k|  }
_ZNK2OT6Layout9GPOS_impl13AnchorFormat210get_anchorEPNS_21hb_ot_apply_context_tEjPfS5_:
   27|  60.7k|  {
   28|  60.7k|    hb_font_t *font = c->font;
   29|       |
   30|       |#ifdef HB_NO_HINTING
   31|       |    *x = font->em_fscale_x (xCoordinate);
   32|       |    *y = font->em_fscale_y (yCoordinate);
   33|       |    return;
   34|       |#endif
   35|       |
   36|  60.7k|    unsigned int x_ppem = font->x_ppem;
   37|  60.7k|    unsigned int y_ppem = font->y_ppem;
   38|  60.7k|    hb_position_t cx = 0, cy = 0;
   39|  60.7k|    bool ret;
   40|       |
   41|  60.7k|    ret = (x_ppem || y_ppem) &&
  ------------------
  |  Branch (41:12): [True: 0, False: 60.7k]
  |  Branch (41:22): [True: 0, False: 60.7k]
  ------------------
   42|  60.7k|          font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
  ------------------
  |  Branch (42:11): [True: 0, False: 0]
  ------------------
   43|  60.7k|    *x = ret && x_ppem ? cx : font->em_fscale_x (xCoordinate);
  ------------------
  |  Branch (43:10): [True: 0, False: 60.7k]
  |  Branch (43:17): [True: 0, False: 0]
  ------------------
   44|  60.7k|    *y = ret && y_ppem ? cy : font->em_fscale_y (yCoordinate);
  ------------------
  |  Branch (44:10): [True: 0, False: 60.7k]
  |  Branch (44:17): [True: 0, False: 0]
  ------------------
   45|  60.7k|  }

_ZNK2OT6Layout9GPOS_impl13AnchorFormat38sanitizeEP21hb_sanitize_context_t:
   26|   530k|  {
   27|   530k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   530k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|   530k|    return_trace (c->check_struct (this) && xDeviceTable.sanitize (c, this) && yDeviceTable.sanitize (c, this));
  ------------------
  |  |  349|  2.11M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   530k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 529k, False: 91]
  |  |  |  Branch (349:45): [True: 529k, False: 18]
  |  |  |  Branch (349:45): [True: 529k, False: 15]
  |  |  ------------------
  ------------------
   29|   530k|  }
_ZNK2OT6Layout9GPOS_impl13AnchorFormat310get_anchorEPNS_21hb_ot_apply_context_tEjPfS5_:
   33|  13.4k|  {
   34|  13.4k|    hb_font_t *font = c->font;
   35|  13.4k|    *x = font->em_fscale_x (xCoordinate);
   36|  13.4k|    *y = font->em_fscale_y (yCoordinate);
   37|       |
   38|  13.4k|    if (font->x_ppem || font->num_coords)
  ------------------
  |  Branch (38:9): [True: 0, False: 13.4k]
  |  Branch (38:25): [True: 0, False: 13.4k]
  ------------------
   39|      0|      *x += (this+xDeviceTable).get_x_delta (font, c->var_store, c->var_store_cache);
   40|  13.4k|    if (font->y_ppem || font->num_coords)
  ------------------
  |  Branch (40:9): [True: 0, False: 13.4k]
  |  Branch (40:25): [True: 0, False: 13.4k]
  ------------------
   41|      0|      *y += (this+yDeviceTable).get_y_delta (font, c->var_store, c->var_store_cache);
   42|  13.4k|  }

_ZNK2OT6Layout9GPOS_impl12AnchorMatrix8sanitizeEP21hb_sanitize_context_tj:
   18|  1.59M|  {
   19|  1.59M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.59M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   20|  1.59M|    if (!c->check_struct (this)) return_trace (false);
  ------------------
  |  |  349|  1.41k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (20:9): [True: 1.41k, False: 1.59M]
  ------------------
   21|  1.59M|    if (unlikely (hb_unsigned_mul_overflows (rows, cols))) return_trace (false);
  ------------------
  |  |  259|  1.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.59M]
  |  |  ------------------
  ------------------
                  if (unlikely (hb_unsigned_mul_overflows (rows, cols))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   22|  1.59M|    unsigned int count = rows * cols;
   23|  1.59M|    if (!c->check_array (matrixZ.arrayZ, count)) return_trace (false);
  ------------------
  |  |  349|    749|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    749|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (23:9): [True: 749, False: 1.59M]
  ------------------
   24|  13.6M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (24:30): [True: 12.0M, False: 1.59M]
  ------------------
   25|  12.0M|      if (!matrixZ[i].sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|  1.59M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     59|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (25:11): [True: 59, False: 12.0M]
  ------------------
   26|  1.59M|    return_trace (true);
  ------------------
  |  |  349|  1.59M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.59M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   27|  1.59M|  }
_ZNK2OT6Layout9GPOS_impl12AnchorMatrix10get_anchorEjjjPb:
   31|   166k|  {
   32|   166k|    *found = false;
   33|   166k|    if (unlikely (row >= rows || col >= cols)) return Null (Anchor);
  ------------------
  |  |  259|   244k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 95.8k, False: 70.6k]
  |  |  |  Branch (259:47): [True: 88.5k, False: 77.9k]
  |  |  |  Branch (259:47): [True: 7.24k, False: 70.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (row >= rows || col >= cols)) return Null (Anchor);
  ------------------
  |  |  124|  95.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
   34|  70.6k|    *found = !matrixZ[row * cols + col].is_null ();
   35|  70.6k|    return this+matrixZ[row * cols + col];
   36|   166k|  }

_ZNK2OT6Layout9GPOS_impl10CursivePos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   21|  34.8k|  {
   22|  34.8k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  34.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.38k, False: 33.4k]
  |  |  ------------------
  ------------------
   23|  33.4k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  33.4k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   24|  33.4k|    switch (u.format) {
   25|  8.36k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.36k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (25:5): [True: 8.36k, False: 25.1k]
  ------------------
   26|  25.1k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  25.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  25.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 25.1k, False: 8.36k]
  ------------------
   27|  33.4k|    }
   28|  33.4k|  }
_ZNK2OT6Layout9GPOS_impl10CursivePos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   21|  9.05k|  {
   22|  9.05k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  9.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 9.05k]
  |  |  ------------------
  ------------------
   23|  9.05k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  9.05k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   24|  9.05k|    switch (u.format) {
   25|  1.23k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.23k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.23k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (25:5): [True: 1.23k, False: 7.81k]
  ------------------
   26|  7.81k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  7.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.81k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 7.81k, False: 1.23k]
  ------------------
   27|  9.05k|    }
   28|  9.05k|  }

_ZNK2OT6Layout9GPOS_impl15EntryExitRecord8sanitizeEP21hb_sanitize_context_tPKv:
   15|   608k|  {
   16|   608k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   608k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   17|   608k|    return_trace (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base));
  ------------------
  |  |  349|  1.21M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   608k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 608k, False: 37]
  |  |  |  Branch (349:45): [True: 608k, False: 31]
  |  |  ------------------
  ------------------
   18|   608k|  }
_ZNK2OT6Layout9GPOS_impl17CursivePosFormat18sanitizeEP21hb_sanitize_context_t:
   92|  8.36k|  {
   93|  8.36k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.36k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   94|  8.36k|    return_trace (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this));
  ------------------
  |  |  349|  16.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.36k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.25k, False: 102]
  |  |  |  Branch (349:45): [True: 8.03k, False: 227]
  |  |  ------------------
  ------------------
   95|  8.36k|  }
_ZNK2OT6Layout9GPOS_impl17CursivePosFormat112get_coverageEv:
  114|  1.23k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GPOS_impl17CursivePosFormat15applyEPNS_21hb_ot_apply_context_tE:
  117|  1.62M|  {
  118|  1.62M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.62M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  119|  1.62M|    hb_buffer_t *buffer = c->buffer;
  120|       |
  121|  1.62M|    const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage  (buffer->cur().codepoint)];
  122|  1.62M|    if (!this_record.entryAnchor) return_trace (false);
  ------------------
  |  |  349|  1.27M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.27M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (122:9): [True: 1.27M, False: 349k]
  ------------------
  123|       |
  124|   349k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  125|   349k|    skippy_iter.reset_fast (buffer->idx, 1);
  126|   349k|    unsigned unsafe_from;
  127|   349k|    if (unlikely (!skippy_iter.prev (&unsafe_from)))
  ------------------
  |  |  259|   349k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.96k, False: 345k]
  |  |  ------------------
  ------------------
  128|  3.96k|    {
  129|  3.96k|      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
  130|  3.96k|      return_trace (false);
  ------------------
  |  |  349|  3.96k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.96k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  131|  3.96k|    }
  132|       |
  133|   345k|    const EntryExitRecord &prev_record = entryExitRecord[(this+coverage).get_coverage  (buffer->info[skippy_iter.idx].codepoint)];
  134|   345k|    if (!prev_record.exitAnchor)
  ------------------
  |  Branch (134:9): [True: 121k, False: 223k]
  ------------------
  135|   121k|    {
  136|   121k|      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  137|   121k|      return_trace (false);
  ------------------
  |  |  349|   121k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   121k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  138|   121k|    }
  139|       |
  140|   223k|    unsigned int i = skippy_iter.idx;
  141|   223k|    unsigned int j = buffer->idx;
  142|       |
  143|   223k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   447k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   223k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (143:35): [True: 0, False: 223k]
  ------------------
  144|      0|    {
  145|      0|      c->buffer->message (c->font,
  146|      0|			  "cursive attaching glyph at %u to glyph at %u",
  147|      0|			  i, j);
  148|      0|    }
  149|       |
  150|   223k|    buffer->unsafe_to_break (i, j + 1);
  151|   223k|    float entry_x, entry_y, exit_x, exit_y;
  152|   223k|    (this+prev_record.exitAnchor).get_anchor (c, buffer->info[i].codepoint, &exit_x, &exit_y);
  153|   223k|    (this+this_record.entryAnchor).get_anchor (c, buffer->info[j].codepoint, &entry_x, &entry_y);
  154|       |
  155|   223k|    hb_glyph_position_t *pos = buffer->pos;
  156|       |
  157|   223k|    hb_position_t d;
  158|       |    /* Main-direction adjustment */
  159|   223k|    switch (c->direction) {
  160|   221k|      case HB_DIRECTION_LTR:
  ------------------
  |  Branch (160:7): [True: 221k, False: 2.24k]
  ------------------
  161|   221k|        pos[i].x_advance  = roundf (exit_x) + pos[i].x_offset;
  ------------------
  |  |  207|   221k|#define roundf(x) _hb_roundf(x)
  ------------------
  162|       |
  163|   221k|        d = roundf (entry_x) + pos[j].x_offset;
  ------------------
  |  |  207|   221k|#define roundf(x) _hb_roundf(x)
  ------------------
  164|   221k|        pos[j].x_advance -= d;
  165|   221k|        pos[j].x_offset  -= d;
  166|   221k|        break;
  167|  2.24k|      case HB_DIRECTION_RTL:
  ------------------
  |  Branch (167:7): [True: 2.24k, False: 221k]
  ------------------
  168|  2.24k|        d = roundf (exit_x) + pos[i].x_offset;
  ------------------
  |  |  207|  2.24k|#define roundf(x) _hb_roundf(x)
  ------------------
  169|  2.24k|        pos[i].x_advance -= d;
  170|  2.24k|        pos[i].x_offset  -= d;
  171|       |
  172|  2.24k|        pos[j].x_advance  = roundf (entry_x) + pos[j].x_offset;
  ------------------
  |  |  207|  2.24k|#define roundf(x) _hb_roundf(x)
  ------------------
  173|  2.24k|        break;
  174|      0|      case HB_DIRECTION_TTB:
  ------------------
  |  Branch (174:7): [True: 0, False: 223k]
  ------------------
  175|      0|        pos[i].y_advance  = roundf (exit_y) + pos[i].y_offset;
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  176|       |
  177|      0|        d = roundf (entry_y) + pos[j].y_offset;
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  178|      0|        pos[j].y_advance -= d;
  179|      0|        pos[j].y_offset  -= d;
  180|      0|        break;
  181|      0|      case HB_DIRECTION_BTT:
  ------------------
  |  Branch (181:7): [True: 0, False: 223k]
  ------------------
  182|      0|        d = roundf (exit_y) + pos[i].y_offset;
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  183|      0|        pos[i].y_advance -= d;
  184|      0|        pos[i].y_offset  -= d;
  185|       |
  186|      0|        pos[j].y_advance  = roundf (entry_y);
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  187|      0|        break;
  188|      0|      case HB_DIRECTION_INVALID:
  ------------------
  |  Branch (188:7): [True: 0, False: 223k]
  ------------------
  189|      0|      default:
  ------------------
  |  Branch (189:7): [True: 0, False: 223k]
  ------------------
  190|      0|        break;
  191|   223k|    }
  192|       |
  193|       |    /* Cross-direction adjustment */
  194|       |
  195|       |    /* We attach child to parent (think graph theory and rooted trees whereas
  196|       |     * the root stays on baseline and each node aligns itself against its
  197|       |     * parent.
  198|       |     *
  199|       |     * Optimize things for the case of RightToLeft, as that's most common in
  200|       |     * Arabic. */
  201|   223k|    unsigned int child  = i;
  202|   223k|    unsigned int parent = j;
  203|   223k|    hb_position_t x_offset = entry_x - exit_x;
  204|   223k|    hb_position_t y_offset = entry_y - exit_y;
  205|   223k|    if  (!(c->lookup_props & LookupFlag::RightToLeft))
  ------------------
  |  Branch (205:10): [True: 9.14k, False: 214k]
  ------------------
  206|  9.14k|    {
  207|  9.14k|      unsigned int k = child;
  208|  9.14k|      child = parent;
  209|  9.14k|      parent = k;
  210|  9.14k|      x_offset = -x_offset;
  211|  9.14k|      y_offset = -y_offset;
  212|  9.14k|    }
  213|       |
  214|       |    /* If child was already connected to someone else, walk through its old
  215|       |     * chain and reverse the link direction, such that the whole tree of its
  216|       |     * previous connection now attaches to new parent.  Watch out for case
  217|       |     * where new parent is on the path from old chain...
  218|       |     */
  219|   223k|    reverse_cursive_minor_offset (pos, child, c->direction, parent);
  220|       |
  221|   223k|    pos[child].attach_type() = ATTACH_TYPE_CURSIVE;
  ------------------
  |  |   18|   223k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  222|   223k|    pos[child].attach_chain() = (int) parent - (int) child;
  ------------------
  |  |   17|   223k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  223|   223k|    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  224|   223k|    if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
  ------------------
  |  |  258|   223k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 223k, False: 0]
  |  |  ------------------
  ------------------
  225|   223k|      pos[child].y_offset = y_offset;
  226|      0|    else
  227|      0|      pos[child].x_offset = x_offset;
  228|       |
  229|       |    /* If parent was attached to child, separate them.
  230|       |     * https://github.com/harfbuzz/harfbuzz/issues/2469
  231|       |     */
  232|   223k|    if (unlikely (pos[parent].attach_chain() == -pos[child].attach_chain()))
  ------------------
  |  |  259|   223k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 314, False: 223k]
  |  |  ------------------
  ------------------
  233|    314|    {
  234|    314|      pos[parent].attach_chain() = 0;
  ------------------
  |  |   17|    314|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  235|    314|      if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
  ------------------
  |  |  258|    314|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 314, False: 0]
  |  |  ------------------
  ------------------
  236|    314|	pos[parent].y_offset = 0;
  237|      0|      else
  238|      0|	pos[parent].x_offset = 0;
  239|    314|    }
  240|       |
  241|   223k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   447k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   223k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (241:35): [True: 0, False: 223k]
  ------------------
  242|      0|    {
  243|      0|      c->buffer->message (c->font,
  244|      0|			  "cursive attached glyph at %u to glyph at %u",
  245|      0|			  i, j);
  246|      0|    }
  247|       |
  248|   223k|    buffer->idx++;
  249|   223k|    return_trace (true);
  ------------------
  |  |  349|   223k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   223k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  250|   223k|  }
hb-ot-layout.cc:_ZN2OT6Layout9GPOS_implL28reverse_cursive_minor_offsetEP19hb_glyph_position_tj14hb_direction_tj:
   53|   224k|reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsigned int i, hb_direction_t direction, unsigned int new_parent) {
   54|   224k|  int chain = pos[i].attach_chain(), type = pos[i].attach_type();
  ------------------
  |  |   17|   224k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
                int chain = pos[i].attach_chain(), type = pos[i].attach_type();
  ------------------
  |  |   18|   224k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
   55|   224k|  if (likely (!chain || 0 == (type & ATTACH_TYPE_CURSIVE)))
  ------------------
  |  |  258|   242k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 205k, False: 18.2k]
  |  |  |  Branch (258:45): [True: 205k, False: 18.2k]
  |  |  |  Branch (258:45): [True: 0, False: 18.2k]
  |  |  ------------------
  ------------------
   56|   205k|    return;
   57|       |
   58|  18.2k|  pos[i].attach_chain() = 0;
  ------------------
  |  |   17|  18.2k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
   59|       |
   60|  18.2k|  unsigned int j = (int) i + chain;
   61|       |
   62|       |  /* Stop if we see new parent in the chain. */
   63|  18.2k|  if (j == new_parent)
  ------------------
  |  Branch (63:7): [True: 17.8k, False: 336]
  ------------------
   64|  17.8k|    return;
   65|       |
   66|    336|  reverse_cursive_minor_offset (pos, j, direction, new_parent);
   67|       |
   68|    336|  if (HB_DIRECTION_IS_HORIZONTAL (direction))
  ------------------
  |  |  271|    336|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 336, False: 0]
  |  |  ------------------
  ------------------
   69|    336|    pos[j].y_offset = -pos[i].y_offset;
   70|      0|  else
   71|      0|    pos[j].x_offset = -pos[i].x_offset;
   72|       |
   73|    336|  pos[j].attach_chain() = -chain;
  ------------------
  |  |   17|    336|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
   74|    336|  pos[j].attach_type() = type;
  ------------------
  |  |   18|    336|#define attach_type() var.u8[2] /* attachment type */
  ------------------
   75|    336|}

_ZNK2OT6Layout4GPOS10get_lookupEj:
   34|  2.48M|  { return static_cast<const PosLookup &> (GSUBGPOS::get_lookup (i)); }
_ZNK2OT6Layout4GPOS8sanitizeEP21hb_sanitize_context_t:
   47|  17.7k|  {
   48|  17.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   49|  17.7k|    return_trace (GSUBGPOS::sanitize<PosLookup> (c));
  ------------------
  |  |  349|  17.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   50|  17.7k|  }
_ZN2OT18GPOS_accelerator_tC2EP9hb_face_t:
  166|  32.8k|  GPOS_accelerator_t (hb_face_t *face) : Layout::GPOS::accelerator_t (face) {}
_ZN2OT6Layout4GPOS14position_startEP9hb_font_tP11hb_buffer_t:
  129|   565k|{
  130|   565k|  unsigned int count = buffer->len;
  131|  29.6M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (131:28): [True: 29.1M, False: 565k]
  ------------------
  132|  29.1M|    buffer->pos[i].attach_chain() = buffer->pos[i].attach_type() = 0;
  ------------------
  |  |   17|  29.1M|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
                  buffer->pos[i].attach_chain() = buffer->pos[i].attach_type() = 0;
  ------------------
  |  |   18|  29.1M|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  133|   565k|}
_ZN2OT6Layout4GPOS24position_finish_advancesEP9hb_font_tP11hb_buffer_t:
  137|   565k|{
  138|       |  //_hb_buffer_assert_gsubgpos_vars (buffer);
  139|   565k|}
_ZN2OT6Layout4GPOS23position_finish_offsetsEP9hb_font_tP11hb_buffer_t:
  143|   565k|{
  144|   565k|  _hb_buffer_assert_gsubgpos_vars (buffer);
  145|       |
  146|   565k|  unsigned int len;
  147|   565k|  hb_glyph_position_t *pos = hb_buffer_get_glyph_positions (buffer, &len);
  148|   565k|  hb_direction_t direction = buffer->props.direction;
  149|       |
  150|       |  /* Handle attachments */
  151|   565k|  if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
  ------------------
  |  Branch (151:7): [True: 3.37k, False: 561k]
  ------------------
  152|  1.83M|    for (unsigned i = 0; i < len; i++)
  ------------------
  |  Branch (152:26): [True: 1.82M, False: 3.37k]
  ------------------
  153|  1.82M|      propagate_attachment_offsets (pos, len, i, direction);
  154|       |
  155|   565k|  if (unlikely (font->slant))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  156|      0|  {
  157|      0|    for (unsigned i = 0; i < len; i++)
  ------------------
  |  Branch (157:26): [True: 0, False: 0]
  ------------------
  158|      0|      if (unlikely (pos[i].y_offset))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  159|      0|        pos[i].x_offset += roundf (font->slant_xy * pos[i].y_offset);
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  160|      0|  }
  161|   565k|}
hb-ot-layout.cc:_ZN2OT6LayoutL28propagate_attachment_offsetsEP19hb_glyph_position_tjj14hb_direction_tj:
   80|  2.56M|{
   81|       |  /* Adjusts offsets of attached glyphs (both cursive and mark) to accumulate
   82|       |   * offset of glyph they are attached to. */
   83|  2.56M|  int chain = pos[i].attach_chain(), type = pos[i].attach_type();
  ------------------
  |  |   17|  2.56M|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
                int chain = pos[i].attach_chain(), type = pos[i].attach_type();
  ------------------
  |  |   18|  2.56M|#define attach_type() var.u8[2] /* attachment type */
  ------------------
   84|  2.56M|  if (likely (!chain))
  ------------------
  |  |  258|  2.56M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.82M, False: 744k]
  |  |  ------------------
  ------------------
   85|  1.82M|    return;
   86|       |
   87|   744k|  pos[i].attach_chain() = 0;
  ------------------
  |  |   17|   744k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
   88|       |
   89|   744k|  unsigned int j = (int) i + chain;
   90|       |
   91|   744k|  if (unlikely (j >= len))
  ------------------
  |  |  259|   744k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.46k, False: 739k]
  |  |  ------------------
  ------------------
   92|  5.46k|    return;
   93|       |
   94|   739k|  if (unlikely (!nesting_level))
  ------------------
  |  |  259|   739k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 585, False: 738k]
  |  |  ------------------
  ------------------
   95|    585|    return;
   96|       |
   97|   738k|  propagate_attachment_offsets (pos, len, j, direction, nesting_level - 1);
   98|       |
   99|   738k|  assert (!!(type & GPOS_impl::ATTACH_TYPE_MARK) ^ !!(type & GPOS_impl::ATTACH_TYPE_CURSIVE));
  100|       |
  101|   738k|  if (type & GPOS_impl::ATTACH_TYPE_CURSIVE)
  ------------------
  |  Branch (101:7): [True: 676k, False: 62.2k]
  ------------------
  102|   676k|  {
  103|   676k|    if (HB_DIRECTION_IS_HORIZONTAL (direction))
  ------------------
  |  |  271|   676k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 676k, False: 0]
  |  |  ------------------
  ------------------
  104|   676k|      pos[i].y_offset += pos[j].y_offset;
  105|      0|    else
  106|      0|      pos[i].x_offset += pos[j].x_offset;
  107|   676k|  }
  108|  62.2k|  else /*if (type & GPOS_impl::ATTACH_TYPE_MARK)*/
  109|  62.2k|  {
  110|  62.2k|    pos[i].x_offset += pos[j].x_offset;
  111|  62.2k|    pos[i].y_offset += pos[j].y_offset;
  112|       |
  113|  62.2k|    assert (j < i);
  114|  62.2k|    if (HB_DIRECTION_IS_FORWARD (direction))
  ------------------
  |  |  289|  62.2k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 58.2k, False: 3.96k]
  |  |  ------------------
  ------------------
  115|  12.6M|      for (unsigned int k = j; k < i; k++) {
  ------------------
  |  Branch (115:32): [True: 12.5M, False: 58.2k]
  ------------------
  116|  12.5M|        pos[i].x_offset -= pos[k].x_advance;
  117|  12.5M|        pos[i].y_offset -= pos[k].y_advance;
  118|  12.5M|      }
  119|  3.96k|    else
  120|   939k|      for (unsigned int k = j + 1; k < i + 1; k++) {
  ------------------
  |  Branch (120:36): [True: 935k, False: 3.96k]
  ------------------
  121|   935k|        pos[i].x_offset += pos[k].x_advance;
  122|   935k|        pos[i].y_offset += pos[k].y_advance;
  123|   935k|      }
  124|  62.2k|  }
  125|   738k|}

_ZNK2OT6Layout9GPOS_impl9MarkArray8sanitizeEP21hb_sanitize_context_t:
   14|  16.7k|  {
   15|  16.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   16|  16.7k|    return_trace (Array16Of<MarkRecord>::sanitize (c, this));
  ------------------
  |  |  349|  16.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   17|  16.7k|  }
_ZNK2OT6Layout9GPOS_impl9MarkArray5applyEPNS_21hb_ot_apply_context_tEjjRKNS1_12AnchorMatrixEjj:
   23|   166k|  {
   24|   166k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   166k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   25|   166k|    hb_buffer_t *buffer = c->buffer;
   26|   166k|    const MarkRecord &record = Array16Of<MarkRecord>::operator[](mark_index);
   27|   166k|    unsigned int mark_class = record.klass;
   28|       |
   29|   166k|    const Anchor& mark_anchor = this + record.markAnchor;
   30|   166k|    bool found;
   31|   166k|    const Anchor& glyph_anchor = anchors.get_anchor (glyph_index, mark_class, class_count, &found);
   32|       |    /* If this subtable doesn't have an anchor for this base and this class,
   33|       |     * return false such that the subsequent subtables have a chance at it. */
   34|   166k|    if (unlikely (!found)) return_trace (false);
  ------------------
  |  |  259|   166k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 97.0k, False: 69.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (!found)) return_trace (false);
  ------------------
  |  |  349|  97.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  97.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   35|       |
   36|  69.4k|    float mark_x, mark_y, base_x, base_y;
   37|       |
   38|  69.4k|    buffer->unsafe_to_break (glyph_pos, buffer->idx + 1);
   39|  69.4k|    mark_anchor.get_anchor (c, buffer->cur().codepoint, &mark_x, &mark_y);
   40|  69.4k|    glyph_anchor.get_anchor (c, buffer->info[glyph_pos].codepoint, &base_x, &base_y);
   41|       |
   42|  69.4k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   138k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  69.4k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (42:35): [True: 0, False: 69.4k]
  ------------------
   43|      0|    {
   44|      0|      c->buffer->message (c->font,
   45|      0|			  "attaching mark glyph at %u to glyph at %u",
   46|      0|			  c->buffer->idx, glyph_pos);
   47|      0|    }
   48|       |
   49|  69.4k|    hb_glyph_position_t &o = buffer->cur_pos();
   50|  69.4k|    o.x_offset = roundf (base_x - mark_x);
  ------------------
  |  |  207|  69.4k|#define roundf(x) _hb_roundf(x)
  ------------------
   51|  69.4k|    o.y_offset = roundf (base_y - mark_y);
  ------------------
  |  |  207|  69.4k|#define roundf(x) _hb_roundf(x)
  ------------------
   52|  69.4k|    o.attach_type() = ATTACH_TYPE_MARK;
  ------------------
  |  |   18|  69.4k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
   53|  69.4k|    o.attach_chain() = (int) glyph_pos - (int) buffer->idx;
  ------------------
  |  |   17|  69.4k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
   54|  69.4k|    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   55|       |
   56|  69.4k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   138k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  69.4k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (56:35): [True: 0, False: 69.4k]
  ------------------
   57|      0|    {
   58|      0|      c->buffer->message (c->font,
   59|      0|			  "attached mark glyph at %u to glyph at %u",
   60|      0|			  c->buffer->idx, glyph_pos);
   61|      0|    }
   62|       |
   63|  69.4k|    buffer->idx++;
   64|  69.4k|    return_trace (true);
  ------------------
  |  |  349|  69.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  69.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   65|   166k|  }

_ZNK2OT6Layout9GPOS_impl11MarkBasePos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   24|  70.0k|  {
   25|  70.0k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  70.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.72k, False: 67.3k]
  |  |  ------------------
  ------------------
   26|  67.3k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  67.3k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|  67.3k|    switch (u.format) {
   28|  9.08k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 9.08k, False: 58.2k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|  7.33k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 7.33k, False: 60.0k]
  ------------------
   31|      0|#endif
   32|  50.9k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  50.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  50.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 50.9k, False: 16.4k]
  ------------------
   33|  67.3k|    }
   34|  67.3k|  }
_ZNK2OT6Layout9GPOS_impl11MarkBasePos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   24|  15.6k|  {
   25|  15.6k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  15.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 15.6k]
  |  |  ------------------
  ------------------
   26|  15.6k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  15.6k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|  15.6k|    switch (u.format) {
   28|  1.56k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.56k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.56k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 1.56k, False: 14.0k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|  1.06k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 1.06k, False: 14.5k]
  ------------------
   31|      0|#endif
   32|  12.9k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  12.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 12.9k, False: 2.63k]
  ------------------
   33|  15.6k|    }
   34|  15.6k|  }

_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  113|  1.95M|  {
  114|  1.95M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.95M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  115|  1.95M|    hb_buffer_t *buffer = c->buffer;
  116|  1.95M|    unsigned int mark_index = (this+markCoverage).get_coverage  (buffer->cur().codepoint);
  117|  1.95M|    if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  1.95M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.03M, False: 920k]
  |  |  ------------------
  ------------------
                  if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  1.03M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.03M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  118|       |
  119|       |    /* Now we search backwards for a non-mark glyph.
  120|       |     * We don't use skippy_iter.prev() to avoid O(n^2) behavior. */
  121|       |
  122|   920k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  123|   920k|    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
  124|       |
  125|   920k|    if (c->last_base_until > buffer->idx)
  ------------------
  |  Branch (125:9): [True: 4.01k, False: 916k]
  ------------------
  126|  4.01k|    {
  127|  4.01k|      c->last_base_until = 0;
  128|  4.01k|      c->last_base = -1;
  129|  4.01k|    }
  130|   920k|    unsigned j;
  131|  1.49M|    for (j = buffer->idx; j > c->last_base_until; j--)
  ------------------
  |  Branch (131:27): [True: 841k, False: 653k]
  ------------------
  132|   841k|    {
  133|   841k|      auto match = skippy_iter.match (buffer->info[j - 1]);
  134|   841k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (134:11): [True: 810k, False: 31.3k]
  ------------------
  135|   810k|      {
  136|       |        // https://github.com/harfbuzz/harfbuzz/issues/4124
  137|   810k|	if (!accept (buffer, j - 1) &&
  ------------------
  |  Branch (137:6): [True: 574k, False: 235k]
  |  Branch (137:6): [True: 543k, False: 267k]
  ------------------
  138|   810k|	    NOT_COVERED == (this+baseCoverage).get_coverage  (buffer->info[j - 1].codepoint))
  ------------------
  |  |   37|   574k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (138:6): [True: 543k, False: 31.5k]
  ------------------
  139|   543k|	  match = skippy_iter.SKIP;
  140|   810k|      }
  141|   841k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (141:11): [True: 267k, False: 574k]
  ------------------
  142|   267k|      {
  143|   267k|	c->last_base = (signed) j - 1;
  144|   267k|	break;
  145|   267k|      }
  146|   841k|    }
  147|   920k|    c->last_base_until = buffer->idx;
  148|   920k|    if (c->last_base == -1)
  ------------------
  |  Branch (148:9): [True: 26.0k, False: 894k]
  ------------------
  149|  26.0k|    {
  150|  26.0k|      buffer->unsafe_to_concat_from_outbuffer (0, buffer->idx + 1);
  151|  26.0k|      return_trace (false);
  ------------------
  |  |  349|  26.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  26.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  152|  26.0k|    }
  153|       |
  154|   894k|    unsigned idx = (unsigned) c->last_base;
  155|       |
  156|       |    /* Checking that matched glyph is actually a base glyph by GDEF is too strong; disabled */
  157|       |    //if (!_hb_glyph_info_is_base_glyph (&buffer->info[idx])) { return_trace (false); }
  158|       |
  159|   894k|    unsigned int base_index = (this+baseCoverage).get_coverage  (buffer->info[idx].codepoint);
  160|   894k|    if (base_index == NOT_COVERED)
  ------------------
  |  |   37|   894k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (160:9): [True: 829k, False: 64.9k]
  ------------------
  161|   829k|    {
  162|   829k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  163|   829k|      return_trace (false);
  ------------------
  |  |  349|   829k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   829k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  164|   829k|    }
  165|       |
  166|  64.9k|    return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, idx));
  ------------------
  |  |  349|  64.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  167|   894k|  }
_ZN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_10SmallTypesEE6acceptEP11hb_buffer_tj:
   94|   810k|  {
   95|       |    /* We only want to attach to the first of a MultipleSubst sequence.
   96|       |     * https://github.com/harfbuzz/harfbuzz/issues/740
   97|       |     * Reject others...
   98|       |     * ...but stop if we find a mark in the MultipleSubst sequence:
   99|       |     * https://github.com/harfbuzz/harfbuzz/issues/1020 */
  100|   810k|    return !_hb_glyph_info_multiplied (&buffer->info[idx]) ||
  ------------------
  |  Branch (100:12): [True: 64.4k, False: 745k]
  ------------------
  101|   810k|	   0 == _hb_glyph_info_get_lig_comp (&buffer->info[idx]) ||
  ------------------
  |  Branch (101:5): [True: 134k, False: 611k]
  ------------------
  102|   810k|	   (idx == 0 ||
  ------------------
  |  Branch (102:6): [True: 192, False: 610k]
  ------------------
  103|   611k|	    _hb_glyph_info_is_mark (&buffer->info[idx - 1]) ||
  ------------------
  |  Branch (103:6): [True: 11.3k, False: 599k]
  ------------------
  104|   611k|	    !_hb_glyph_info_multiplied (&buffer->info[idx - 1]) ||
  ------------------
  |  Branch (104:6): [True: 18.2k, False: 581k]
  ------------------
  105|   611k|	    _hb_glyph_info_get_lig_id (&buffer->info[idx]) !=
  ------------------
  |  Branch (105:6): [True: 653, False: 580k]
  ------------------
  106|   581k|	    _hb_glyph_info_get_lig_id (&buffer->info[idx - 1]) ||
  107|   611k|	    _hb_glyph_info_get_lig_comp (&buffer->info[idx]) !=
  ------------------
  |  Branch (107:6): [True: 5.78k, False: 574k]
  ------------------
  108|   580k|	    _hb_glyph_info_get_lig_comp (&buffer->info[idx - 1]) + 1
  109|   611k|	    );
  110|   810k|  }
_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  113|   728k|  {
  114|   728k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   728k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  115|   728k|    hb_buffer_t *buffer = c->buffer;
  116|   728k|    unsigned int mark_index = (this+markCoverage).get_coverage  (buffer->cur().codepoint);
  117|   728k|    if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   728k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 178k, False: 550k]
  |  |  ------------------
  ------------------
                  if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   178k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   178k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  118|       |
  119|       |    /* Now we search backwards for a non-mark glyph.
  120|       |     * We don't use skippy_iter.prev() to avoid O(n^2) behavior. */
  121|       |
  122|   550k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  123|   550k|    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
  124|       |
  125|   550k|    if (c->last_base_until > buffer->idx)
  ------------------
  |  Branch (125:9): [True: 1.90k, False: 548k]
  ------------------
  126|  1.90k|    {
  127|  1.90k|      c->last_base_until = 0;
  128|  1.90k|      c->last_base = -1;
  129|  1.90k|    }
  130|   550k|    unsigned j;
  131|   876k|    for (j = buffer->idx; j > c->last_base_until; j--)
  ------------------
  |  Branch (131:27): [True: 641k, False: 234k]
  ------------------
  132|   641k|    {
  133|   641k|      auto match = skippy_iter.match (buffer->info[j - 1]);
  134|   641k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (134:11): [True: 520k, False: 120k]
  ------------------
  135|   520k|      {
  136|       |        // https://github.com/harfbuzz/harfbuzz/issues/4124
  137|   520k|	if (!accept (buffer, j - 1) &&
  ------------------
  |  Branch (137:6): [True: 230k, False: 289k]
  |  Branch (137:6): [True: 204k, False: 315k]
  ------------------
  138|   520k|	    NOT_COVERED == (this+baseCoverage).get_coverage  (buffer->info[j - 1].codepoint))
  ------------------
  |  |   37|   230k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (138:6): [True: 204k, False: 25.7k]
  ------------------
  139|   204k|	  match = skippy_iter.SKIP;
  140|   520k|      }
  141|   641k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (141:11): [True: 315k, False: 325k]
  ------------------
  142|   315k|      {
  143|   315k|	c->last_base = (signed) j - 1;
  144|   315k|	break;
  145|   315k|      }
  146|   641k|    }
  147|   550k|    c->last_base_until = buffer->idx;
  148|   550k|    if (c->last_base == -1)
  ------------------
  |  Branch (148:9): [True: 5.28k, False: 545k]
  ------------------
  149|  5.28k|    {
  150|  5.28k|      buffer->unsafe_to_concat_from_outbuffer (0, buffer->idx + 1);
  151|  5.28k|      return_trace (false);
  ------------------
  |  |  349|  5.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  152|  5.28k|    }
  153|       |
  154|   545k|    unsigned idx = (unsigned) c->last_base;
  155|       |
  156|       |    /* Checking that matched glyph is actually a base glyph by GDEF is too strong; disabled */
  157|       |    //if (!_hb_glyph_info_is_base_glyph (&buffer->info[idx])) { return_trace (false); }
  158|       |
  159|   545k|    unsigned int base_index = (this+baseCoverage).get_coverage  (buffer->info[idx].codepoint);
  160|   545k|    if (base_index == NOT_COVERED)
  ------------------
  |  |   37|   545k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (160:9): [True: 503k, False: 41.5k]
  ------------------
  161|   503k|    {
  162|   503k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  163|   503k|      return_trace (false);
  ------------------
  |  |  349|   503k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   503k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  164|   503k|    }
  165|       |
  166|  41.5k|    return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, idx));
  ------------------
  |  |  349|  41.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  167|   545k|  }
_ZN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_11MediumTypesEE6acceptEP11hb_buffer_tj:
   94|   520k|  {
   95|       |    /* We only want to attach to the first of a MultipleSubst sequence.
   96|       |     * https://github.com/harfbuzz/harfbuzz/issues/740
   97|       |     * Reject others...
   98|       |     * ...but stop if we find a mark in the MultipleSubst sequence:
   99|       |     * https://github.com/harfbuzz/harfbuzz/issues/1020 */
  100|   520k|    return !_hb_glyph_info_multiplied (&buffer->info[idx]) ||
  ------------------
  |  Branch (100:12): [True: 84.7k, False: 435k]
  ------------------
  101|   520k|	   0 == _hb_glyph_info_get_lig_comp (&buffer->info[idx]) ||
  ------------------
  |  Branch (101:5): [True: 130k, False: 305k]
  ------------------
  102|   520k|	   (idx == 0 ||
  ------------------
  |  Branch (102:6): [True: 189, False: 304k]
  ------------------
  103|   305k|	    _hb_glyph_info_is_mark (&buffer->info[idx - 1]) ||
  ------------------
  |  Branch (103:6): [True: 38.7k, False: 266k]
  ------------------
  104|   305k|	    !_hb_glyph_info_multiplied (&buffer->info[idx - 1]) ||
  ------------------
  |  Branch (104:6): [True: 11.9k, False: 254k]
  ------------------
  105|   305k|	    _hb_glyph_info_get_lig_id (&buffer->info[idx]) !=
  ------------------
  |  Branch (105:6): [True: 1.21k, False: 252k]
  ------------------
  106|   254k|	    _hb_glyph_info_get_lig_id (&buffer->info[idx - 1]) ||
  107|   305k|	    _hb_glyph_info_get_lig_comp (&buffer->info[idx]) !=
  ------------------
  |  Branch (107:6): [True: 22.4k, False: 230k]
  ------------------
  108|   252k|	    _hb_glyph_info_get_lig_comp (&buffer->info[idx - 1]) + 1
  109|   305k|	    );
  110|   520k|  }
_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   38|  9.08k|  {
   39|  9.08k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.08k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   40|  9.08k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  72.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.01k, False: 70]
  |  |  |  Branch (349:45): [True: 8.98k, False: 22]
  |  |  |  Branch (349:45): [True: 8.97k, False: 18]
  |  |  |  Branch (349:45): [True: 8.87k, False: 94]
  |  |  |  Branch (349:45): [True: 8.83k, False: 45]
  |  |  ------------------
  ------------------
   41|  9.08k|                  markCoverage.sanitize (c, this) &&
   42|  9.08k|                  baseCoverage.sanitize (c, this) &&
   43|  9.08k|                  markArray.sanitize (c, this) &&
   44|  9.08k|                  baseArray.sanitize (c, this, (unsigned int) classCount));
   45|  9.08k|  }
_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   38|  7.33k|  {
   39|  7.33k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.33k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   40|  7.33k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  58.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.25k, False: 81]
  |  |  |  Branch (349:45): [True: 7.22k, False: 23]
  |  |  |  Branch (349:45): [True: 7.20k, False: 26]
  |  |  |  Branch (349:45): [True: 7.18k, False: 13]
  |  |  |  Branch (349:45): [True: 7.17k, False: 11]
  |  |  ------------------
  ------------------
   41|  7.33k|                  markCoverage.sanitize (c, this) &&
   42|  7.33k|                  baseCoverage.sanitize (c, this) &&
   43|  7.33k|                  markArray.sanitize (c, this) &&
   44|  7.33k|                  baseArray.sanitize (c, this, (unsigned int) classCount));
   45|  7.33k|  }
_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   91|  1.56k|  const Coverage &get_coverage () const { return this+markCoverage; }
_ZNK2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   91|  1.06k|  const Coverage &get_coverage () const { return this+markCoverage; }

_ZNK2OT6Layout9GPOS_impl10MarkLigPos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   24|   113k|  {
   25|   113k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   113k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.38k, False: 110k]
  |  |  ------------------
  ------------------
   26|   110k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   110k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|   110k|    switch (u.format) {
   28|  7.12k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 7.12k, False: 103k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|  6.53k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.53k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.53k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 6.53k, False: 103k]
  ------------------
   31|      0|#endif
   32|  96.6k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  96.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  96.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 96.6k, False: 13.6k]
  ------------------
   33|   110k|    }
   34|   110k|  }
_ZNK2OT6Layout9GPOS_impl10MarkLigPos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   24|  16.2k|  {
   25|  16.2k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  16.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 16.2k]
  |  |  ------------------
  ------------------
   26|  16.2k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  16.2k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|  16.2k|    switch (u.format) {
   28|  1.01k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.01k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.01k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 1.01k, False: 15.2k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|    990|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    990|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    990|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 990, False: 15.3k]
  ------------------
   31|      0|#endif
   32|  14.2k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 14.2k, False: 2.00k]
  ------------------
   33|  16.2k|    }
   34|  16.2k|  }

_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   96|   194k|  {
   97|   194k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   194k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   98|   194k|    hb_buffer_t *buffer = c->buffer;
   99|   194k|    unsigned int mark_index = (this+markCoverage).get_coverage  (buffer->cur().codepoint);
  100|   194k|    if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   194k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 161k]
  |  |  ------------------
  ------------------
                  if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  32.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  101|       |
  102|       |    /* Now we search backwards for a non-mark glyph */
  103|       |
  104|   161k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  105|   161k|    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
  106|       |
  107|   161k|    if (c->last_base_until > buffer->idx)
  ------------------
  |  Branch (107:9): [True: 3.98k, False: 157k]
  ------------------
  108|  3.98k|    {
  109|  3.98k|      c->last_base_until = 0;
  110|  3.98k|      c->last_base = -1;
  111|  3.98k|    }
  112|   161k|    unsigned j;
  113|   161k|    for (j = buffer->idx; j > c->last_base_until; j--)
  ------------------
  |  Branch (113:27): [True: 53.2k, False: 108k]
  ------------------
  114|  53.2k|    {
  115|  53.2k|      auto match = skippy_iter.match (buffer->info[j - 1]);
  116|  53.2k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (116:11): [True: 52.5k, False: 678]
  ------------------
  117|  52.5k|      {
  118|  52.5k|	c->last_base = (signed) j - 1;
  119|  52.5k|	break;
  120|  52.5k|      }
  121|  53.2k|    }
  122|   161k|    c->last_base_until = buffer->idx;
  123|   161k|    if (c->last_base == -1)
  ------------------
  |  Branch (123:9): [True: 41.9k, False: 119k]
  ------------------
  124|  41.9k|    {
  125|  41.9k|      buffer->unsafe_to_concat_from_outbuffer (0, buffer->idx + 1);
  126|  41.9k|      return_trace (false);
  ------------------
  |  |  349|  41.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  127|  41.9k|    }
  128|       |
  129|   119k|    unsigned idx = (unsigned) c->last_base;
  130|       |
  131|       |    /* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */
  132|       |    //if (!_hb_glyph_info_is_ligature (&buffer->info[idx])) { return_trace (false); }
  133|       |
  134|   119k|    unsigned int lig_index = (this+ligatureCoverage).get_coverage  (buffer->info[idx].codepoint);
  135|   119k|    if (lig_index == NOT_COVERED)
  ------------------
  |  |   37|   119k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (135:9): [True: 88.6k, False: 30.6k]
  ------------------
  136|  88.6k|    {
  137|  88.6k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  138|  88.6k|      return_trace (false);
  ------------------
  |  |  349|  88.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  88.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  139|  88.6k|    }
  140|       |
  141|  30.6k|    const LigatureArray& lig_array = this+ligatureArray;
  142|  30.6k|    const LigatureAttach& lig_attach = lig_array[lig_index];
  143|       |
  144|       |    /* Find component to attach to */
  145|  30.6k|    unsigned int comp_count = lig_attach.rows;
  146|  30.6k|    if (unlikely (!comp_count))
  ------------------
  |  |  259|  30.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 27.9k, False: 2.74k]
  |  |  ------------------
  ------------------
  147|  27.9k|    {
  148|  27.9k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  149|  27.9k|      return_trace (false);
  ------------------
  |  |  349|  27.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  27.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  150|  27.9k|    }
  151|       |
  152|       |    /* We must now check whether the ligature ID of the current mark glyph
  153|       |     * is identical to the ligature ID of the found ligature.  If yes, we
  154|       |     * can directly use the component index.  If not, we attach the mark
  155|       |     * glyph to the last component of the ligature. */
  156|  2.74k|    unsigned int comp_index;
  157|  2.74k|    unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[idx]);
  158|  2.74k|    unsigned int mark_id = _hb_glyph_info_get_lig_id (&buffer->cur());
  159|  2.74k|    unsigned int mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
  160|  2.74k|    if (lig_id && lig_id == mark_id && mark_comp > 0)
  ------------------
  |  Branch (160:9): [True: 760, False: 1.98k]
  |  Branch (160:19): [True: 95, False: 665]
  |  Branch (160:40): [True: 92, False: 3]
  ------------------
  161|     92|      comp_index = hb_min (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1;
  162|  2.65k|    else
  163|  2.65k|      comp_index = comp_count - 1;
  164|       |
  165|  2.74k|    return_trace ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, idx));
  ------------------
  |  |  349|  2.74k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.74k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  166|  30.6k|  }
_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   96|   125k|  {
   97|   125k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   125k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   98|   125k|    hb_buffer_t *buffer = c->buffer;
   99|   125k|    unsigned int mark_index = (this+markCoverage).get_coverage  (buffer->cur().codepoint);
  100|   125k|    if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   125k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 7.66k, False: 117k]
  |  |  ------------------
  ------------------
                  if (likely (mark_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  7.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  101|       |
  102|       |    /* Now we search backwards for a non-mark glyph */
  103|       |
  104|   117k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  105|   117k|    skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
  106|       |
  107|   117k|    if (c->last_base_until > buffer->idx)
  ------------------
  |  Branch (107:9): [True: 7.34k, False: 110k]
  ------------------
  108|  7.34k|    {
  109|  7.34k|      c->last_base_until = 0;
  110|  7.34k|      c->last_base = -1;
  111|  7.34k|    }
  112|   117k|    unsigned j;
  113|   118k|    for (j = buffer->idx; j > c->last_base_until; j--)
  ------------------
  |  Branch (113:27): [True: 15.6k, False: 102k]
  ------------------
  114|  15.6k|    {
  115|  15.6k|      auto match = skippy_iter.match (buffer->info[j - 1]);
  116|  15.6k|      if (match == skippy_iter.MATCH)
  ------------------
  |  Branch (116:11): [True: 15.2k, False: 448]
  ------------------
  117|  15.2k|      {
  118|  15.2k|	c->last_base = (signed) j - 1;
  119|  15.2k|	break;
  120|  15.2k|      }
  121|  15.6k|    }
  122|   117k|    c->last_base_until = buffer->idx;
  123|   117k|    if (c->last_base == -1)
  ------------------
  |  Branch (123:9): [True: 7.77k, False: 110k]
  ------------------
  124|  7.77k|    {
  125|  7.77k|      buffer->unsafe_to_concat_from_outbuffer (0, buffer->idx + 1);
  126|  7.77k|      return_trace (false);
  ------------------
  |  |  349|  7.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  127|  7.77k|    }
  128|       |
  129|   110k|    unsigned idx = (unsigned) c->last_base;
  130|       |
  131|       |    /* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */
  132|       |    //if (!_hb_glyph_info_is_ligature (&buffer->info[idx])) { return_trace (false); }
  133|       |
  134|   110k|    unsigned int lig_index = (this+ligatureCoverage).get_coverage  (buffer->info[idx].codepoint);
  135|   110k|    if (lig_index == NOT_COVERED)
  ------------------
  |  |   37|   110k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (135:9): [True: 48.8k, False: 61.2k]
  ------------------
  136|  48.8k|    {
  137|  48.8k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  138|  48.8k|      return_trace (false);
  ------------------
  |  |  349|  48.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  48.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  139|  48.8k|    }
  140|       |
  141|  61.2k|    const LigatureArray& lig_array = this+ligatureArray;
  142|  61.2k|    const LigatureAttach& lig_attach = lig_array[lig_index];
  143|       |
  144|       |    /* Find component to attach to */
  145|  61.2k|    unsigned int comp_count = lig_attach.rows;
  146|  61.2k|    if (unlikely (!comp_count))
  ------------------
  |  |  259|  61.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12.5k, False: 48.6k]
  |  |  ------------------
  ------------------
  147|  12.5k|    {
  148|  12.5k|      buffer->unsafe_to_concat_from_outbuffer (idx, buffer->idx + 1);
  149|  12.5k|      return_trace (false);
  ------------------
  |  |  349|  12.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  150|  12.5k|    }
  151|       |
  152|       |    /* We must now check whether the ligature ID of the current mark glyph
  153|       |     * is identical to the ligature ID of the found ligature.  If yes, we
  154|       |     * can directly use the component index.  If not, we attach the mark
  155|       |     * glyph to the last component of the ligature. */
  156|  48.6k|    unsigned int comp_index;
  157|  48.6k|    unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[idx]);
  158|  48.6k|    unsigned int mark_id = _hb_glyph_info_get_lig_id (&buffer->cur());
  159|  48.6k|    unsigned int mark_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
  160|  48.6k|    if (lig_id && lig_id == mark_id && mark_comp > 0)
  ------------------
  |  Branch (160:9): [True: 0, False: 48.6k]
  |  Branch (160:19): [True: 0, False: 0]
  |  Branch (160:40): [True: 0, False: 0]
  ------------------
  161|      0|      comp_index = hb_min (comp_count, _hb_glyph_info_get_lig_comp (&buffer->cur())) - 1;
  162|  48.6k|    else
  163|  48.6k|      comp_index = comp_count - 1;
  164|       |
  165|  48.6k|    return_trace ((this+markArray).apply (c, mark_index, comp_index, lig_attach, classCount, idx));
  ------------------
  |  |  349|  48.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  48.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  166|  61.2k|  }
_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   34|  7.12k|  {
   35|  7.12k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.12k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   36|  7.12k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  56.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.00k, False: 117]
  |  |  |  Branch (349:45): [True: 6.99k, False: 8]
  |  |  |  Branch (349:45): [True: 6.98k, False: 11]
  |  |  |  Branch (349:45): [True: 6.96k, False: 24]
  |  |  |  Branch (349:45): [True: 6.90k, False: 58]
  |  |  ------------------
  ------------------
   37|  7.12k|                  markCoverage.sanitize (c, this) &&
   38|  7.12k|                  ligatureCoverage.sanitize (c, this) &&
   39|  7.12k|                  markArray.sanitize (c, this) &&
   40|  7.12k|                  ligatureArray.sanitize (c, this, (unsigned int) classCount));
   41|  7.12k|  }
_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   34|  6.53k|  {
   35|  6.53k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.53k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   36|  6.53k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  51.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.53k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.45k, False: 87]
  |  |  |  Branch (349:45): [True: 6.43k, False: 19]
  |  |  |  Branch (349:45): [True: 6.41k, False: 17]
  |  |  |  Branch (349:45): [True: 6.40k, False: 14]
  |  |  |  Branch (349:45): [True: 6.38k, False: 18]
  |  |  ------------------
  ------------------
   37|  6.53k|                  markCoverage.sanitize (c, this) &&
   38|  6.53k|                  ligatureCoverage.sanitize (c, this) &&
   39|  6.53k|                  markArray.sanitize (c, this) &&
   40|  6.53k|                  ligatureArray.sanitize (c, this, (unsigned int) classCount));
   41|  6.53k|  }
_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   93|  1.01k|  const Coverage &get_coverage () const { return this+markCoverage; }
_ZNK2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   93|    990|  const Coverage &get_coverage () const { return this+markCoverage; }

_ZNK2OT6Layout9GPOS_impl11MarkMarkPos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   24|  87.0k|  {
   25|  87.0k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  87.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.58k, False: 83.4k]
  |  |  ------------------
  ------------------
   26|  83.4k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  83.4k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|  83.4k|    switch (u.format) {
   28|  7.82k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 7.82k, False: 75.6k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|  8.82k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 8.82k, False: 74.6k]
  ------------------
   31|      0|#endif
   32|  66.7k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  66.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  66.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 66.7k, False: 16.6k]
  ------------------
   33|  83.4k|    }
   34|  83.4k|  }
_ZNK2OT6Layout9GPOS_impl11MarkMarkPos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   24|  20.0k|  {
   25|  20.0k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  20.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 20.0k]
  |  |  ------------------
  ------------------
   26|  20.0k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  20.0k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   27|  20.0k|    switch (u.format) {
   28|  1.03k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 1.03k, False: 18.9k]
  ------------------
   29|      0|#ifndef HB_NO_BEYOND_64K
   30|  1.76k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.76k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.76k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 1.76k, False: 18.2k]
  ------------------
   31|      0|#endif
   32|  17.2k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  17.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 17.2k, False: 2.80k]
  ------------------
   33|  20.0k|    }
   34|  20.0k|  }

_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   95|   176k|  {
   96|   176k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   176k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   97|   176k|    hb_buffer_t *buffer = c->buffer;
   98|   176k|    unsigned int mark1_index = (this+mark1Coverage).get_coverage  (buffer->cur().codepoint);
   99|   176k|    if (likely (mark1_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   176k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 14.2k, False: 162k]
  |  |  ------------------
  ------------------
                  if (likely (mark1_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  100|       |
  101|       |    /* now we search backwards for a suitable mark glyph until a non-mark glyph */
  102|   162k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  103|   162k|    skippy_iter.reset_fast (buffer->idx, 1);
  104|   162k|    skippy_iter.set_lookup_props (c->lookup_props & ~(uint32_t)LookupFlag::IgnoreFlags);
  105|   162k|    unsigned unsafe_from;
  106|   162k|    if (unlikely (!skippy_iter.prev (&unsafe_from)))
  ------------------
  |  |  259|   162k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15.7k, False: 146k]
  |  |  ------------------
  ------------------
  107|  15.7k|    {
  108|  15.7k|      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
  109|  15.7k|      return_trace (false);
  ------------------
  |  |  349|  15.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  110|  15.7k|    }
  111|       |
  112|   146k|    if (likely (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])))
  ------------------
  |  |  258|   146k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 110k, False: 36.2k]
  |  |  ------------------
  ------------------
  113|   110k|    {
  114|   110k|      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  115|   110k|      return_trace (false);
  ------------------
  |  |  349|   110k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   110k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  116|   110k|    }
  117|       |
  118|  36.2k|    unsigned int j = skippy_iter.idx;
  119|       |
  120|  36.2k|    unsigned int id1 = _hb_glyph_info_get_lig_id (&buffer->cur());
  121|  36.2k|    unsigned int id2 = _hb_glyph_info_get_lig_id (&buffer->info[j]);
  122|  36.2k|    unsigned int comp1 = _hb_glyph_info_get_lig_comp (&buffer->cur());
  123|  36.2k|    unsigned int comp2 = _hb_glyph_info_get_lig_comp (&buffer->info[j]);
  124|       |
  125|  36.2k|    if (likely (id1 == id2))
  ------------------
  |  |  258|  36.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 13.9k, False: 22.2k]
  |  |  ------------------
  ------------------
  126|  13.9k|    {
  127|  13.9k|      if (id1 == 0) /* Marks belonging to the same base. */
  ------------------
  |  Branch (127:11): [True: 9.13k, False: 4.84k]
  ------------------
  128|  9.13k|        goto good;
  129|  4.84k|      else if (comp1 == comp2) /* Marks belonging to the same ligature component. */
  ------------------
  |  Branch (129:16): [True: 1.73k, False: 3.10k]
  ------------------
  130|  1.73k|        goto good;
  131|  13.9k|    }
  132|  22.2k|    else
  133|  22.2k|    {
  134|       |      /* If ligature ids don't match, it may be the case that one of the marks
  135|       |       * itself is a ligature.  In which case match. */
  136|  22.2k|      if ((id1 > 0 && !comp1) || (id2 > 0 && !comp2))
  ------------------
  |  Branch (136:12): [True: 15.2k, False: 6.99k]
  |  Branch (136:23): [True: 15.2k, False: 0]
  |  Branch (136:35): [True: 6.99k, False: 0]
  |  Branch (136:46): [True: 1.29k, False: 5.69k]
  ------------------
  137|  16.5k|        goto good;
  138|  22.2k|    }
  139|       |
  140|       |    /* Didn't match. */
  141|  8.79k|    buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  142|  8.79k|    return_trace (false);
  ------------------
  |  |  349|  8.79k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.79k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  143|       |
  144|  27.4k|    good:
  145|  27.4k|    unsigned int mark2_index = (this+mark2Coverage).get_coverage  (buffer->info[j].codepoint);
  146|  27.4k|    if (mark2_index == NOT_COVERED)
  ------------------
  |  |   37|  27.4k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (146:9): [True: 21.9k, False: 5.51k]
  ------------------
  147|  21.9k|    {
  148|  21.9k|      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  149|  21.9k|      return_trace (false);
  ------------------
  |  |  349|  21.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  150|  21.9k|    }
  151|       |
  152|  5.51k|    return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
  ------------------
  |  |  349|  5.51k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.51k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|  27.4k|  }
_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   95|  55.7k|  {
   96|  55.7k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  55.7k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   97|  55.7k|    hb_buffer_t *buffer = c->buffer;
   98|  55.7k|    unsigned int mark1_index = (this+mark1Coverage).get_coverage  (buffer->cur().codepoint);
   99|  55.7k|    if (likely (mark1_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  55.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 9.11k, False: 46.6k]
  |  |  ------------------
  ------------------
                  if (likely (mark1_index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  9.11k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.11k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  100|       |
  101|       |    /* now we search backwards for a suitable mark glyph until a non-mark glyph */
  102|  46.6k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  103|  46.6k|    skippy_iter.reset_fast (buffer->idx, 1);
  104|  46.6k|    skippy_iter.set_lookup_props (c->lookup_props & ~(uint32_t)LookupFlag::IgnoreFlags);
  105|  46.6k|    unsigned unsafe_from;
  106|  46.6k|    if (unlikely (!skippy_iter.prev (&unsafe_from)))
  ------------------
  |  |  259|  46.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.97k, False: 43.6k]
  |  |  ------------------
  ------------------
  107|  2.97k|    {
  108|  2.97k|      buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
  109|  2.97k|      return_trace (false);
  ------------------
  |  |  349|  2.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.97k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  110|  2.97k|    }
  111|       |
  112|  43.6k|    if (likely (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])))
  ------------------
  |  |  258|  43.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 29.7k, False: 13.8k]
  |  |  ------------------
  ------------------
  113|  29.7k|    {
  114|  29.7k|      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  115|  29.7k|      return_trace (false);
  ------------------
  |  |  349|  29.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  116|  29.7k|    }
  117|       |
  118|  13.8k|    unsigned int j = skippy_iter.idx;
  119|       |
  120|  13.8k|    unsigned int id1 = _hb_glyph_info_get_lig_id (&buffer->cur());
  121|  13.8k|    unsigned int id2 = _hb_glyph_info_get_lig_id (&buffer->info[j]);
  122|  13.8k|    unsigned int comp1 = _hb_glyph_info_get_lig_comp (&buffer->cur());
  123|  13.8k|    unsigned int comp2 = _hb_glyph_info_get_lig_comp (&buffer->info[j]);
  124|       |
  125|  13.8k|    if (likely (id1 == id2))
  ------------------
  |  |  258|  13.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 12.5k, False: 1.33k]
  |  |  ------------------
  ------------------
  126|  12.5k|    {
  127|  12.5k|      if (id1 == 0) /* Marks belonging to the same base. */
  ------------------
  |  Branch (127:11): [True: 11.2k, False: 1.28k]
  ------------------
  128|  11.2k|        goto good;
  129|  1.28k|      else if (comp1 == comp2) /* Marks belonging to the same ligature component. */
  ------------------
  |  Branch (129:16): [True: 1.01k, False: 267]
  ------------------
  130|  1.01k|        goto good;
  131|  12.5k|    }
  132|  1.33k|    else
  133|  1.33k|    {
  134|       |      /* If ligature ids don't match, it may be the case that one of the marks
  135|       |       * itself is a ligature.  In which case match. */
  136|  1.33k|      if ((id1 > 0 && !comp1) || (id2 > 0 && !comp2))
  ------------------
  |  Branch (136:12): [True: 894, False: 436]
  |  Branch (136:23): [True: 894, False: 0]
  |  Branch (136:35): [True: 436, False: 0]
  |  Branch (136:46): [True: 97, False: 339]
  ------------------
  137|    991|        goto good;
  138|  1.33k|    }
  139|       |
  140|       |    /* Didn't match. */
  141|    606|    buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  142|    606|    return_trace (false);
  ------------------
  |  |  349|    606|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    606|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  143|       |
  144|  13.2k|    good:
  145|  13.2k|    unsigned int mark2_index = (this+mark2Coverage).get_coverage  (buffer->info[j].codepoint);
  146|  13.2k|    if (mark2_index == NOT_COVERED)
  ------------------
  |  |   37|  13.2k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (146:9): [True: 10.2k, False: 2.99k]
  ------------------
  147|  10.2k|    {
  148|  10.2k|      buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
  149|  10.2k|      return_trace (false);
  ------------------
  |  |  349|  10.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  150|  10.2k|    }
  151|       |
  152|  2.99k|    return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
  ------------------
  |  |  349|  2.99k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.99k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|  13.2k|  }
_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   39|  7.82k|  {
   40|  7.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   41|  7.82k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  62.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.74k, False: 76]
  |  |  |  Branch (349:45): [True: 7.72k, False: 18]
  |  |  |  Branch (349:45): [True: 7.71k, False: 14]
  |  |  |  Branch (349:45): [True: 7.66k, False: 50]
  |  |  |  Branch (349:45): [True: 7.62k, False: 33]
  |  |  ------------------
  ------------------
   42|  7.82k|                  mark1Coverage.sanitize (c, this) &&
   43|  7.82k|                  mark2Coverage.sanitize (c, this) &&
   44|  7.82k|                  mark1Array.sanitize (c, this) &&
   45|  7.82k|                  mark2Array.sanitize (c, this, (unsigned int) classCount));
   46|  7.82k|  }
_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   39|  8.82k|  {
   40|  8.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   41|  8.82k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  70.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.73k, False: 96]
  |  |  |  Branch (349:45): [True: 8.70k, False: 25]
  |  |  |  Branch (349:45): [True: 8.69k, False: 14]
  |  |  |  Branch (349:45): [True: 8.67k, False: 15]
  |  |  |  Branch (349:45): [True: 8.66k, False: 16]
  |  |  ------------------
  ------------------
   42|  8.82k|                  mark1Coverage.sanitize (c, this) &&
   43|  8.82k|                  mark2Coverage.sanitize (c, this) &&
   44|  8.82k|                  mark1Array.sanitize (c, this) &&
   45|  8.82k|                  mark2Array.sanitize (c, this, (unsigned int) classCount));
   46|  8.82k|  }
_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   92|  1.03k|  const Coverage &get_coverage () const { return this+mark1Coverage; }
_ZNK2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   92|  1.76k|  const Coverage &get_coverage () const { return this+mark1Coverage; }

_ZNK2OT6Layout9GPOS_impl10MarkRecord8sanitizeEP21hb_sanitize_context_tPKv:
   22|  11.0M|  {
   23|  11.0M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.0M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   24|  11.0M|    return_trace (c->check_struct (this) && markAnchor.sanitize (c, base));
  ------------------
  |  |  349|  22.0M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.0M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.0M, False: 10]
  |  |  |  Branch (349:45): [True: 11.0M, False: 121]
  |  |  ------------------
  ------------------
   25|  11.0M|  }

_ZNK2OT6Layout9GPOS_impl7PairPos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   27|   121k|  {
   28|   121k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   121k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.3k, False: 108k]
  |  |  ------------------
  ------------------
   29|   108k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   108k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   30|   108k|    switch (u.format) {
   31|  14.5k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  14.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 14.5k, False: 93.8k]
  ------------------
   32|  10.9k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 10.9k, False: 97.4k]
  ------------------
   33|      0|#ifndef HB_NO_BEYOND_64K
   34|  4.05k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 4.05k, False: 104k]
  ------------------
   35|  5.49k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.49k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.49k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (35:5): [True: 5.49k, False: 102k]
  ------------------
   36|      0|#endif
   37|  73.3k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  73.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  73.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (37:5): [True: 73.3k, False: 35.1k]
  ------------------
   38|   108k|    }
   39|   108k|  }
_ZNK2OT6Layout9GPOS_impl7PairPos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   27|  35.0k|  {
   28|  35.0k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  35.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 35.0k]
  |  |  ------------------
  ------------------
   29|  35.0k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  35.0k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   30|  35.0k|    switch (u.format) {
   31|  2.23k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.23k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.23k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 2.23k, False: 32.7k]
  ------------------
   32|    954|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    954|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    954|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 954, False: 34.0k]
  ------------------
   33|      0|#ifndef HB_NO_BEYOND_64K
   34|    625|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    625|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    625|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 625, False: 34.3k]
  ------------------
   35|    790|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    790|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    790|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (35:5): [True: 790, False: 34.2k]
  ------------------
   36|      0|#endif
   37|  30.4k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  30.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  30.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (37:5): [True: 30.4k, False: 4.60k]
  ------------------
   38|  35.0k|    }
   39|  35.0k|  }

_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  106|  4.32M|  {
  107|  4.32M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  4.32M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  108|  4.32M|    hb_buffer_t *buffer = c->buffer;
  109|  4.32M|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
  110|  4.32M|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  4.32M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.86M, False: 2.46M]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  1.86M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.86M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  111|       |
  112|  2.46M|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  113|  2.46M|    skippy_iter.reset_fast (buffer->idx, 1);
  114|  2.46M|    unsigned unsafe_to;
  115|  2.46M|    if (unlikely (!skippy_iter.next (&unsafe_to)))
  ------------------
  |  |  259|  2.46M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47.8k, False: 2.41M]
  |  |  ------------------
  ------------------
  116|  47.8k|    {
  117|  47.8k|      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
  118|  47.8k|      return_trace (false);
  ------------------
  |  |  349|  47.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  119|  47.8k|    }
  120|       |
  121|  2.41M|    return_trace ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx));
  ------------------
  |  |  349|  2.41M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.41M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  122|  2.46M|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  106|   220k|  {
  107|   220k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   220k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  108|   220k|    hb_buffer_t *buffer = c->buffer;
  109|   220k|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
  110|   220k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   220k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 24.8k, False: 195k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  24.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  111|       |
  112|   195k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  113|   195k|    skippy_iter.reset_fast (buffer->idx, 1);
  114|   195k|    unsigned unsafe_to;
  115|   195k|    if (unlikely (!skippy_iter.next (&unsafe_to)))
  ------------------
  |  |  259|   195k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9.39k, False: 186k]
  |  |  ------------------
  ------------------
  116|  9.39k|    {
  117|  9.39k|      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
  118|  9.39k|      return_trace (false);
  ------------------
  |  |  349|  9.39k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.39k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  119|  9.39k|    }
  120|       |
  121|   186k|    return_trace ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx));
  ------------------
  |  |  349|   186k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   186k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  122|   195k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   35|  14.5k|  {
   36|  14.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   37|       |
   38|  14.5k|    if (!c->check_struct (this)) return_trace (false);
  ------------------
  |  |  349|    178|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    178|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (38:9): [True: 178, False: 14.3k]
  ------------------
   39|       |
   40|  14.3k|    unsigned int len1 = valueFormat[0].get_len ();
   41|  14.3k|    unsigned int len2 = valueFormat[1].get_len ();
   42|  14.3k|    typename PairSet::sanitize_closure_t closure =
   43|  14.3k|    {
   44|  14.3k|      valueFormat,
   45|  14.3k|      len1,
   46|  14.3k|      PairSet::get_size (len1, len2)
   47|  14.3k|    };
   48|       |
   49|  14.3k|    return_trace (coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure));
  ------------------
  |  |  349|  28.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 14.3k, False: 28]
  |  |  |  Branch (349:45): [True: 13.7k, False: 583]
  |  |  ------------------
  ------------------
   50|  14.5k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   35|  4.05k|  {
   36|  4.05k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.05k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   37|       |
   38|  4.05k|    if (!c->check_struct (this)) return_trace (false);
  ------------------
  |  |  349|     76|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     76|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (38:9): [True: 76, False: 3.98k]
  ------------------
   39|       |
   40|  3.98k|    unsigned int len1 = valueFormat[0].get_len ();
   41|  3.98k|    unsigned int len2 = valueFormat[1].get_len ();
   42|  3.98k|    typename PairSet::sanitize_closure_t closure =
   43|  3.98k|    {
   44|  3.98k|      valueFormat,
   45|  3.98k|      len1,
   46|  3.98k|      PairSet::get_size (len1, len2)
   47|  3.98k|    };
   48|       |
   49|  3.98k|    return_trace (coverage.sanitize (c, this) && pairSet.sanitize (c, this, &closure));
  ------------------
  |  |  349|  7.93k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.95k, False: 29]
  |  |  |  Branch (349:45): [True: 3.64k, False: 306]
  |  |  ------------------
  ------------------
   50|  4.05k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_10SmallTypesEE12get_coverageEv:
  103|  2.23k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat1_3INS0_11MediumTypesEE12get_coverageEv:
  103|    625|  const Coverage &get_coverage () const { return this+coverage; }

_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  126|  41.5k|  {
  127|  41.5k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  41.5k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  128|  41.5k|    hb_buffer_t *buffer = c->buffer;
  129|  41.5k|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
  130|  41.5k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  41.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.81k, False: 38.6k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  2.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.81k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  131|       |
  132|  38.6k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  133|  38.6k|    skippy_iter.reset_fast (buffer->idx, 1);
  134|  38.6k|    unsigned unsafe_to;
  135|  38.6k|    if (unlikely (!skippy_iter.next (&unsafe_to)))
  ------------------
  |  |  259|  38.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.9k, False: 24.7k]
  |  |  ------------------
  ------------------
  136|  13.9k|    {
  137|  13.9k|      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
  138|  13.9k|      return_trace (false);
  ------------------
  |  |  349|  13.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  139|  13.9k|    }
  140|       |
  141|  24.7k|    unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
  142|  24.7k|    if (!klass2)
  ------------------
  |  Branch (142:9): [True: 5.77k, False: 18.9k]
  ------------------
  143|  5.77k|    {
  144|  5.77k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  145|  5.77k|      return_trace (false);
  ------------------
  |  |  349|  5.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  146|  5.77k|    }
  147|       |
  148|  18.9k|    unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint);
  149|  18.9k|    if (unlikely (klass1 >= class1Count || klass2 >= class2Count))
  ------------------
  |  |  259|  36.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.75k, False: 16.1k]
  |  |  |  Branch (259:47): [True: 1.51k, False: 17.4k]
  |  |  |  Branch (259:47): [True: 1.24k, False: 16.1k]
  |  |  ------------------
  ------------------
  150|  2.75k|    {
  151|  2.75k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  152|  2.75k|      return_trace (false);
  ------------------
  |  |  349|  2.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.75k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|  2.75k|    }
  154|       |
  155|  16.1k|    unsigned int len1 = valueFormat1.get_len ();
  156|  16.1k|    unsigned int len2 = valueFormat2.get_len ();
  157|  16.1k|    unsigned int record_len = len1 + len2;
  158|       |
  159|  16.1k|    const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
  160|       |
  161|  16.1k|    bool applied_first = false, applied_second = false;
  162|       |
  163|       |
  164|       |    /* Isolate simple kerning and apply it half to each side.
  165|       |     * Results in better cursor positinoing / underline drawing.
  166|       |     *
  167|       |     * Disabled, because causes issues... :-(
  168|       |     * https://github.com/harfbuzz/harfbuzz/issues/3408
  169|       |     * https://github.com/harfbuzz/harfbuzz/pull/3235#issuecomment-1029814978
  170|       |     */
  171|  16.1k|#ifndef HB_SPLIT_KERN
  172|  16.1k|    if (false)
  ------------------
  |  Branch (172:9): [Folded - Ignored]
  ------------------
  173|      0|#endif
  174|      0|    {
  175|      0|      if (!len2)
  ------------------
  |  Branch (175:11): [True: 0, False: 0]
  ------------------
  176|      0|      {
  177|      0|        const hb_direction_t dir = buffer->props.direction;
  178|      0|        const bool horizontal = HB_DIRECTION_IS_HORIZONTAL (dir);
  ------------------
  |  |  271|      0|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  179|      0|        const bool backward = HB_DIRECTION_IS_BACKWARD (dir);
  ------------------
  |  |  298|      0|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  180|      0|        unsigned mask = horizontal ? ValueFormat::xAdvance : ValueFormat::yAdvance;
  ------------------
  |  Branch (180:25): [True: 0, False: 0]
  ------------------
  181|      0|        if (backward)
  ------------------
  |  Branch (181:13): [True: 0, False: 0]
  ------------------
  182|      0|          mask |= mask >> 2; /* Add eg. xPlacement in RTL. */
  183|       |        /* Add Devices. */
  184|      0|        mask |= mask << 4;
  185|       |
  186|      0|        if (valueFormat1 & ~mask)
  ------------------
  |  Branch (186:13): [True: 0, False: 0]
  ------------------
  187|      0|          goto bail;
  188|       |
  189|       |        /* Is simple kern. Apply value on an empty position slot,
  190|       |         * then split it between sides. */
  191|       |
  192|      0|        hb_glyph_position_t pos{};
  193|      0|        if (valueFormat1.apply_value (c, this, v, pos))
  ------------------
  |  Branch (193:13): [True: 0, False: 0]
  ------------------
  194|      0|        {
  195|      0|          hb_position_t *src  = &pos.x_advance;
  196|      0|          hb_position_t *dst1 = &buffer->cur_pos().x_advance;
  197|      0|          hb_position_t *dst2 = &buffer->pos[skippy_iter.idx].x_advance;
  198|      0|          unsigned i = horizontal ? 0 : 1;
  ------------------
  |  Branch (198:24): [True: 0, False: 0]
  ------------------
  199|       |
  200|      0|          hb_position_t kern  = src[i];
  201|      0|          hb_position_t kern1 = kern >> 1;
  202|      0|          hb_position_t kern2 = kern - kern1;
  203|       |
  204|      0|          if (!backward)
  ------------------
  |  Branch (204:15): [True: 0, False: 0]
  ------------------
  205|      0|          {
  206|      0|            dst1[i] += kern1;
  207|      0|            dst2[i] += kern2;
  208|      0|            dst2[i + 2] += kern2;
  209|      0|          }
  210|      0|          else
  211|      0|          {
  212|      0|            dst1[i] += kern1;
  213|      0|            dst1[i + 2] += src[i + 2] - kern2;
  214|      0|            dst2[i] += kern2;
  215|      0|          }
  216|       |
  217|      0|          applied_first = applied_second = kern != 0;
  218|      0|          goto success;
  219|      0|        }
  220|      0|        goto boring;
  221|      0|      }
  222|      0|    }
  223|  16.1k|    bail:
  224|       |
  225|  16.1k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  32.3k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  16.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (225:35): [True: 0, False: 16.1k]
  ------------------
  226|      0|    {
  227|      0|      c->buffer->message (c->font,
  228|      0|			  "try kerning glyphs at %u,%u",
  229|      0|			  c->buffer->idx, skippy_iter.idx);
  230|      0|    }
  231|       |
  232|  16.1k|    applied_first = len1 && valueFormat1.apply_value (c, this, v, buffer->cur_pos());
  ------------------
  |  Branch (232:21): [True: 14.8k, False: 1.31k]
  |  Branch (232:29): [True: 2.54k, False: 12.3k]
  ------------------
  233|  16.1k|    applied_second = len2 && valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
  ------------------
  |  Branch (233:22): [True: 15.6k, False: 563]
  |  Branch (233:30): [True: 10.4k, False: 5.20k]
  ------------------
  234|       |
  235|  16.1k|    if (applied_first || applied_second)
  ------------------
  |  Branch (235:9): [True: 2.54k, False: 13.6k]
  |  Branch (235:26): [True: 9.68k, False: 3.95k]
  ------------------
  236|  12.2k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  24.4k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  12.2k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (236:37): [True: 0, False: 12.2k]
  ------------------
  237|      0|      {
  238|      0|	c->buffer->message (c->font,
  239|      0|			    "kerned glyphs at %u,%u",
  240|      0|			    c->buffer->idx, skippy_iter.idx);
  241|      0|      }
  242|       |
  243|  16.1k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  32.3k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  16.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (243:35): [True: 0, False: 16.1k]
  ------------------
  244|      0|    {
  245|      0|      c->buffer->message (c->font,
  246|      0|			  "tried kerning glyphs at %u,%u",
  247|      0|			  c->buffer->idx, skippy_iter.idx);
  248|      0|    }
  249|       |
  250|  16.1k|    success:
  251|  16.1k|    if (applied_first || applied_second)
  ------------------
  |  Branch (251:9): [True: 2.54k, False: 13.6k]
  |  Branch (251:26): [True: 9.68k, False: 3.95k]
  ------------------
  252|  12.2k|      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
  253|  3.95k|    else
  254|  7.91k|    boring:
  255|  7.91k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  256|       |
  257|  16.1k|    if (len2)
  ------------------
  |  Branch (257:9): [True: 15.6k, False: 563]
  ------------------
  258|  15.6k|    {
  259|  15.6k|      skippy_iter.idx++;
  260|       |      // https://github.com/harfbuzz/harfbuzz/issues/3824
  261|       |      // https://github.com/harfbuzz/harfbuzz/issues/3888#issuecomment-1326781116
  262|  15.6k|      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
  263|  15.6k|    }
  264|       |
  265|  16.1k|    buffer->idx = skippy_iter.idx;
  266|       |
  267|  16.1k|    return_trace (true);
  ------------------
  |  |  349|  16.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  268|  16.1k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  126|   101k|  {
  127|   101k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   101k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  128|   101k|    hb_buffer_t *buffer = c->buffer;
  129|   101k|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
  130|   101k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   101k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 65.5k, False: 36.1k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  65.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  65.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  131|       |
  132|  36.1k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  133|  36.1k|    skippy_iter.reset_fast (buffer->idx, 1);
  134|  36.1k|    unsigned unsafe_to;
  135|  36.1k|    if (unlikely (!skippy_iter.next (&unsafe_to)))
  ------------------
  |  |  259|  36.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 417, False: 35.7k]
  |  |  ------------------
  ------------------
  136|    417|    {
  137|    417|      buffer->unsafe_to_concat (buffer->idx, unsafe_to);
  138|    417|      return_trace (false);
  ------------------
  |  |  349|    417|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    417|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  139|    417|    }
  140|       |
  141|  35.7k|    unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
  142|  35.7k|    if (!klass2)
  ------------------
  |  Branch (142:9): [True: 25.4k, False: 10.3k]
  ------------------
  143|  25.4k|    {
  144|  25.4k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  145|  25.4k|      return_trace (false);
  ------------------
  |  |  349|  25.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  25.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  146|  25.4k|    }
  147|       |
  148|  10.3k|    unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint);
  149|  10.3k|    if (unlikely (klass1 >= class1Count || klass2 >= class2Count))
  ------------------
  |  |  259|  17.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.09k, False: 3.27k]
  |  |  |  Branch (259:47): [True: 3.34k, False: 7.02k]
  |  |  |  Branch (259:47): [True: 3.75k, False: 3.27k]
  |  |  ------------------
  ------------------
  150|  7.09k|    {
  151|  7.09k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  152|  7.09k|      return_trace (false);
  ------------------
  |  |  349|  7.09k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.09k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|  7.09k|    }
  154|       |
  155|  3.27k|    unsigned int len1 = valueFormat1.get_len ();
  156|  3.27k|    unsigned int len2 = valueFormat2.get_len ();
  157|  3.27k|    unsigned int record_len = len1 + len2;
  158|       |
  159|  3.27k|    const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
  160|       |
  161|  3.27k|    bool applied_first = false, applied_second = false;
  162|       |
  163|       |
  164|       |    /* Isolate simple kerning and apply it half to each side.
  165|       |     * Results in better cursor positinoing / underline drawing.
  166|       |     *
  167|       |     * Disabled, because causes issues... :-(
  168|       |     * https://github.com/harfbuzz/harfbuzz/issues/3408
  169|       |     * https://github.com/harfbuzz/harfbuzz/pull/3235#issuecomment-1029814978
  170|       |     */
  171|  3.27k|#ifndef HB_SPLIT_KERN
  172|  3.27k|    if (false)
  ------------------
  |  Branch (172:9): [Folded - Ignored]
  ------------------
  173|      0|#endif
  174|      0|    {
  175|      0|      if (!len2)
  ------------------
  |  Branch (175:11): [True: 0, False: 0]
  ------------------
  176|      0|      {
  177|      0|        const hb_direction_t dir = buffer->props.direction;
  178|      0|        const bool horizontal = HB_DIRECTION_IS_HORIZONTAL (dir);
  ------------------
  |  |  271|      0|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  179|      0|        const bool backward = HB_DIRECTION_IS_BACKWARD (dir);
  ------------------
  |  |  298|      0|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  180|      0|        unsigned mask = horizontal ? ValueFormat::xAdvance : ValueFormat::yAdvance;
  ------------------
  |  Branch (180:25): [True: 0, False: 0]
  ------------------
  181|      0|        if (backward)
  ------------------
  |  Branch (181:13): [True: 0, False: 0]
  ------------------
  182|      0|          mask |= mask >> 2; /* Add eg. xPlacement in RTL. */
  183|       |        /* Add Devices. */
  184|      0|        mask |= mask << 4;
  185|       |
  186|      0|        if (valueFormat1 & ~mask)
  ------------------
  |  Branch (186:13): [True: 0, False: 0]
  ------------------
  187|      0|          goto bail;
  188|       |
  189|       |        /* Is simple kern. Apply value on an empty position slot,
  190|       |         * then split it between sides. */
  191|       |
  192|      0|        hb_glyph_position_t pos{};
  193|      0|        if (valueFormat1.apply_value (c, this, v, pos))
  ------------------
  |  Branch (193:13): [True: 0, False: 0]
  ------------------
  194|      0|        {
  195|      0|          hb_position_t *src  = &pos.x_advance;
  196|      0|          hb_position_t *dst1 = &buffer->cur_pos().x_advance;
  197|      0|          hb_position_t *dst2 = &buffer->pos[skippy_iter.idx].x_advance;
  198|      0|          unsigned i = horizontal ? 0 : 1;
  ------------------
  |  Branch (198:24): [True: 0, False: 0]
  ------------------
  199|       |
  200|      0|          hb_position_t kern  = src[i];
  201|      0|          hb_position_t kern1 = kern >> 1;
  202|      0|          hb_position_t kern2 = kern - kern1;
  203|       |
  204|      0|          if (!backward)
  ------------------
  |  Branch (204:15): [True: 0, False: 0]
  ------------------
  205|      0|          {
  206|      0|            dst1[i] += kern1;
  207|      0|            dst2[i] += kern2;
  208|      0|            dst2[i + 2] += kern2;
  209|      0|          }
  210|      0|          else
  211|      0|          {
  212|      0|            dst1[i] += kern1;
  213|      0|            dst1[i + 2] += src[i + 2] - kern2;
  214|      0|            dst2[i] += kern2;
  215|      0|          }
  216|       |
  217|      0|          applied_first = applied_second = kern != 0;
  218|      0|          goto success;
  219|      0|        }
  220|      0|        goto boring;
  221|      0|      }
  222|      0|    }
  223|  3.27k|    bail:
  224|       |
  225|  3.27k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  6.55k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  3.27k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (225:35): [True: 0, False: 3.27k]
  ------------------
  226|      0|    {
  227|      0|      c->buffer->message (c->font,
  228|      0|			  "try kerning glyphs at %u,%u",
  229|      0|			  c->buffer->idx, skippy_iter.idx);
  230|      0|    }
  231|       |
  232|  3.27k|    applied_first = len1 && valueFormat1.apply_value (c, this, v, buffer->cur_pos());
  ------------------
  |  Branch (232:21): [True: 2.41k, False: 859]
  |  Branch (232:29): [True: 1.00k, False: 1.40k]
  ------------------
  233|  3.27k|    applied_second = len2 && valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
  ------------------
  |  Branch (233:22): [True: 2.41k, False: 859]
  |  Branch (233:30): [True: 0, False: 2.41k]
  ------------------
  234|       |
  235|  3.27k|    if (applied_first || applied_second)
  ------------------
  |  Branch (235:9): [True: 1.00k, False: 2.26k]
  |  Branch (235:26): [True: 0, False: 2.26k]
  ------------------
  236|  1.00k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  2.01k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  1.00k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (236:37): [True: 0, False: 1.00k]
  ------------------
  237|      0|      {
  238|      0|	c->buffer->message (c->font,
  239|      0|			    "kerned glyphs at %u,%u",
  240|      0|			    c->buffer->idx, skippy_iter.idx);
  241|      0|      }
  242|       |
  243|  3.27k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  6.55k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  3.27k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (243:35): [True: 0, False: 3.27k]
  ------------------
  244|      0|    {
  245|      0|      c->buffer->message (c->font,
  246|      0|			  "tried kerning glyphs at %u,%u",
  247|      0|			  c->buffer->idx, skippy_iter.idx);
  248|      0|    }
  249|       |
  250|  3.27k|    success:
  251|  3.27k|    if (applied_first || applied_second)
  ------------------
  |  Branch (251:9): [True: 1.00k, False: 2.26k]
  |  Branch (251:26): [True: 0, False: 2.26k]
  ------------------
  252|  1.00k|      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
  253|  2.26k|    else
  254|  4.53k|    boring:
  255|  4.53k|      buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
  256|       |
  257|  3.27k|    if (len2)
  ------------------
  |  Branch (257:9): [True: 2.41k, False: 859]
  ------------------
  258|  2.41k|    {
  259|  2.41k|      skippy_iter.idx++;
  260|       |      // https://github.com/harfbuzz/harfbuzz/issues/3824
  261|       |      // https://github.com/harfbuzz/harfbuzz/issues/3888#issuecomment-1326781116
  262|  2.41k|      buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
  263|  2.41k|    }
  264|       |
  265|  3.27k|    buffer->idx = skippy_iter.idx;
  266|       |
  267|  3.27k|    return_trace (true);
  ------------------
  |  |  349|  3.27k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.27k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  268|  3.27k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   43|  10.9k|  {
   44|  10.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   45|  10.9k|    if (!(c->check_struct (this)
  ------------------
  |  Branch (45:11): [True: 10.8k, False: 111]
  ------------------
   46|  10.9k|       && coverage.sanitize (c, this)
  ------------------
  |  Branch (46:11): [True: 10.8k, False: 18]
  ------------------
   47|  10.9k|       && classDef1.sanitize (c, this)
  ------------------
  |  Branch (47:11): [True: 10.8k, False: 22]
  ------------------
   48|  10.9k|       && classDef2.sanitize (c, this))) return_trace (false);
  ------------------
  |  |  349|    172|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    172|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (48:11): [True: 10.8k, False: 21]
  ------------------
   49|       |
   50|  10.8k|    unsigned int len1 = valueFormat1.get_len ();
   51|  10.8k|    unsigned int len2 = valueFormat2.get_len ();
   52|  10.8k|    unsigned int stride = HBUINT16::static_size * (len1 + len2);
   53|  10.8k|    unsigned int count = (unsigned int) class1Count * (unsigned int) class2Count;
   54|  10.8k|    return_trace (c->check_range ((const void *) values,
  ------------------
  |  |  349|  42.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.2k, False: 574]
  |  |  |  Branch (349:45): [True: 10.2k, False: 16]
  |  |  |  Branch (349:45): [True: 10.1k, False: 36]
  |  |  ------------------
  ------------------
   55|  10.9k|                                  count,
   56|  10.9k|                                  stride) &&
   57|  10.9k|                  valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) &&
   58|  10.9k|                  valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride));
   59|  10.9k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   43|  5.49k|  {
   44|  5.49k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.49k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   45|  5.49k|    if (!(c->check_struct (this)
  ------------------
  |  Branch (45:11): [True: 5.41k, False: 76]
  ------------------
   46|  5.49k|       && coverage.sanitize (c, this)
  ------------------
  |  Branch (46:11): [True: 5.40k, False: 13]
  ------------------
   47|  5.49k|       && classDef1.sanitize (c, this)
  ------------------
  |  Branch (47:11): [True: 5.38k, False: 19]
  ------------------
   48|  5.49k|       && classDef2.sanitize (c, this))) return_trace (false);
  ------------------
  |  |  349|    116|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    116|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (48:11): [True: 5.37k, False: 8]
  ------------------
   49|       |
   50|  5.37k|    unsigned int len1 = valueFormat1.get_len ();
   51|  5.37k|    unsigned int len2 = valueFormat2.get_len ();
   52|  5.37k|    unsigned int stride = HBUINT16::static_size * (len1 + len2);
   53|  5.37k|    unsigned int count = (unsigned int) class1Count * (unsigned int) class2Count;
   54|  5.37k|    return_trace (c->check_range ((const void *) values,
  ------------------
  |  |  349|  20.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5.01k, False: 362]
  |  |  |  Branch (349:45): [True: 5.01k, False: 5]
  |  |  |  Branch (349:45): [True: 5.01k, False: 0]
  |  |  ------------------
  ------------------
   55|  5.49k|                                  count,
   56|  5.49k|                                  stride) &&
   57|  5.49k|                  valueFormat1.sanitize_values_stride_unsafe (c, this, &values[0], count, stride) &&
   58|  5.49k|                  valueFormat2.sanitize_values_stride_unsafe (c, this, &values[len1], count, stride));
   59|  5.49k|  }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_10SmallTypesEE12get_coverageEv:
  123|    954|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GPOS_impl16PairPosFormat2_4INS0_11MediumTypesEE12get_coverageEv:
  123|    790|  const Coverage &get_coverage () const { return this+coverage; }

_ZN2OT6Layout9GPOS_impl7PairSetINS0_10SmallTypesEE8get_sizeEjj:
   28|  2.43M|  {
   29|  2.43M|    return Types::HBGlyphID::static_size + Value::static_size * (len1 + len2);
   30|  2.43M|  }
_ZN2OT6Layout9GPOS_impl7PairSetINS0_11MediumTypesEE8get_sizeEjj:
   28|   190k|  {
   29|   190k|    return Types::HBGlyphID::static_size + Value::static_size * (len1 + len2);
   30|   190k|  }
_ZNK2OT6Layout9GPOS_impl7PairSetINS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tEPKNS1_11ValueFormatEj:
  103|  2.41M|  {
  104|  2.41M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.41M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  105|  2.41M|    hb_buffer_t *buffer = c->buffer;
  106|  2.41M|    unsigned int len1 = valueFormats[0].get_len ();
  107|  2.41M|    unsigned int len2 = valueFormats[1].get_len ();
  108|  2.41M|    unsigned record_size = get_size (len1, len2);
  109|       |
  110|  2.41M|    const PairValueRecord *record = hb_bsearch (buffer->info[pos].codepoint,
  111|  2.41M|                                                &firstPairValueRecord,
  112|  2.41M|                                                len,
  113|  2.41M|                                                record_size);
  114|  2.41M|    if (record)
  ------------------
  |  Branch (114:9): [True: 65.1k, False: 2.35M]
  ------------------
  115|  65.1k|    {
  116|  65.1k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   130k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  65.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (116:37): [True: 0, False: 65.1k]
  ------------------
  117|      0|      {
  118|      0|	c->buffer->message (c->font,
  119|      0|			    "try kerning glyphs at %u,%u",
  120|      0|			    c->buffer->idx, pos);
  121|      0|      }
  122|       |
  123|  65.1k|      bool applied_first = len1 && valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
  ------------------
  |  Branch (123:28): [True: 26.1k, False: 39.0k]
  |  Branch (123:36): [True: 18.3k, False: 7.73k]
  ------------------
  124|  65.1k|      bool applied_second = len2 && valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);
  ------------------
  |  Branch (124:29): [True: 57.7k, False: 7.38k]
  |  Branch (124:37): [True: 38.2k, False: 19.5k]
  ------------------
  125|       |
  126|  65.1k|      if (applied_first || applied_second)
  ------------------
  |  Branch (126:11): [True: 18.3k, False: 46.7k]
  |  Branch (126:28): [True: 31.7k, False: 15.0k]
  ------------------
  127|  50.1k|	if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   100k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  50.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (127:32): [True: 0, False: 50.1k]
  ------------------
  128|      0|	{
  129|      0|	  c->buffer->message (c->font,
  130|      0|			      "kerned glyphs at %u,%u",
  131|      0|			      c->buffer->idx, pos);
  132|      0|	}
  133|       |
  134|  65.1k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   130k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  65.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (134:37): [True: 0, False: 65.1k]
  ------------------
  135|      0|      {
  136|      0|	c->buffer->message (c->font,
  137|      0|			    "tried kerning glyphs at %u,%u",
  138|      0|			    c->buffer->idx, pos);
  139|      0|      }
  140|       |
  141|  65.1k|      if (applied_first || applied_second)
  ------------------
  |  Branch (141:11): [True: 18.3k, False: 46.7k]
  |  Branch (141:28): [True: 31.7k, False: 15.0k]
  ------------------
  142|  50.1k|        buffer->unsafe_to_break (buffer->idx, pos + 1);
  143|       |
  144|  65.1k|      if (len2)
  ------------------
  |  Branch (144:11): [True: 57.7k, False: 7.38k]
  ------------------
  145|  57.7k|      {
  146|  57.7k|	pos++;
  147|       |      // https://github.com/harfbuzz/harfbuzz/issues/3824
  148|       |      // https://github.com/harfbuzz/harfbuzz/issues/3888#issuecomment-1326781116
  149|  57.7k|      buffer->unsafe_to_break (buffer->idx, pos + 1);
  150|  57.7k|      }
  151|       |
  152|  65.1k|      buffer->idx = pos;
  153|  65.1k|      return_trace (true);
  ------------------
  |  |  349|  65.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  65.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  154|  65.1k|    }
  155|  2.35M|    buffer->unsafe_to_concat (buffer->idx, pos + 1);
  156|  2.35M|    return_trace (false);
  ------------------
  |  |  349|  2.35M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.35M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  157|  2.41M|  }
_ZNK2OT6Layout9GPOS_impl7PairSetINS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tEPKNS1_11ValueFormatEj:
  103|   186k|  {
  104|   186k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   186k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  105|   186k|    hb_buffer_t *buffer = c->buffer;
  106|   186k|    unsigned int len1 = valueFormats[0].get_len ();
  107|   186k|    unsigned int len2 = valueFormats[1].get_len ();
  108|   186k|    unsigned record_size = get_size (len1, len2);
  109|       |
  110|   186k|    const PairValueRecord *record = hb_bsearch (buffer->info[pos].codepoint,
  111|   186k|                                                &firstPairValueRecord,
  112|   186k|                                                len,
  113|   186k|                                                record_size);
  114|   186k|    if (record)
  ------------------
  |  Branch (114:9): [True: 138k, False: 47.6k]
  ------------------
  115|   138k|    {
  116|   138k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   277k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   138k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (116:37): [True: 0, False: 138k]
  ------------------
  117|      0|      {
  118|      0|	c->buffer->message (c->font,
  119|      0|			    "try kerning glyphs at %u,%u",
  120|      0|			    c->buffer->idx, pos);
  121|      0|      }
  122|       |
  123|   138k|      bool applied_first = len1 && valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
  ------------------
  |  Branch (123:28): [True: 136k, False: 2.36k]
  |  Branch (123:36): [True: 43.5k, False: 92.8k]
  ------------------
  124|   138k|      bool applied_second = len2 && valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);
  ------------------
  |  Branch (124:29): [True: 135k, False: 2.88k]
  |  Branch (124:37): [True: 26.0k, False: 109k]
  ------------------
  125|       |
  126|   138k|      if (applied_first || applied_second)
  ------------------
  |  Branch (126:11): [True: 43.5k, False: 95.1k]
  |  Branch (126:28): [True: 25.2k, False: 69.9k]
  ------------------
  127|  68.8k|	if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   137k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  68.8k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (127:32): [True: 0, False: 68.8k]
  ------------------
  128|      0|	{
  129|      0|	  c->buffer->message (c->font,
  130|      0|			      "kerned glyphs at %u,%u",
  131|      0|			      c->buffer->idx, pos);
  132|      0|	}
  133|       |
  134|   138k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   277k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   138k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (134:37): [True: 0, False: 138k]
  ------------------
  135|      0|      {
  136|      0|	c->buffer->message (c->font,
  137|      0|			    "tried kerning glyphs at %u,%u",
  138|      0|			    c->buffer->idx, pos);
  139|      0|      }
  140|       |
  141|   138k|      if (applied_first || applied_second)
  ------------------
  |  Branch (141:11): [True: 43.5k, False: 95.1k]
  |  Branch (141:28): [True: 25.2k, False: 69.9k]
  ------------------
  142|  68.8k|        buffer->unsafe_to_break (buffer->idx, pos + 1);
  143|       |
  144|   138k|      if (len2)
  ------------------
  |  Branch (144:11): [True: 135k, False: 2.88k]
  ------------------
  145|   135k|      {
  146|   135k|	pos++;
  147|       |      // https://github.com/harfbuzz/harfbuzz/issues/3824
  148|       |      // https://github.com/harfbuzz/harfbuzz/issues/3888#issuecomment-1326781116
  149|   135k|      buffer->unsafe_to_break (buffer->idx, pos + 1);
  150|   135k|      }
  151|       |
  152|   138k|      buffer->idx = pos;
  153|   138k|      return_trace (true);
  ------------------
  |  |  349|   138k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   138k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  154|   138k|    }
  155|  47.6k|    buffer->unsafe_to_concat (buffer->idx, pos + 1);
  156|  47.6k|    return_trace (false);
  ------------------
  |  |  349|  47.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  157|   186k|  }
_ZNK2OT6Layout9GPOS_impl7PairSetINS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_tPKNS4_18sanitize_closure_tE:
   46|  49.3k|  {
   47|  49.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  49.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   48|  49.3k|    if (!(c->check_struct (this)
  ------------------
  |  Branch (48:11): [True: 47.4k, False: 1.88k]
  ------------------
   49|  49.3k|       && c->check_range (&firstPairValueRecord,
  ------------------
  |  Branch (49:11): [True: 45.9k, False: 1.49k]
  ------------------
   50|  47.4k|                          len,
   51|  47.4k|                          closure->stride))) return_trace (false);
  ------------------
  |  |  349|  3.37k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   52|       |
   53|  45.9k|    unsigned int count = len;
   54|  45.9k|    const PairValueRecord *record = &firstPairValueRecord;
   55|  45.9k|    return_trace (closure->valueFormats[0].sanitize_values_stride_unsafe (c, this, &record->values[0], count, closure->stride) &&
  ------------------
  |  |  349|  91.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 45.8k, False: 67]
  |  |  |  Branch (349:45): [True: 45.8k, False: 17]
  |  |  ------------------
  ------------------
   56|  49.3k|                  closure->valueFormats[1].sanitize_values_stride_unsafe (c, this, &record->values[closure->len1], count, closure->stride));
   57|  49.3k|  }
_ZNK2OT6Layout9GPOS_impl7PairSetINS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_tPKNS4_18sanitize_closure_tE:
   46|  3.87k|  {
   47|  3.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   48|  3.87k|    if (!(c->check_struct (this)
  ------------------
  |  Branch (48:11): [True: 2.49k, False: 1.38k]
  ------------------
   49|  3.87k|       && c->check_range (&firstPairValueRecord,
  ------------------
  |  Branch (49:11): [True: 2.27k, False: 224]
  ------------------
   50|  2.49k|                          len,
   51|  2.49k|                          closure->stride))) return_trace (false);
  ------------------
  |  |  349|  1.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   52|       |
   53|  2.27k|    unsigned int count = len;
   54|  2.27k|    const PairValueRecord *record = &firstPairValueRecord;
   55|  2.27k|    return_trace (closure->valueFormats[0].sanitize_values_stride_unsafe (c, this, &record->values[0], count, closure->stride) &&
  ------------------
  |  |  349|  4.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.27k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.25k, False: 14]
  |  |  |  Branch (349:45): [True: 2.24k, False: 9]
  |  |  ------------------
  ------------------
   56|  3.87k|                  closure->valueFormats[1].sanitize_values_stride_unsafe (c, this, &record->values[closure->len1], count, closure->stride));
   57|  3.87k|  }

_ZNK2OT6Layout9GPOS_impl15PairValueRecordINS0_10SmallTypesEE3cmpEj:
   28|  1.11M|  { return secondGlyph.cmp (k); }
_ZNK2OT6Layout9GPOS_impl15PairValueRecordINS0_11MediumTypesEE3cmpEj:
   28|   151k|  { return secondGlyph.cmp (k); }

_ZNK2OT6Layout9GPOS_impl9PosLookup10is_reverseEv:
   19|  45.0k|  {
   20|  45.0k|    return false;
   21|  45.0k|  }
_ZNK2OT6Layout9GPOS_impl9PosLookup8sanitizeEP21hb_sanitize_context_t:
   72|  95.2k|  { return Lookup::sanitize<SubTable> (c); }
_ZNK2OT6Layout9GPOS_impl9PosLookup8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   66|  17.7k|  { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }

_ZNK2OT6Layout9GPOS_impl17PosLookupSubTable8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_jDpOT0_:
   37|  2.17M|  {
   38|  2.17M|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|  2.17M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   39|  2.17M|    switch (lookup_type) {
   40|  40.6k|    case Single:                return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  40.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (40:5): [True: 40.6k, False: 2.13M]
  ------------------
   41|   121k|    case Pair:                  return_trace (u.pair.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   121k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   121k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (41:5): [True: 121k, False: 2.05M]
  ------------------
   42|  34.8k|    case Cursive:               return_trace (u.cursive.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  34.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (42:5): [True: 34.8k, False: 2.14M]
  ------------------
   43|  70.0k|    case MarkBase:              return_trace (u.markBase.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  70.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  70.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (43:5): [True: 70.0k, False: 2.10M]
  ------------------
   44|   113k|    case MarkLig:               return_trace (u.markLig.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   113k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   113k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (44:5): [True: 113k, False: 2.06M]
  ------------------
   45|  87.0k|    case MarkMark:              return_trace (u.markMark.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  87.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  87.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (45:5): [True: 87.0k, False: 2.09M]
  ------------------
   46|  47.5k|    case Context:               return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  47.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (46:5): [True: 47.5k, False: 2.13M]
  ------------------
   47|  59.8k|    case ChainContext:          return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  59.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  59.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (47:5): [True: 59.8k, False: 2.11M]
  ------------------
   48|  18.9k|    case Extension:             return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  18.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (48:5): [True: 18.9k, False: 2.15M]
  ------------------
   49|  1.58M|    default:                    return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.58M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.58M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (49:5): [True: 1.58M, False: 594k]
  ------------------
   50|  2.17M|    }
   51|  2.17M|  }
_ZNK2OT6Layout9GPOS_impl17PosLookupSubTable8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_jDpOT0_:
   37|   468k|  {
   38|   468k|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|   468k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   39|   468k|    switch (lookup_type) {
   40|  5.66k|    case Single:                return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (40:5): [True: 5.66k, False: 463k]
  ------------------
   41|  35.0k|    case Pair:                  return_trace (u.pair.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  35.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (41:5): [True: 35.0k, False: 433k]
  ------------------
   42|  9.05k|    case Cursive:               return_trace (u.cursive.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (42:5): [True: 9.05k, False: 459k]
  ------------------
   43|  15.6k|    case MarkBase:              return_trace (u.markBase.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  15.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (43:5): [True: 15.6k, False: 453k]
  ------------------
   44|  16.2k|    case MarkLig:               return_trace (u.markLig.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  16.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (44:5): [True: 16.2k, False: 452k]
  ------------------
   45|  20.0k|    case MarkMark:              return_trace (u.markMark.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  20.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (45:5): [True: 20.0k, False: 448k]
  ------------------
   46|  10.1k|    case Context:               return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (46:5): [True: 10.1k, False: 458k]
  ------------------
   47|  9.64k|    case ChainContext:          return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (47:5): [True: 9.64k, False: 459k]
  ------------------
   48|  3.08k|    case Extension:             return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (48:5): [True: 3.08k, False: 465k]
  ------------------
   49|   344k|    default:                    return_trace (c->default_return_value ());
  ------------------
  |  |  349|   344k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   344k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (49:5): [True: 344k, False: 124k]
  ------------------
   50|   468k|    }
   51|   468k|  }

_ZNK2OT6Layout9GPOS_impl9SinglePos8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   74|  40.6k|  {
   75|  40.6k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  40.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.22k, False: 38.4k]
  |  |  ------------------
  ------------------
   76|  38.4k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  38.4k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   77|  38.4k|    switch (u.format) {
   78|  3.48k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (78:5): [True: 3.48k, False: 34.9k]
  ------------------
   79|  5.58k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.58k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.58k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (79:5): [True: 5.58k, False: 32.8k]
  ------------------
   80|  29.3k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  29.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (80:5): [True: 29.3k, False: 9.07k]
  ------------------
   81|  38.4k|    }
   82|  38.4k|  }
_ZNK2OT6Layout9GPOS_impl9SinglePos8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   74|  5.66k|  {
   75|  5.66k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  5.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.66k]
  |  |  ------------------
  ------------------
   76|  5.66k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  5.66k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   77|  5.66k|    switch (u.format) {
   78|    382|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    382|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    382|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (78:5): [True: 382, False: 5.27k]
  ------------------
   79|    758|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    758|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    758|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (79:5): [True: 758, False: 4.90k]
  ------------------
   80|  4.52k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  4.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.52k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (80:5): [True: 4.52k, False: 1.14k]
  ------------------
   81|  5.66k|    }
   82|  5.66k|  }

_ZNK2OT6Layout9GPOS_impl16SinglePosFormat18sanitizeEP21hb_sanitize_context_t:
   27|  3.48k|  {
   28|  3.48k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.48k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   29|  3.48k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  20.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.40k, False: 83]
  |  |  |  Branch (349:45): [True: 3.39k, False: 7]
  |  |  |  Branch (349:45): [True: 3.34k, False: 49]
  |  |  |  Branch (349:45): [True: 3.25k, False: 92]
  |  |  ------------------
  ------------------
   30|  3.48k|                  coverage.sanitize (c, this) &&
   31|       |                  /* The coverage  table may use a range to represent a set
   32|       |                   * of glyphs, which means a small number of bytes can
   33|       |                   * generate a large glyph set. Manually modify the
   34|       |                   * sanitizer max ops to take this into account.
   35|       |                   *
   36|       |                   * Note: This check *must* be right after coverage sanitize. */
   37|  3.48k|                  c->check_ops ((this + coverage).get_population () >> 1) &&
   38|  3.48k|                  valueFormat.sanitize_value (c, this, values));
   39|       |
   40|  3.48k|  }
_ZNK2OT6Layout9GPOS_impl16SinglePosFormat112get_coverageEv:
   60|    382|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GPOS_impl16SinglePosFormat15applyEPNS_21hb_ot_apply_context_tE:
   65|  5.79k|  {
   66|  5.79k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  5.79k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   67|  5.79k|    hb_buffer_t *buffer = c->buffer;
   68|  5.79k|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
   69|  5.79k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  5.79k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 802, False: 4.98k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|    802|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    802|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   70|       |
   71|  4.98k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  9.97k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  4.98k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (71:35): [True: 0, False: 4.98k]
  ------------------
   72|      0|    {
   73|      0|      c->buffer->message (c->font,
   74|      0|			  "positioning glyph at %u",
   75|      0|			  c->buffer->idx);
   76|      0|    }
   77|       |
   78|  4.98k|    valueFormat.apply_value (c, this, values, buffer->cur_pos());
   79|       |
   80|  4.98k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  9.97k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  4.98k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (80:35): [True: 0, False: 4.98k]
  ------------------
   81|      0|    {
   82|      0|      c->buffer->message (c->font,
   83|      0|			  "positioned glyph at %u",
   84|      0|			  c->buffer->idx);
   85|      0|    }
   86|       |
   87|  4.98k|    buffer->idx++;
   88|  4.98k|    return_trace (true);
  ------------------
  |  |  349|  4.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   89|  5.79k|  }

_ZNK2OT6Layout9GPOS_impl16SinglePosFormat28sanitizeEP21hb_sanitize_context_t:
   26|  5.58k|  {
   27|  5.58k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.58k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  5.58k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  22.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.58k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5.51k, False: 78]
  |  |  |  Branch (349:45): [True: 5.49k, False: 19]
  |  |  |  Branch (349:45): [True: 5.29k, False: 193]
  |  |  ------------------
  ------------------
   29|  5.58k|                  coverage.sanitize (c, this) &&
   30|  5.58k|                  valueFormat.sanitize_values (c, this, values, valueCount));
   31|  5.58k|  }
_ZNK2OT6Layout9GPOS_impl16SinglePosFormat212get_coverageEv:
   60|    758|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GPOS_impl16SinglePosFormat25applyEPNS_21hb_ot_apply_context_tE:
   65|  48.1k|  {
   66|  48.1k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  48.1k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   67|  48.1k|    hb_buffer_t *buffer = c->buffer;
   68|  48.1k|    unsigned int index = (this+coverage).get_coverage  (buffer->cur().codepoint);
   69|  48.1k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  48.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 25.1k, False: 22.9k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  25.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  25.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   70|       |
   71|  22.9k|    if (unlikely (index >= valueCount)) return_trace (false);
  ------------------
  |  |  259|  22.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.8k, False: 6.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (index >= valueCount)) return_trace (false);
  ------------------
  |  |  349|  16.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   72|       |
   73|  6.13k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  12.2k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  6.13k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (73:35): [True: 0, False: 6.13k]
  ------------------
   74|      0|    {
   75|      0|      c->buffer->message (c->font,
   76|      0|			  "positioning glyph at %u",
   77|      0|			  c->buffer->idx);
   78|      0|    }
   79|       |
   80|  6.13k|    valueFormat.apply_value (c, this,
   81|  6.13k|                             &values[index * valueFormat.get_len ()],
   82|  6.13k|                             buffer->cur_pos());
   83|       |
   84|  6.13k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  12.2k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  6.13k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (84:35): [True: 0, False: 6.13k]
  ------------------
   85|      0|    {
   86|      0|      c->buffer->message (c->font,
   87|      0|			  "positioned glyph at %u",
   88|      0|			  c->buffer->idx);
   89|      0|    }
   90|       |
   91|  6.13k|    buffer->idx++;
   92|  6.13k|    return_trace (true);
  ------------------
  |  |  349|  6.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   93|  22.9k|  }

_ZNK2OT6Layout9GPOS_impl11ValueFormat7get_lenEv:
   59|  5.33M|  unsigned int get_len () const  { return hb_popcount ((unsigned int) *this); }
_ZNK2OT6Layout9GPOS_impl11ValueFormat8get_sizeEv:
   60|  8.84k|  unsigned int get_size () const { return get_len () * Value::static_size; }
_ZNK2OT6Layout9GPOS_impl11ValueFormat11apply_valueEPNS_21hb_ot_apply_context_tEPKvPKNS_7IntTypeItLj2EEER19hb_glyph_position_t:
   84|   402k|  {
   85|   402k|    bool ret = false;
   86|   402k|    unsigned int format = *this;
   87|   402k|    if (!format) return ret;
  ------------------
  |  Branch (87:9): [True: 809, False: 401k]
  ------------------
   88|       |
   89|   401k|    hb_font_t *font = c->font;
   90|   401k|    bool horizontal =
   91|   401k|#ifndef HB_NO_VERTICAL
   92|   401k|      HB_DIRECTION_IS_HORIZONTAL (c->direction)
  ------------------
  |  |  271|   401k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   93|       |#else
   94|       |      true
   95|       |#endif
   96|   401k|      ;
   97|       |
   98|   401k|    if (format & xPlacement) glyph_pos.x_offset  += font->em_scale_x (get_short (values++, &ret));
  ------------------
  |  Branch (98:9): [True: 211k, False: 190k]
  ------------------
   99|   401k|    if (format & yPlacement) glyph_pos.y_offset  += font->em_scale_y (get_short (values++, &ret));
  ------------------
  |  Branch (99:9): [True: 237k, False: 164k]
  ------------------
  100|   401k|    if (format & xAdvance) {
  ------------------
  |  Branch (100:9): [True: 46.6k, False: 355k]
  ------------------
  101|  46.6k|      if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values, &ret));
  ------------------
  |  |  258|  46.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 46.6k, False: 0]
  |  |  ------------------
  ------------------
  102|  46.6k|      values++;
  103|  46.6k|    }
  104|       |    /* y_advance values grow downward but font-space grows upward, hence negation */
  105|   401k|    if (format & yAdvance) {
  ------------------
  |  Branch (105:9): [True: 100k, False: 300k]
  ------------------
  106|   100k|      if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values, &ret));
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 100k]
  |  |  ------------------
  ------------------
  107|   100k|      values++;
  108|   100k|    }
  109|       |
  110|   401k|    if (!has_device ()) return ret;
  ------------------
  |  Branch (110:9): [True: 187k, False: 214k]
  ------------------
  111|       |
  112|   214k|    bool use_x_device = font->x_ppem || font->num_coords;
  ------------------
  |  Branch (112:25): [True: 0, False: 214k]
  |  Branch (112:41): [True: 1.18k, False: 213k]
  ------------------
  113|   214k|    bool use_y_device = font->y_ppem || font->num_coords;
  ------------------
  |  Branch (113:25): [True: 0, False: 214k]
  |  Branch (113:41): [True: 1.18k, False: 213k]
  ------------------
  114|       |
  115|   214k|    if (!use_x_device && !use_y_device) return ret;
  ------------------
  |  Branch (115:9): [True: 213k, False: 1.18k]
  |  Branch (115:26): [True: 213k, False: 0]
  ------------------
  116|       |
  117|  1.18k|    const VariationStore &store = c->var_store;
  118|  1.18k|    auto *cache = c->var_store_cache;
  119|       |
  120|       |    /* pixel -> fractional pixel */
  121|  1.18k|    if (format & xPlaDevice) {
  ------------------
  |  Branch (121:9): [True: 1.02k, False: 168]
  ------------------
  122|  1.02k|      if (use_x_device) glyph_pos.x_offset  += (base + get_device (values, &ret)).get_x_delta (font, store, cache);
  ------------------
  |  Branch (122:11): [True: 1.02k, False: 0]
  ------------------
  123|  1.02k|      values++;
  124|  1.02k|    }
  125|  1.18k|    if (format & yPlaDevice) {
  ------------------
  |  Branch (125:9): [True: 908, False: 280]
  ------------------
  126|    908|      if (use_y_device) glyph_pos.y_offset  += (base + get_device (values, &ret)).get_y_delta (font, store, cache);
  ------------------
  |  Branch (126:11): [True: 908, False: 0]
  ------------------
  127|    908|      values++;
  128|    908|    }
  129|  1.18k|    if (format & xAdvDevice) {
  ------------------
  |  Branch (129:9): [True: 714, False: 474]
  ------------------
  130|    714|      if (horizontal && use_x_device) glyph_pos.x_advance += (base + get_device (values, &ret)).get_x_delta (font, store, cache);
  ------------------
  |  Branch (130:11): [True: 714, False: 0]
  |  Branch (130:25): [True: 714, False: 0]
  ------------------
  131|    714|      values++;
  132|    714|    }
  133|  1.18k|    if (format & yAdvDevice) {
  ------------------
  |  Branch (133:9): [True: 540, False: 648]
  ------------------
  134|       |      /* y_advance values grow downward but font-space grows upward, hence negation */
  135|    540|      if (!horizontal && use_y_device) glyph_pos.y_advance -= (base + get_device (values, &ret)).get_y_delta (font, store, cache);
  ------------------
  |  Branch (135:11): [True: 0, False: 540]
  |  Branch (135:26): [True: 0, False: 0]
  ------------------
  136|    540|      values++;
  137|    540|    }
  138|  1.18k|    return ret;
  139|   214k|  }
_ZNK2OT6Layout9GPOS_impl11ValueFormat22sanitize_value_devicesEP21hb_sanitize_context_tPKvPKNS_7IntTypeItLj2EEE:
  263|  4.77M|  {
  264|  4.77M|    unsigned int format = *this;
  265|       |
  266|  4.77M|    if (format & xPlacement) values++;
  ------------------
  |  Branch (266:9): [True: 43.7k, False: 4.72M]
  ------------------
  267|  4.77M|    if (format & yPlacement) values++;
  ------------------
  |  Branch (267:9): [True: 3.61M, False: 1.16M]
  ------------------
  268|  4.77M|    if (format & xAdvance)   values++;
  ------------------
  |  Branch (268:9): [True: 4.05M, False: 715k]
  ------------------
  269|  4.77M|    if (format & yAdvance)   values++;
  ------------------
  |  Branch (269:9): [True: 3.53M, False: 1.23M]
  ------------------
  270|       |
  271|  4.77M|    if ((format & xPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
  ------------------
  |  Branch (271:9): [True: 3.83M, False: 938k]
  |  Branch (271:34): [True: 78, False: 3.83M]
  ------------------
  272|  4.77M|    if ((format & yPlaDevice) && !get_device (values++).sanitize (c, base)) return false;
  ------------------
  |  Branch (272:9): [True: 3.88M, False: 886k]
  |  Branch (272:34): [True: 44, False: 3.88M]
  ------------------
  273|  4.77M|    if ((format & xAdvDevice) && !get_device (values++).sanitize (c, base)) return false;
  ------------------
  |  Branch (273:9): [True: 893k, False: 3.87M]
  |  Branch (273:34): [True: 33, False: 893k]
  ------------------
  274|  4.77M|    if ((format & yAdvDevice) && !get_device (values++).sanitize (c, base)) return false;
  ------------------
  |  Branch (274:9): [True: 771k, False: 3.99M]
  |  Branch (274:34): [True: 28, False: 771k]
  ------------------
  275|       |
  276|  4.77M|    return true;
  277|  4.77M|  }
_ZN2OT6Layout9GPOS_impl11ValueFormat10get_deviceEPKNS_7IntTypeItLj2EEEPb:
  284|  9.38M|  {
  285|  9.38M|    if (worked) *worked |= bool (*value);
  ------------------
  |  Branch (285:9): [True: 2.64k, False: 9.38M]
  ------------------
  286|  9.38M|    return *static_cast<const Offset16To<Device> *> (value);
  287|  9.38M|  }
_ZN2OT6Layout9GPOS_impl11ValueFormat9get_shortEPKNS_7IntTypeItLj2EEEPb:
  330|   495k|  {
  331|   495k|    if (worked) *worked |= bool (*value);
  ------------------
  |  Branch (331:9): [True: 495k, False: 0]
  ------------------
  332|   495k|    return *reinterpret_cast<const HBINT16 *> (value);
  333|   495k|  }
_ZNK2OT6Layout9GPOS_impl11ValueFormat10has_deviceEv:
  338|   537k|  {
  339|   537k|    unsigned int format = *this;
  340|   537k|    return (format & devices) != 0;
  341|   537k|  }
_ZNK2OT6Layout9GPOS_impl11ValueFormat14sanitize_valueEP21hb_sanitize_context_tPKvPKNS_7IntTypeItLj2EEE:
  344|  3.34k|  {
  345|  3.34k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.34k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  346|  3.34k|    return_trace (c->check_range (values, get_size ()) && (!has_device () || sanitize_value_devices (c, base, values)));
  ------------------
  |  |  349|  10.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.70k, False: 549]
  |  |  |  Branch (349:45): [True: 547, False: 2]
  |  |  |  Branch (349:45): [True: 3.25k, False: 90]
  |  |  ------------------
  ------------------
  347|  3.34k|  }
_ZNK2OT6Layout9GPOS_impl11ValueFormat15sanitize_valuesEP21hb_sanitize_context_tPKvPKNS_7IntTypeItLj2EEEj:
  350|  5.49k|  {
  351|  5.49k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.49k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  352|  5.49k|    unsigned int len = get_len ();
  353|       |
  354|  5.49k|    if (!c->check_range (values, count, get_size ())) return_trace (false);
  ------------------
  |  |  349|    176|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    176|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (354:9): [True: 176, False: 5.31k]
  ------------------
  355|       |
  356|  5.31k|    if (!has_device ()) return_trace (true);
  ------------------
  |  |  349|  4.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (356:9): [True: 4.20k, False: 1.11k]
  ------------------
  357|       |
  358|  37.8k|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (358:30): [True: 36.7k, False: 1.09k]
  ------------------
  359|  36.7k|      if (!sanitize_value_devices (c, base, values))
  ------------------
  |  Branch (359:11): [True: 17, False: 36.7k]
  ------------------
  360|     17|        return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  361|  36.7k|      values += len;
  362|  36.7k|    }
  363|       |
  364|  1.09k|    return_trace (true);
  ------------------
  |  |  349|  1.09k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.09k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  365|  1.11k|  }
_ZNK2OT6Layout9GPOS_impl11ValueFormat29sanitize_values_stride_unsafeEP21hb_sanitize_context_tPKvPKNS_7IntTypeItLj2EEEjj:
  369|   126k|  {
  370|   126k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   126k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  371|       |
  372|   126k|    if (!has_device ()) return_trace (true);
  ------------------
  |  |  349|  80.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  80.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (372:9): [True: 80.8k, False: 45.9k]
  ------------------
  373|       |
  374|  4.77M|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (374:30): [True: 4.73M, False: 45.8k]
  ------------------
  375|  4.73M|      if (!sanitize_value_devices (c, base, values))
  ------------------
  |  Branch (375:11): [True: 164, False: 4.73M]
  ------------------
  376|    164|        return_trace (false);
  ------------------
  |  |  349|    164|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    164|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  377|  4.73M|      values = &StructAtOffset<const Value> (values, stride);
  378|  4.73M|    }
  379|       |
  380|  45.8k|    return_trace (true);
  ------------------
  |  |  349|  45.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  381|  45.9k|  }

_ZNK2OT6Layout9GSUB_impl12AlternateSetINS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   21|  67.9k|  {
   22|  67.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  67.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   23|  67.9k|    return_trace (alternates.sanitize (c));
  ------------------
  |  |  349|  67.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  67.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   24|  67.9k|  }
_ZNK2OT6Layout9GSUB_impl12AlternateSetINS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   21|  3.03k|  {
   22|  3.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   23|  3.03k|    return_trace (alternates.sanitize (c));
  ------------------
  |  |  349|  3.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   24|  3.03k|  }
_ZNK2OT6Layout9GSUB_impl12AlternateSetINS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   36|   928k|  {
   37|   928k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   928k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   38|   928k|    unsigned int count = alternates.len;
   39|       |
   40|   928k|    if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  259|   928k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 603k, False: 324k]
  |  |  ------------------
  ------------------
                  if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  349|   603k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   603k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   41|       |
   42|   324k|    hb_mask_t glyph_mask = c->buffer->cur().mask;
   43|   324k|    hb_mask_t lookup_mask = c->lookup_mask;
   44|       |
   45|       |    /* Note: This breaks badly if two features enabled this lookup together. */
   46|   324k|    unsigned int shift = hb_ctz (lookup_mask);
   47|   324k|    unsigned int alt_index = ((lookup_mask & glyph_mask) >> shift);
   48|       |
   49|       |    /* If alt_index is MAX_VALUE, randomize feature if it is the rand feature. */
   50|   324k|    if (alt_index == HB_OT_MAP_MAX_VALUE && c->random)
  ------------------
  |  |   36|   649k|#define HB_OT_MAP_MAX_VALUE ((1u << HB_OT_MAP_MAX_BITS) - 1u)
  |  |  ------------------
  |  |  |  |   35|   324k|#define HB_OT_MAP_MAX_BITS 8u
  |  |  ------------------
  ------------------
  |  Branch (50:9): [True: 112, False: 324k]
  |  Branch (50:45): [True: 112, False: 0]
  ------------------
   51|    112|    {
   52|       |      /* Maybe we can do better than unsafe-to-break all; but since we are
   53|       |       * changing random state, it would be hard to track that.  Good 'nough. */
   54|    112|      c->buffer->unsafe_to_break (0, c->buffer->len);
   55|    112|      alt_index = c->random_number () % count + 1;
   56|    112|    }
   57|       |
   58|   324k|    if (unlikely (alt_index > count || alt_index == 0)) return_trace (false);
  ------------------
  |  |  259|   617k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.3k, False: 292k]
  |  |  |  Branch (259:47): [True: 32.3k, False: 292k]
  |  |  |  Branch (259:47): [True: 0, False: 292k]
  |  |  ------------------
  ------------------
                  if (unlikely (alt_index > count || alt_index == 0)) return_trace (false);
  ------------------
  |  |  349|  32.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   59|       |
   60|   292k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   584k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   292k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (60:35): [True: 0, False: 292k]
  ------------------
   61|      0|    {
   62|      0|      c->buffer->sync_so_far ();
   63|      0|      c->buffer->message (c->font,
   64|      0|			  "replacing glyph at %u (alternate substitution)",
   65|      0|			  c->buffer->idx);
   66|      0|    }
   67|       |
   68|   292k|    c->replace_glyph (alternates[alt_index - 1]);
   69|       |
   70|   292k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   584k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   292k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (70:35): [True: 0, False: 292k]
  ------------------
   71|      0|    {
   72|      0|      c->buffer->message (c->font,
   73|      0|			  "replaced glyph at %u (alternate substitution)",
   74|      0|			  c->buffer->idx - 1u);
   75|      0|    }
   76|       |
   77|   292k|    return_trace (true);
  ------------------
  |  |  349|   292k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   292k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|   324k|  }
_ZNK2OT6Layout9GSUB_impl12AlternateSetINS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   36|  41.9k|  {
   37|  41.9k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  41.9k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   38|  41.9k|    unsigned int count = alternates.len;
   39|       |
   40|  41.9k|    if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  259|  41.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 41.0k, False: 852]
  |  |  ------------------
  ------------------
                  if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  349|  41.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   41|       |
   42|    852|    hb_mask_t glyph_mask = c->buffer->cur().mask;
   43|    852|    hb_mask_t lookup_mask = c->lookup_mask;
   44|       |
   45|       |    /* Note: This breaks badly if two features enabled this lookup together. */
   46|    852|    unsigned int shift = hb_ctz (lookup_mask);
   47|    852|    unsigned int alt_index = ((lookup_mask & glyph_mask) >> shift);
   48|       |
   49|       |    /* If alt_index is MAX_VALUE, randomize feature if it is the rand feature. */
   50|    852|    if (alt_index == HB_OT_MAP_MAX_VALUE && c->random)
  ------------------
  |  |   36|  1.70k|#define HB_OT_MAP_MAX_VALUE ((1u << HB_OT_MAP_MAX_BITS) - 1u)
  |  |  ------------------
  |  |  |  |   35|    852|#define HB_OT_MAP_MAX_BITS 8u
  |  |  ------------------
  ------------------
  |  Branch (50:9): [True: 0, False: 852]
  |  Branch (50:45): [True: 0, False: 0]
  ------------------
   51|      0|    {
   52|       |      /* Maybe we can do better than unsafe-to-break all; but since we are
   53|       |       * changing random state, it would be hard to track that.  Good 'nough. */
   54|      0|      c->buffer->unsafe_to_break (0, c->buffer->len);
   55|      0|      alt_index = c->random_number () % count + 1;
   56|      0|    }
   57|       |
   58|    852|    if (unlikely (alt_index > count || alt_index == 0)) return_trace (false);
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 852]
  |  |  |  Branch (259:47): [True: 0, False: 852]
  |  |  |  Branch (259:47): [True: 0, False: 852]
  |  |  ------------------
  ------------------
                  if (unlikely (alt_index > count || alt_index == 0)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   59|       |
   60|    852|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  1.70k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    852|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (60:35): [True: 0, False: 852]
  ------------------
   61|      0|    {
   62|      0|      c->buffer->sync_so_far ();
   63|      0|      c->buffer->message (c->font,
   64|      0|			  "replacing glyph at %u (alternate substitution)",
   65|      0|			  c->buffer->idx);
   66|      0|    }
   67|       |
   68|    852|    c->replace_glyph (alternates[alt_index - 1]);
   69|       |
   70|    852|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  1.70k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    852|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (70:35): [True: 0, False: 852]
  ------------------
   71|      0|    {
   72|      0|      c->buffer->message (c->font,
   73|      0|			  "replaced glyph at %u (alternate substitution)",
   74|      0|			  c->buffer->idx - 1u);
   75|      0|    }
   76|       |
   77|    852|    return_trace (true);
  ------------------
  |  |  349|    852|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    852|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|    852|  }

_ZNK2OT6Layout9GSUB_impl14AlternateSubst8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   25|  28.9k|  {
   26|  28.9k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  28.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.94k, False: 25.9k]
  |  |  ------------------
  ------------------
   27|  25.9k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  25.9k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|  25.9k|    switch (u.format) {
   29|  5.18k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 5.18k, False: 20.7k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|  3.34k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 3.34k, False: 22.6k]
  ------------------
   32|      0|#endif
   33|  17.4k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  17.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 17.4k, False: 8.53k]
  ------------------
   34|  25.9k|    }
   35|  25.9k|  }
_ZNK2OT6Layout9GSUB_impl14AlternateSubst8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
   25|  1.34k|  {
   26|  1.34k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  1.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.34k]
  |  |  ------------------
  ------------------
   27|  1.34k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  1.34k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|  1.34k|    switch (u.format) {
   29|    265|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    265|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    265|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 265, False: 1.08k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|     38|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|     38|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     38|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 38, False: 1.30k]
  ------------------
   32|      0|#endif
   33|  1.04k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 1.04k, False: 303]
  ------------------
   34|  1.34k|    }
   35|  1.34k|  }
_ZNK2OT6Layout9GSUB_impl14AlternateSubst8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   25|  9.56k|  {
   26|  9.56k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  9.56k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 9.56k]
  |  |  ------------------
  ------------------
   27|  9.56k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  9.56k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|  9.56k|    switch (u.format) {
   29|  1.00k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 1.00k, False: 8.55k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|    450|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    450|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    450|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 450, False: 9.11k]
  ------------------
   32|      0|#endif
   33|  8.10k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  8.10k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 8.10k, False: 1.45k]
  ------------------
   34|  9.56k|    }
   35|  9.56k|  }

_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  5.18k|  {
   27|  5.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  5.18k|    return_trace (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
  ------------------
  |  |  349|  10.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5.10k, False: 89]
  |  |  |  Branch (349:45): [True: 4.80k, False: 292]
  |  |  ------------------
  ------------------
   29|  5.18k|  }
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  3.34k|  {
   27|  3.34k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.34k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  3.34k|    return_trace (coverage.sanitize (c, this) && alternateSet.sanitize (c, this));
  ------------------
  |  |  349|  6.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.23k, False: 109]
  |  |  |  Branch (349:45): [True: 2.94k, False: 292]
  |  |  ------------------
  ------------------
   29|  3.34k|  }
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   73|  1.41M|  {
   74|  1.41M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.41M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   75|       |
   76|  1.41M|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
   77|  1.41M|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  1.41M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 489k, False: 928k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   489k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   489k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|       |
   79|   928k|    return_trace ((this+alternateSet[index]).apply (c));
  ------------------
  |  |  349|   928k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   928k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   80|  1.41M|  }
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   73|   130k|  {
   74|   130k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   130k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   75|       |
   76|   130k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
   77|   130k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   130k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 88.3k, False: 41.9k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  88.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  88.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|       |
   79|  41.9k|    return_trace ((this+alternateSet[index]).apply (c));
  ------------------
  |  |  349|  41.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   80|   130k|  }
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   62|    265|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|    265|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (62:12): [True: 0, False: 265]
  |  Branch (62:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   62|     38|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|     38|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (62:12): [True: 0, False: 38]
  |  Branch (62:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   59|  1.00k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   59|    450|  const Coverage &get_coverage () const { return this+coverage; }

_ZNK2OT6Layout4GSUB10get_lookupEj:
   26|  5.40M|  { return static_cast<const SubstLookup &> (GSUBGPOS::get_lookup (i)); }
_ZNK2OT6Layout4GSUB8sanitizeEP21hb_sanitize_context_t:
   35|  24.8k|  {
   36|  24.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   37|  24.8k|    return_trace (GSUBGPOS::sanitize<SubstLookup> (c));
  ------------------
  |  |  349|  24.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   38|  24.8k|  }
_ZN2OT18GSUB_accelerator_tC2EP9hb_face_t:
   55|  32.9k|  GSUB_accelerator_t (hb_face_t *face) : Layout::GSUB::accelerator_t (face) {}

_ZN2OT6Layout9GSUB_impl8LigatureINS0_10SmallTypesEE9serializeI10hb_array_tIKNS_11HBGlyphID16EELPv0EEEbP22hb_serialize_context_tjT_:
  156|  14.8k|  {
  157|  14.8k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  14.8k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  158|  14.8k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 56, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|     56|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     56|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  159|  14.8k|    ligGlyph = ligature;
  160|  14.8k|    if (unlikely (!component.serialize (c, components))) return_trace (false);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!component.serialize (c, components))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  161|  14.8k|    return_trace (true);
  ------------------
  |  |  349|  14.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  162|  14.8k|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   24|   155k|  {
   25|   155k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   155k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   26|   155k|    return_trace (ligGlyph.sanitize (c) && component.sanitize (c));
  ------------------
  |  |  349|   305k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   155k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 149k, False: 6.85k]
  |  |  |  Branch (349:45): [True: 146k, False: 2.76k]
  |  |  ------------------
  ------------------
   27|   155k|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   24|  24.5k|  {
   25|  24.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   26|  24.5k|    return_trace (ligGlyph.sanitize (c) && component.sanitize (c));
  ------------------
  |  |  349|  47.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 23.2k, False: 1.32k]
  |  |  |  Branch (349:45): [True: 22.7k, False: 542]
  |  |  ------------------
  ------------------
   27|  24.5k|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   60|  16.1M|  {
   61|  16.1M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  16.1M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   62|  16.1M|    unsigned int count = component.lenP1;
   63|       |
   64|  16.1M|    if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  259|  16.1M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14.9M, False: 1.24M]
  |  |  ------------------
  ------------------
                  if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  349|  14.9M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.9M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   65|       |
   66|       |    /* Special-case to make it in-place and not consider this
   67|       |     * as a "ligated" substitution. */
   68|  1.24M|    if (unlikely (count == 1))
  ------------------
  |  |  259|  1.24M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28.1k, False: 1.21M]
  |  |  ------------------
  ------------------
   69|  28.1k|    {
   70|       |
   71|  28.1k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  56.3k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  28.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (71:37): [True: 0, False: 28.1k]
  ------------------
   72|      0|      {
   73|      0|	c->buffer->sync_so_far ();
   74|      0|	c->buffer->message (c->font,
   75|      0|			    "replacing glyph at %u (ligature substitution)",
   76|      0|			    c->buffer->idx);
   77|      0|      }
   78|       |
   79|  28.1k|      c->replace_glyph (ligGlyph);
   80|       |
   81|  28.1k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  56.3k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  28.1k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (81:37): [True: 0, False: 28.1k]
  ------------------
   82|      0|      {
   83|      0|	c->buffer->message (c->font,
   84|      0|			    "replaced glyph at %u (ligature substitution)",
   85|      0|			    c->buffer->idx - 1u);
   86|      0|      }
   87|       |
   88|  28.1k|      return_trace (true);
  ------------------
  |  |  349|  28.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  28.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   89|  28.1k|    }
   90|       |
   91|  1.21M|    unsigned int total_component_count = 0;
   92|       |
   93|  1.21M|    unsigned int match_end = 0;
   94|  1.21M|    unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
   95|       |
   96|  1.21M|    if (likely (!match_input (c, count,
  ------------------
  |  |  258|  1.21M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 734k, False: 483k]
  |  |  ------------------
  ------------------
   97|  1.21M|                              &component[1],
   98|  1.21M|                              match_glyph,
   99|  1.21M|                              nullptr,
  100|  1.21M|                              &match_end,
  101|  1.21M|                              match_positions,
  102|  1.21M|                              &total_component_count)))
  103|   734k|    {
  104|   734k|      c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
  105|   734k|      return_trace (false);
  ------------------
  |  |  349|   734k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   734k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  106|   734k|    }
  107|       |
  108|   483k|    unsigned pos = 0;
  109|   483k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   966k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   483k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (109:35): [True: 0, False: 483k]
  ------------------
  110|      0|    {
  111|      0|      unsigned delta = c->buffer->sync_so_far ();
  112|       |
  113|      0|      pos = c->buffer->idx;
  114|       |
  115|      0|      char buf[HB_MAX_CONTEXT_LENGTH * 16] = {0};
  116|      0|      char *p = buf;
  117|       |
  118|      0|      match_end += delta;
  119|      0|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (119:28): [True: 0, False: 0]
  ------------------
  120|      0|      {
  121|      0|	match_positions[i] += delta;
  122|      0|	if (i)
  ------------------
  |  Branch (122:6): [True: 0, False: 0]
  ------------------
  123|      0|	  *p++ = ',';
  124|      0|	snprintf (p, sizeof(buf) - (p - buf), "%u", match_positions[i]);
  125|      0|	p += strlen(p);
  126|      0|      }
  127|       |
  128|      0|      c->buffer->message (c->font,
  129|      0|			  "ligating glyphs at %s",
  130|      0|			  buf);
  131|      0|    }
  132|       |
  133|   483k|    ligate_input (c,
  134|   483k|                  count,
  135|   483k|                  match_positions,
  136|   483k|                  match_end,
  137|   483k|                  ligGlyph,
  138|   483k|                  total_component_count);
  139|       |
  140|   483k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   966k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   483k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (140:35): [True: 0, False: 483k]
  ------------------
  141|      0|    {
  142|      0|      c->buffer->sync_so_far ();
  143|      0|      c->buffer->message (c->font,
  144|      0|			  "ligated glyph at %u",
  145|      0|			  pos);
  146|      0|    }
  147|       |
  148|   483k|    return_trace (true);
  ------------------
  |  |  349|   483k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   483k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  149|  1.21M|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   60|   154k|  {
   61|   154k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   154k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   62|   154k|    unsigned int count = component.lenP1;
   63|       |
   64|   154k|    if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  259|   154k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 82.7k, False: 72.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!count)) return_trace (false);
  ------------------
  |  |  349|  82.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  82.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   65|       |
   66|       |    /* Special-case to make it in-place and not consider this
   67|       |     * as a "ligated" substitution. */
   68|  72.1k|    if (unlikely (count == 1))
  ------------------
  |  |  259|  72.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14.2k, False: 57.8k]
  |  |  ------------------
  ------------------
   69|  14.2k|    {
   70|       |
   71|  14.2k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  28.5k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  14.2k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (71:37): [True: 0, False: 14.2k]
  ------------------
   72|      0|      {
   73|      0|	c->buffer->sync_so_far ();
   74|      0|	c->buffer->message (c->font,
   75|      0|			    "replacing glyph at %u (ligature substitution)",
   76|      0|			    c->buffer->idx);
   77|      0|      }
   78|       |
   79|  14.2k|      c->replace_glyph (ligGlyph);
   80|       |
   81|  14.2k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  28.5k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  14.2k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (81:37): [True: 0, False: 14.2k]
  ------------------
   82|      0|      {
   83|      0|	c->buffer->message (c->font,
   84|      0|			    "replaced glyph at %u (ligature substitution)",
   85|      0|			    c->buffer->idx - 1u);
   86|      0|      }
   87|       |
   88|  14.2k|      return_trace (true);
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   89|  14.2k|    }
   90|       |
   91|  57.8k|    unsigned int total_component_count = 0;
   92|       |
   93|  57.8k|    unsigned int match_end = 0;
   94|  57.8k|    unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
   95|       |
   96|  57.8k|    if (likely (!match_input (c, count,
  ------------------
  |  |  258|  57.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 54.7k, False: 3.08k]
  |  |  ------------------
  ------------------
   97|  57.8k|                              &component[1],
   98|  57.8k|                              match_glyph,
   99|  57.8k|                              nullptr,
  100|  57.8k|                              &match_end,
  101|  57.8k|                              match_positions,
  102|  57.8k|                              &total_component_count)))
  103|  54.7k|    {
  104|  54.7k|      c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
  105|  54.7k|      return_trace (false);
  ------------------
  |  |  349|  54.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  54.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  106|  54.7k|    }
  107|       |
  108|  3.08k|    unsigned pos = 0;
  109|  3.08k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  6.17k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  3.08k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (109:35): [True: 0, False: 3.08k]
  ------------------
  110|      0|    {
  111|      0|      unsigned delta = c->buffer->sync_so_far ();
  112|       |
  113|      0|      pos = c->buffer->idx;
  114|       |
  115|      0|      char buf[HB_MAX_CONTEXT_LENGTH * 16] = {0};
  116|      0|      char *p = buf;
  117|       |
  118|      0|      match_end += delta;
  119|      0|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (119:28): [True: 0, False: 0]
  ------------------
  120|      0|      {
  121|      0|	match_positions[i] += delta;
  122|      0|	if (i)
  ------------------
  |  Branch (122:6): [True: 0, False: 0]
  ------------------
  123|      0|	  *p++ = ',';
  124|      0|	snprintf (p, sizeof(buf) - (p - buf), "%u", match_positions[i]);
  125|      0|	p += strlen(p);
  126|      0|      }
  127|       |
  128|      0|      c->buffer->message (c->font,
  129|      0|			  "ligating glyphs at %s",
  130|      0|			  buf);
  131|      0|    }
  132|       |
  133|  3.08k|    ligate_input (c,
  134|  3.08k|                  count,
  135|  3.08k|                  match_positions,
  136|  3.08k|                  match_end,
  137|  3.08k|                  ligGlyph,
  138|  3.08k|                  total_component_count);
  139|       |
  140|  3.08k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  6.17k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  3.08k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (140:35): [True: 0, False: 3.08k]
  ------------------
  141|      0|    {
  142|      0|      c->buffer->sync_so_far ();
  143|      0|      c->buffer->message (c->font,
  144|      0|			  "ligated glyph at %u",
  145|      0|			  pos);
  146|      0|    }
  147|       |
  148|  3.08k|    return_trace (true);
  ------------------
  |  |  349|  3.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  149|  57.8k|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   48|  1.16M|  {
   49|  1.16M|    if (c->len != component.lenP1)
  ------------------
  |  Branch (49:9): [True: 1.11M, False: 53.7k]
  ------------------
   50|  1.11M|      return false;
   51|       |
   52|  54.4k|    for (unsigned int i = 1; i < c->len; i++)
  ------------------
  |  Branch (52:30): [True: 53.8k, False: 574]
  ------------------
   53|  53.8k|      if (likely (c->glyphs[i] != component[i]))
  ------------------
  |  |  258|  53.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 53.2k, False: 625]
  |  |  ------------------
  ------------------
   54|  53.2k|        return false;
   55|       |
   56|    574|    return true;
   57|  53.7k|  }
_ZNK2OT6Layout9GSUB_impl8LigatureINS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   48|  3.61k|  {
   49|  3.61k|    if (c->len != component.lenP1)
  ------------------
  |  Branch (49:9): [True: 3.32k, False: 290]
  ------------------
   50|  3.32k|      return false;
   51|       |
   52|    294|    for (unsigned int i = 1; i < c->len; i++)
  ------------------
  |  Branch (52:30): [True: 290, False: 4]
  ------------------
   53|    290|      if (likely (c->glyphs[i] != component[i]))
  ------------------
  |  |  258|    290|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 286, False: 4]
  |  |  ------------------
  ------------------
   54|    286|        return false;
   55|       |
   56|      4|    return true;
   57|    290|  }

_ZN2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE9serializeEP22hb_serialize_context_t10hb_array_tIKNS_11HBGlyphID16EES7_IKjERSA_:
  150|  5.16k|  {
  151|  5.16k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  5.16k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  152|  5.16k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 27, False: 5.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|     27|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     27|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|  5.13k|    if (unlikely (!ligature.serialize (c, ligatures.length))) return_trace (false);
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!ligature.serialize (c, ligatures.length))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  154|  19.9k|    for (unsigned int i = 0; i < ligatures.length; i++)
  ------------------
  |  Branch (154:30): [True: 14.8k, False: 5.07k]
  ------------------
  155|  14.8k|    {
  156|  14.8k|      unsigned int component_count = (unsigned) hb_max ((int) component_count_list[i] - 1, 0);
  157|  14.8k|      if (unlikely (!ligature[i].serialize_serialize (c,
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 56, False: 14.8k]
  |  |  ------------------
  ------------------
  158|  14.8k|                                                      ligatures[i],
  159|  14.8k|                                                      component_list.sub_array (0, component_count))))
  160|     56|        return_trace (false);
  ------------------
  |  |  349|     56|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     56|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  161|  14.8k|      component_list += component_count;
  162|  14.8k|    }
  163|  5.07k|    return_trace (true);
  ------------------
  |  |  349|  5.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  164|  5.13k|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   22|  45.1k|  {
   23|  45.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   24|  45.1k|    return_trace (ligature.sanitize (c, this));
  ------------------
  |  |  349|  45.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   25|  45.1k|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   22|  7.82k|  {
   23|  7.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   24|  7.82k|    return_trace (ligature.sanitize (c, this));
  ------------------
  |  |  349|  7.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   25|  7.82k|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   81|  2.26M|  {
   82|  2.26M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.26M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   83|       |
   84|  2.26M|    unsigned int num_ligs = ligature.len;
   85|       |
   86|  2.26M|#ifndef HB_NO_OT_LIGATURES_FAST_PATH
   87|  2.26M|    if (HB_OPTIMIZE_SIZE_VAL || num_ligs <= 2)
  ------------------
  |  |  200|  4.52M|#define HB_OPTIMIZE_SIZE_VAL 0
  |  |  ------------------
  |  |  |  Branch (200:30): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (87:33): [True: 655k, False: 1.60M]
  ------------------
   88|   655k|#endif
   89|   655k|    {
   90|   656k|    slow:
   91|   757k|      for (unsigned int i = 0; i < num_ligs; i++)
  ------------------
  |  Branch (91:32): [True: 104k, False: 652k]
  ------------------
   92|   104k|      {
   93|   104k|	const auto &lig = this+ligature.arrayZ[i];
   94|   104k|	if (lig.apply (c)) return_trace (true);
  ------------------
  |  |  349|  3.65k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (94:6): [True: 3.65k, False: 101k]
  ------------------
   95|   104k|      }
   96|   656k|      return_trace (false);
  ------------------
  |  |  349|   652k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   652k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   97|   656k|    }
   98|       |
   99|       |    /* This version is optimized for speed by matching the first component
  100|       |     * of the ligature here, instead of calling into the ligation code. */
  101|       |
  102|  1.60M|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  103|  1.60M|    skippy_iter.reset (c->buffer->idx, 1);
  104|  1.60M|    skippy_iter.set_match_func (match_always, nullptr);
  105|  1.60M|    skippy_iter.set_glyph_data ((HBUINT16 *) nullptr);
  106|  1.60M|    unsigned unsafe_to;
  107|  1.60M|    hb_codepoint_t first = (unsigned) -1;
  108|  1.60M|    bool matched = skippy_iter.next (&unsafe_to);
  109|  1.60M|    if (likely (matched))
  ------------------
  |  |  258|  1.60M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.34M, False: 258k]
  |  |  ------------------
  ------------------
  110|  1.34M|    {
  111|  1.34M|      first = c->buffer->info[skippy_iter.idx].codepoint;
  112|  1.34M|      unsafe_to = skippy_iter.idx + 1;
  113|       |
  114|  1.34M|      if (skippy_iter.may_skip (c->buffer->info[skippy_iter.idx]))
  ------------------
  |  Branch (114:11): [True: 1.63k, False: 1.34M]
  ------------------
  115|  1.63k|      {
  116|       |	/* Can't use the fast path if eg. the next char is a default-ignorable
  117|       |	 * or other skippable. */
  118|  1.63k|        goto slow;
  119|  1.63k|      }
  120|  1.34M|    }
  121|       |
  122|  1.60M|    bool unsafe_to_concat = false;
  123|       |
  124|  19.7M|    for (unsigned int i = 0; i < num_ligs; i++)
  ------------------
  |  Branch (124:30): [True: 18.6M, False: 1.09M]
  ------------------
  125|  18.6M|    {
  126|  18.6M|      const auto &lig = this+ligature.arrayZ[i];
  127|  18.6M|      if (unlikely (lig.component.lenP1 <= 1) ||
  ------------------
  |  |  259|  37.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14.8M, False: 3.78M]
  |  |  ------------------
  ------------------
  128|  18.6M|	  lig.component[1] == first)
  ------------------
  |  Branch (128:4): [True: 1.18M, False: 2.59M]
  ------------------
  129|  16.0M|      {
  130|  16.0M|	if (lig.apply (c))
  ------------------
  |  Branch (130:6): [True: 507k, False: 15.5M]
  ------------------
  131|   507k|	{
  132|   507k|	  if (unsafe_to_concat)
  ------------------
  |  Branch (132:8): [True: 85.1k, False: 422k]
  ------------------
  133|  85.1k|	    c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to);
  134|   507k|	  return_trace (true);
  ------------------
  |  |  349|   507k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   507k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  135|   507k|	}
  136|  16.0M|      }
  137|  2.59M|      else if (likely (lig.component.lenP1 > 1))
  ------------------
  |  |  258|  2.59M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.59M, False: 0]
  |  |  ------------------
  ------------------
  138|  2.59M|        unsafe_to_concat = true;
  139|  18.6M|    }
  140|  1.09M|    if (likely (unsafe_to_concat))
  ------------------
  |  |  258|  1.09M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 999k, False: 99.1k]
  |  |  ------------------
  ------------------
  141|   999k|      c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to);
  142|       |
  143|  1.09M|    return_trace (false);
  ------------------
  |  |  349|  1.09M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.09M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  144|  1.60M|  }
_ZN2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE12match_alwaysER15hb_glyph_info_tjPKv:
   76|  1.34M|  {
   77|  1.34M|    return true;
   78|  1.34M|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   81|  86.4k|  {
   82|  86.4k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  86.4k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   83|       |
   84|  86.4k|    unsigned int num_ligs = ligature.len;
   85|       |
   86|  86.4k|#ifndef HB_NO_OT_LIGATURES_FAST_PATH
   87|  86.4k|    if (HB_OPTIMIZE_SIZE_VAL || num_ligs <= 2)
  ------------------
  |  |  200|   172k|#define HB_OPTIMIZE_SIZE_VAL 0
  |  |  ------------------
  |  |  |  Branch (200:30): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (87:33): [True: 67.8k, False: 18.5k]
  ------------------
   88|  67.8k|#endif
   89|  67.8k|    {
   90|  68.3k|    slow:
   91|   129k|      for (unsigned int i = 0; i < num_ligs; i++)
  ------------------
  |  Branch (91:32): [True: 64.0k, False: 65.3k]
  ------------------
   92|  64.0k|      {
   93|  64.0k|	const auto &lig = this+ligature.arrayZ[i];
   94|  64.0k|	if (lig.apply (c)) return_trace (true);
  ------------------
  |  |  349|  3.01k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.01k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (94:6): [True: 3.01k, False: 60.9k]
  ------------------
   95|  64.0k|      }
   96|  68.3k|      return_trace (false);
  ------------------
  |  |  349|  65.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  65.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   97|  68.3k|    }
   98|       |
   99|       |    /* This version is optimized for speed by matching the first component
  100|       |     * of the ligature here, instead of calling into the ligation code. */
  101|       |
  102|  18.5k|    hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
  103|  18.5k|    skippy_iter.reset (c->buffer->idx, 1);
  104|  18.5k|    skippy_iter.set_match_func (match_always, nullptr);
  105|  18.5k|    skippy_iter.set_glyph_data ((HBUINT16 *) nullptr);
  106|  18.5k|    unsigned unsafe_to;
  107|  18.5k|    hb_codepoint_t first = (unsigned) -1;
  108|  18.5k|    bool matched = skippy_iter.next (&unsafe_to);
  109|  18.5k|    if (likely (matched))
  ------------------
  |  |  258|  18.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 17.6k, False: 932]
  |  |  ------------------
  ------------------
  110|  17.6k|    {
  111|  17.6k|      first = c->buffer->info[skippy_iter.idx].codepoint;
  112|  17.6k|      unsafe_to = skippy_iter.idx + 1;
  113|       |
  114|  17.6k|      if (skippy_iter.may_skip (c->buffer->info[skippy_iter.idx]))
  ------------------
  |  Branch (114:11): [True: 432, False: 17.2k]
  ------------------
  115|    432|      {
  116|       |	/* Can't use the fast path if eg. the next char is a default-ignorable
  117|       |	 * or other skippable. */
  118|    432|        goto slow;
  119|    432|      }
  120|  17.6k|    }
  121|       |
  122|  18.1k|    bool unsafe_to_concat = false;
  123|       |
  124|   105k|    for (unsigned int i = 0; i < num_ligs; i++)
  ------------------
  |  Branch (124:30): [True: 102k, False: 3.77k]
  ------------------
  125|   102k|    {
  126|   102k|      const auto &lig = this+ligature.arrayZ[i];
  127|   102k|      if (unlikely (lig.component.lenP1 <= 1) ||
  ------------------
  |  |  259|   204k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 84.2k, False: 17.8k]
  |  |  ------------------
  ------------------
  128|   102k|	  lig.component[1] == first)
  ------------------
  |  Branch (128:4): [True: 6.56k, False: 11.2k]
  ------------------
  129|  90.8k|      {
  130|  90.8k|	if (lig.apply (c))
  ------------------
  |  Branch (130:6): [True: 14.3k, False: 76.4k]
  ------------------
  131|  14.3k|	{
  132|  14.3k|	  if (unsafe_to_concat)
  ------------------
  |  Branch (132:8): [True: 9.32k, False: 5.04k]
  ------------------
  133|  9.32k|	    c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to);
  134|  14.3k|	  return_trace (true);
  ------------------
  |  |  349|  14.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  135|  14.3k|	}
  136|  90.8k|      }
  137|  11.2k|      else if (likely (lig.component.lenP1 > 1))
  ------------------
  |  |  258|  11.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 11.2k, False: 0]
  |  |  ------------------
  ------------------
  138|  11.2k|        unsafe_to_concat = true;
  139|   102k|    }
  140|  3.77k|    if (likely (unsafe_to_concat))
  ------------------
  |  |  258|  3.77k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.24k, False: 2.52k]
  |  |  ------------------
  ------------------
  141|  1.24k|      c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to);
  142|       |
  143|  3.77k|    return_trace (false);
  ------------------
  |  |  349|  3.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  144|  18.1k|  }
_ZN2OT6Layout9GSUB_impl11LigatureSetINS0_11MediumTypesEE12match_alwaysER15hb_glyph_info_tjPKv:
   76|  17.6k|  {
   77|  17.6k|    return true;
   78|  17.6k|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   66|  51.9k|  {
   67|  51.9k|    return
   68|  51.9k|    + hb_iter (ligature)
   69|  51.9k|    | hb_map (hb_add (this))
   70|  51.9k|    | hb_map ([c] (const Ligature<Types> &_) { return _.would_apply (c); })
   71|  51.9k|    | hb_any
   72|  51.9k|    ;
   73|  51.9k|  }
_ZNK2OT6Layout9GSUB_impl11LigatureSetINS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   66|  3.17k|  {
   67|  3.17k|    return
   68|  3.17k|    + hb_iter (ligature)
   69|  3.17k|    | hb_map (hb_add (this))
   70|  3.17k|    | hb_map ([c] (const Ligature<Types> &_) { return _.would_apply (c); })
   71|  3.17k|    | hb_any
   72|  3.17k|    ;
   73|  3.17k|  }
_ZZNK2OT6Layout9GSUB_impl11LigatureSetINS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tEENKUlRKNS1_8LigatureIS3_EEE_clESA_:
   70|  1.16M|    | hb_map ([c] (const Ligature<Types> &_) { return _.would_apply (c); })
_ZZNK2OT6Layout9GSUB_impl11LigatureSetINS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tEENKUlRKNS1_8LigatureIS3_EEE_clESA_:
   70|  3.61k|    | hb_map ([c] (const Ligature<Types> &_) { return _.would_apply (c); })

_ZN2OT6Layout9GSUB_impl13LigatureSubst9serializeEP22hb_serialize_context_t17hb_sorted_array_tIKNS_11HBGlyphID16EE10hb_array_tIKjES9_IS7_ESB_SC_:
   46|    850|  {
   47|    850|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    850|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   48|    850|    if (unlikely (!c->extend_min (u.format))) return_trace (false);
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (u.format))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   49|    850|    unsigned int format = 1;
   50|    850|    u.format = format;
   51|    850|    switch (u.format) {
   52|    850|    case 1: return_trace (u.format1.serialize (c,
  ------------------
  |  |  349|    850|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    850|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (52:5): [True: 850, False: 0]
  ------------------
   53|      0|                                               first_glyphs,
   54|      0|                                               ligature_per_first_glyph_count_list,
   55|      0|                                               ligatures_list,
   56|      0|                                               component_count_list,
   57|      0|                                               component_list));
   58|      0|    default:return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (58:5): [True: 0, False: 850]
  ------------------
   59|    850|    }
   60|    850|  }
_ZNK2OT6Layout9GSUB_impl13LigatureSubst8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   25|  86.5k|  {
   26|  86.5k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  86.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.66k, False: 80.8k]
  |  |  ------------------
  ------------------
   27|  80.8k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  80.8k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|  80.8k|    switch (u.format) {
   29|  15.8k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  15.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 15.8k, False: 65.0k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|  6.60k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 6.60k, False: 74.2k]
  ------------------
   32|      0|#endif
   33|  58.4k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  58.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  58.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 58.4k, False: 22.4k]
  ------------------
   34|  80.8k|    }
   35|  80.8k|  }
_ZNK2OT6Layout9GSUB_impl13LigatureSubst8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
   25|   775k|  {
   26|   775k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   775k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 775k]
  |  |  ------------------
  ------------------
   27|   775k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   775k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|   775k|    switch (u.format) {
   29|  71.8k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  71.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  71.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 71.8k, False: 703k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|  21.6k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  21.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 21.6k, False: 753k]
  ------------------
   32|      0|#endif
   33|   681k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|   681k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   681k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 681k, False: 93.4k]
  ------------------
   34|   775k|    }
   35|   775k|  }
_ZNK2OT6Layout9GSUB_impl13LigatureSubst8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   25|  34.5k|  {
   26|  34.5k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  34.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 34.5k]
  |  |  ------------------
  ------------------
   27|  34.5k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  34.5k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   28|  34.5k|    switch (u.format) {
   29|  5.16k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 5.16k, False: 29.3k]
  ------------------
   30|      0|#ifndef HB_NO_BEYOND_64K
   31|  1.01k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.01k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.01k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 1.01k, False: 33.5k]
  ------------------
   32|      0|#endif
   33|  28.3k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  28.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  28.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 28.3k, False: 6.18k]
  ------------------
   34|  34.5k|    }
   35|  34.5k|  }

_ZN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_10SmallTypesEE9serializeEP22hb_serialize_context_t17hb_sorted_array_tIKNS_11HBGlyphID16EE10hb_array_tIKjESB_IS9_ESD_SE_:
   98|    850|  {
   99|    850|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    850|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  100|    850|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  101|    850|    if (unlikely (!ligatureSet.serialize (c, first_glyphs.length))) return_trace (false);
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!ligatureSet.serialize (c, first_glyphs.length))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  102|  5.92k|    for (unsigned int i = 0; i < first_glyphs.length; i++)
  ------------------
  |  Branch (102:30): [True: 5.16k, False: 767]
  ------------------
  103|  5.16k|    {
  104|  5.16k|      unsigned int ligature_count = ligature_per_first_glyph_count_list[i];
  105|  5.16k|      if (unlikely (!ligatureSet[i]
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 83, False: 5.07k]
  |  |  ------------------
  ------------------
  106|  5.16k|                        .serialize_serialize (c,
  107|  5.16k|                                              ligatures_list.sub_array (0, ligature_count),
  108|  5.16k|                                              component_count_list.sub_array (0, ligature_count),
  109|  5.16k|                                              component_list))) return_trace (false);
  ------------------
  |  |  349|     83|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     83|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  110|  5.07k|      ligatures_list += ligature_count;
  111|  5.07k|      component_count_list += ligature_count;
  112|  5.07k|    }
  113|    767|    return_trace (coverage.serialize_serialize (c, first_glyphs));
  ------------------
  |  |  349|    767|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    767|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  114|    850|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  15.8k|  {
   27|  15.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  15.8k|    return_trace (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
  ------------------
  |  |  349|  31.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.7k, False: 113]
  |  |  |  Branch (349:45): [True: 14.9k, False: 778]
  |  |  ------------------
  ------------------
   29|  15.8k|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  6.60k|  {
   27|  6.60k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.60k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  6.60k|    return_trace (coverage.sanitize (c, this) && ligatureSet.sanitize (c, this));
  ------------------
  |  |  349|  13.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.46k, False: 138]
  |  |  |  Branch (349:45): [True: 5.93k, False: 533]
  |  |  ------------------
  ------------------
   29|  6.60k|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   82|  3.08M|  {
   83|  3.08M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  3.08M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   84|       |
   85|  3.08M|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint);
   86|  3.08M|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  3.08M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 819k, False: 2.26M]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   819k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   819k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   87|       |
   88|  2.26M|    const auto &lig_set = this+ligatureSet[index];
   89|  2.26M|    return_trace (lig_set.apply (c));
  ------------------
  |  |  349|  2.26M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.26M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   90|  3.08M|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   82|   134k|  {
   83|   134k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   134k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   84|       |
   85|   134k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint);
   86|   134k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   134k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 47.8k, False: 86.4k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  47.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   87|       |
   88|  86.4k|    const auto &lig_set = this+ligatureSet[index];
   89|  86.4k|    return_trace (lig_set.apply (c));
  ------------------
  |  |  349|  86.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  86.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   90|   134k|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   73|  71.8k|  {
   74|  71.8k|    unsigned int index = (this+coverage).get_coverage (c->glyphs[0]);
   75|  71.8k|    if (likely (index == NOT_COVERED)) return false;
  ------------------
  |  |  258|  71.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 19.8k, False: 51.9k]
  |  |  ------------------
  ------------------
   76|       |
   77|  51.9k|    const auto &lig_set = this+ligatureSet[index];
   78|  51.9k|    return lig_set.would_apply (c);
   79|  71.8k|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   73|  21.6k|  {
   74|  21.6k|    unsigned int index = (this+coverage).get_coverage (c->glyphs[0]);
   75|  21.6k|    if (likely (index == NOT_COVERED)) return false;
  ------------------
  |  |  258|  21.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 18.4k, False: 3.17k]
  |  |  ------------------
  ------------------
   76|       |
   77|  3.17k|    const auto &lig_set = this+ligatureSet[index];
   78|  3.17k|    return lig_set.would_apply (c);
   79|  21.6k|  }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   70|  5.16k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   70|  1.01k|  const Coverage &get_coverage () const { return this+coverage; }

_ZNK2OT6Layout9GSUB_impl13MultipleSubst8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   26|   139k|  {
   27|   139k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   139k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15.9k, False: 123k]
  |  |  ------------------
  ------------------
   28|   123k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   123k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   29|   123k|    switch (u.format) {
   30|  23.3k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  23.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 23.3k, False: 100k]
  ------------------
   31|      0|#ifndef HB_NO_BEYOND_64K
   32|  4.29k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 4.29k, False: 119k]
  ------------------
   33|      0|#endif
   34|  96.2k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  96.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  96.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 96.2k, False: 27.6k]
  ------------------
   35|   123k|    }
   36|   123k|  }
_ZNK2OT6Layout9GSUB_impl13MultipleSubst8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
   26|  1.67M|  {
   27|  1.67M|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  1.67M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.67M]
  |  |  ------------------
  ------------------
   28|  1.67M|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  1.67M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   29|  1.67M|    switch (u.format) {
   30|   161k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   161k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   161k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 161k, False: 1.50M]
  ------------------
   31|      0|#ifndef HB_NO_BEYOND_64K
   32|  2.18k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 2.18k, False: 1.66M]
  ------------------
   33|      0|#endif
   34|  1.50M|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.50M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.50M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 1.50M, False: 163k]
  ------------------
   35|  1.67M|    }
   36|  1.67M|  }
_ZNK2OT6Layout9GSUB_impl13MultipleSubst8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   26|  61.1k|  {
   27|  61.1k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  61.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 61.1k]
  |  |  ------------------
  ------------------
   28|  61.1k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  61.1k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   29|  61.1k|    switch (u.format) {
   30|  7.13k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 7.13k, False: 54.0k]
  ------------------
   31|      0|#ifndef HB_NO_BEYOND_64K
   32|    874|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    874|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    874|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 874, False: 60.2k]
  ------------------
   33|      0|#endif
   34|  53.1k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  53.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  53.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 53.1k, False: 8.00k]
  ------------------
   35|  61.1k|    }
   36|  61.1k|  }

_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  23.3k|  {
   27|  23.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  23.3k|    return_trace (coverage.sanitize (c, this) && sequence.sanitize (c, this));
  ------------------
  |  |  349|  46.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 23.2k, False: 100]
  |  |  |  Branch (349:45): [True: 21.7k, False: 1.49k]
  |  |  ------------------
  ------------------
   29|  23.3k|  }
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  4.29k|  {
   27|  4.29k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.29k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  4.29k|    return_trace (coverage.sanitize (c, this) && sequence.sanitize (c, this));
  ------------------
  |  |  349|  8.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.18k, False: 108]
  |  |  |  Branch (349:45): [True: 3.67k, False: 514]
  |  |  ------------------
  ------------------
   29|  4.29k|  }
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   65|  2.88M|  {
   66|  2.88M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.88M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   67|       |
   68|  2.88M|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
   69|  2.88M|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  2.88M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 849k, False: 2.03M]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   849k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   849k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   70|       |
   71|  2.03M|    return_trace ((this+sequence[index]).apply (c));
  ------------------
  |  |  349|  2.03M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.03M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   72|  2.88M|  }
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   65|  25.7k|  {
   66|  25.7k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  25.7k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   67|       |
   68|  25.7k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
   69|  25.7k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  25.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.95k, False: 22.7k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  2.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   70|       |
   71|  22.7k|    return_trace ((this+sequence[index]).apply (c));
  ------------------
  |  |  349|  22.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  22.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   72|  25.7k|  }
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   62|   161k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|   161k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (62:12): [True: 0, False: 161k]
  |  Branch (62:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   62|  2.18k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|  2.18k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (62:12): [True: 0, False: 2.18k]
  |  Branch (62:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_10SmallTypesEE12get_coverageEv:
   59|  7.13k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS0_11MediumTypesEE12get_coverageEv:
   59|    874|  const Coverage &get_coverage () const { return this+coverage; }

_ZNK2OT6Layout9GSUB_impl23ReverseChainSingleSubst8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   22|  65.2k|  {
   23|  65.2k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  65.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.53k, False: 61.7k]
  |  |  ------------------
  ------------------
   24|  61.7k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  61.7k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   25|  61.7k|    switch (u.format) {
   26|  10.7k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  10.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 10.7k, False: 50.9k]
  ------------------
   27|  50.9k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  50.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  50.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (27:5): [True: 50.9k, False: 10.7k]
  ------------------
   28|  61.7k|    }
   29|  61.7k|  }
_ZNK2OT6Layout9GSUB_impl23ReverseChainSingleSubst8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
   22|  3.12M|  {
   23|  3.12M|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  3.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.12M]
  |  |  ------------------
  ------------------
   24|  3.12M|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  3.12M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   25|  3.12M|    switch (u.format) {
   26|   505k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   505k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   505k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 505k, False: 2.61M]
  ------------------
   27|  2.61M|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  2.61M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.61M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (27:5): [True: 2.61M, False: 505k]
  ------------------
   28|  3.12M|    }
   29|  3.12M|  }
_ZNK2OT6Layout9GSUB_impl23ReverseChainSingleSubst8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   22|  19.2k|  {
   23|  19.2k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  19.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 19.2k]
  |  |  ------------------
  ------------------
   24|  19.2k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  19.2k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   25|  19.2k|    switch (u.format) {
   26|  3.00k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 3.00k, False: 16.2k]
  ------------------
   27|  16.2k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  16.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (27:5): [True: 16.2k, False: 3.00k]
  ------------------
   28|  19.2k|    }
   29|  19.2k|  }

_ZNK2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat18sanitizeEP21hb_sanitize_context_t:
   32|  10.7k|  {
   33|  10.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   34|  10.7k|    if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this)))
  ------------------
  |  Branch (34:9): [True: 344, False: 10.4k]
  |  Branch (34:11): [True: 10.6k, False: 121]
  |  Branch (34:42): [True: 10.4k, False: 223]
  ------------------
   35|    344|      return_trace (false);
  ------------------
  |  |  349|    344|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    344|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   36|  10.4k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (backtrack);
   37|  10.4k|    if (!lookahead.sanitize (c, this))
  ------------------
  |  Branch (37:9): [True: 155, False: 10.2k]
  ------------------
   38|    155|      return_trace (false);
  ------------------
  |  |  349|    155|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    155|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   39|  10.2k|    const auto &substitute = StructAfter<decltype (substituteX)> (lookahead);
   40|  10.2k|    return_trace (substitute.sanitize (c));
  ------------------
  |  |  349|  10.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   41|  10.4k|  }
_ZNK2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat112get_coverageEv:
  104|  3.00k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat111would_applyEPNS_24hb_would_apply_context_tE:
  107|   505k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|   505k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (107:12): [True: 0, False: 505k]
  |  Branch (107:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat15applyEPNS_21hb_ot_apply_context_tE:
  110|  2.34M|  {
  111|  2.34M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.34M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  112|  2.34M|    if (unlikely (c->nesting_level_left != HB_MAX_NESTING_LEVEL))
  ------------------
  |  |  259|  2.34M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 163k, False: 2.18M]
  |  |  ------------------
  ------------------
  113|   163k|      return_trace (false); /* No chaining to this type */
  ------------------
  |  |  349|   163k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   163k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  114|       |
  115|  2.18M|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint);
  116|  2.18M|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  2.18M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 394k, False: 1.78M]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   394k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   394k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  117|       |
  118|  1.78M|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (backtrack);
  119|  1.78M|    const auto &substitute = StructAfter<decltype (substituteX)> (lookahead);
  120|       |
  121|  1.78M|    if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  259|  1.78M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.56M, False: 224k]
  |  |  ------------------
  ------------------
                  if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  349|  1.56M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.56M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  122|       |
  123|   224k|    unsigned int start_index = 0, end_index = 0;
  124|   224k|    if (match_backtrack (c,
  ------------------
  |  Branch (124:9): [True: 144k, False: 79.9k]
  ------------------
  125|   224k|                         backtrack.len, (HBUINT16 *) backtrack.arrayZ,
  126|   224k|                         match_coverage, this,
  127|   224k|                         &start_index) &&
  128|   224k|        match_lookahead (c,
  ------------------
  |  Branch (128:9): [True: 41.5k, False: 102k]
  ------------------
  129|   144k|                         lookahead.len, (HBUINT16 *) lookahead.arrayZ,
  130|   144k|                         match_coverage, this,
  131|   144k|                         c->buffer->idx + 1, &end_index))
  132|  41.5k|    {
  133|  41.5k|      c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
  134|       |
  135|  41.5k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  83.0k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  41.5k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (135:37): [True: 0, False: 41.5k]
  ------------------
  136|      0|      {
  137|      0|	c->buffer->message (c->font,
  138|      0|			    "replacing glyph at %u (reverse chaining substitution)",
  139|      0|			    c->buffer->idx);
  140|      0|      }
  141|       |
  142|  41.5k|      c->replace_glyph_inplace (substitute[index]);
  143|       |
  144|  41.5k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  83.0k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  41.5k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (144:37): [True: 0, False: 41.5k]
  ------------------
  145|      0|      {
  146|      0|	c->buffer->message (c->font,
  147|      0|			    "replaced glyph at %u (reverse chaining substitution)",
  148|      0|			    c->buffer->idx);
  149|      0|      }
  150|       |
  151|       |      /* Note: We DON'T decrease buffer->idx.  The main loop does it
  152|       |       * for us.  This is useful for preventing surprises if someone
  153|       |       * calls us through a Context lookup. */
  154|  41.5k|      return_trace (true);
  ------------------
  |  |  349|  41.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  155|  41.5k|    }
  156|   182k|    else
  157|   182k|    {
  158|   182k|      c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
  159|   182k|      return_trace (false);
  ------------------
  |  |  349|   182k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   182k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  160|   182k|    }
  161|   224k|  }

_ZNK2OT6Layout9GSUB_impl8SequenceINS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   20|  94.4k|  {
   21|  94.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  94.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   22|  94.4k|    return_trace (substitute.sanitize (c));
  ------------------
  |  |  349|  94.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  94.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   23|  94.4k|  }
_ZNK2OT6Layout9GSUB_impl8SequenceINS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   20|  16.2k|  {
   21|  16.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   22|  16.2k|    return_trace (substitute.sanitize (c));
  ------------------
  |  |  349|  16.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   23|  16.2k|  }
_ZNK2OT6Layout9GSUB_impl8SequenceINS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   35|  2.03M|  {
   36|  2.03M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.03M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   37|  2.03M|    unsigned int count = substitute.len;
   38|       |
   39|       |    /* Special-case to make it in-place and not consider this
   40|       |     * as a "multiplied" substitution. */
   41|  2.03M|    if (unlikely (count == 1))
  ------------------
  |  |  259|  2.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.0k, False: 2.02M]
  |  |  ------------------
  ------------------
   42|  11.0k|    {
   43|  11.0k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  22.1k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  11.0k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (43:37): [True: 0, False: 11.0k]
  ------------------
   44|      0|      {
   45|      0|	c->buffer->sync_so_far ();
   46|      0|	c->buffer->message (c->font,
   47|      0|			    "replacing glyph at %u (multiple substitution)",
   48|      0|			    c->buffer->idx);
   49|      0|      }
   50|       |
   51|  11.0k|      c->replace_glyph (substitute.arrayZ[0]);
   52|       |
   53|  11.0k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  22.1k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  11.0k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (53:37): [True: 0, False: 11.0k]
  ------------------
   54|      0|      {
   55|      0|	c->buffer->message (c->font,
   56|      0|			    "replaced glyph at %u (multiple subtitution)",
   57|      0|			    c->buffer->idx - 1u);
   58|      0|      }
   59|       |
   60|  11.0k|      return_trace (true);
  ------------------
  |  |  349|  11.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   61|  11.0k|    }
   62|       |    /* Spec disallows this, but Uniscribe allows it.
   63|       |     * https://github.com/harfbuzz/harfbuzz/issues/253 */
   64|  2.02M|    else if (unlikely (count == 0))
  ------------------
  |  |  259|  2.02M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 716k, False: 1.30M]
  |  |  ------------------
  ------------------
   65|   716k|    {
   66|   716k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  1.43M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   716k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (66:37): [True: 0, False: 716k]
  ------------------
   67|      0|      {
   68|      0|	c->buffer->sync_so_far ();
   69|      0|	c->buffer->message (c->font,
   70|      0|			    "deleting glyph at %u (multiple substitution)",
   71|      0|			    c->buffer->idx);
   72|      0|      }
   73|       |
   74|   716k|      c->buffer->delete_glyph ();
   75|       |
   76|   716k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  1.43M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   716k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (76:37): [True: 0, False: 716k]
  ------------------
   77|      0|      {
   78|      0|	c->buffer->sync_so_far ();
   79|      0|	c->buffer->message (c->font,
   80|      0|			    "deleted glyph at %u (multiple substitution)",
   81|      0|			    c->buffer->idx);
   82|      0|      }
   83|       |
   84|   716k|      return_trace (true);
  ------------------
  |  |  349|   716k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   716k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   85|   716k|    }
   86|       |
   87|  1.30M|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  2.61M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  1.30M|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (87:35): [True: 0, False: 1.30M]
  ------------------
   88|      0|    {
   89|      0|      c->buffer->sync_so_far ();
   90|      0|      c->buffer->message (c->font,
   91|      0|			  "multiplying glyph at %u",
   92|      0|			  c->buffer->idx);
   93|      0|    }
   94|       |
   95|  1.30M|    unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
  ------------------
  |  Branch (95:26): [True: 93.4k, False: 1.21M]
  ------------------
   96|  1.21M|                         HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
   97|  1.30M|    unsigned lig_id = _hb_glyph_info_get_lig_id (&c->buffer->cur());
   98|       |
   99|  33.0M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (99:30): [True: 31.6M, False: 1.30M]
  ------------------
  100|  31.6M|    {
  101|       |      /* If is attached to a ligature, don't disturb that.
  102|       |       * https://github.com/harfbuzz/harfbuzz/issues/3069 */
  103|  31.6M|      if (!lig_id)
  ------------------
  |  Branch (103:11): [True: 29.0M, False: 2.64M]
  ------------------
  104|  29.0M|        _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
  105|  31.6M|      c->output_glyph_for_component (substitute.arrayZ[i], klass);
  106|  31.6M|    }
  107|  1.30M|    c->buffer->skip_glyph ();
  108|       |
  109|  1.30M|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  2.61M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  1.30M|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (109:35): [True: 0, False: 1.30M]
  ------------------
  110|      0|    {
  111|      0|      c->buffer->sync_so_far ();
  112|       |
  113|      0|      char buf[HB_MAX_CONTEXT_LENGTH * 16] = {0};
  114|      0|      char *p = buf;
  115|       |
  116|      0|      for (unsigned i = c->buffer->idx - count; i < c->buffer->idx; i++)
  ------------------
  |  Branch (116:49): [True: 0, False: 0]
  ------------------
  117|      0|      {
  118|      0|	if (buf < p)
  ------------------
  |  Branch (118:6): [True: 0, False: 0]
  ------------------
  119|      0|	  *p++ = ',';
  120|      0|	snprintf (p, sizeof(buf) - (p - buf), "%u", i);
  121|      0|	p += strlen(p);
  122|      0|      }
  123|       |
  124|      0|      c->buffer->message (c->font,
  125|      0|			  "multiplied glyphs at %s",
  126|      0|			  buf);
  127|      0|    }
  128|       |
  129|  1.30M|    return_trace (true);
  ------------------
  |  |  349|  1.30M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.30M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  130|  2.03M|  }
_ZNK2OT6Layout9GSUB_impl8SequenceINS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
   35|  22.7k|  {
   36|  22.7k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  22.7k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   37|  22.7k|    unsigned int count = substitute.len;
   38|       |
   39|       |    /* Special-case to make it in-place and not consider this
   40|       |     * as a "multiplied" substitution. */
   41|  22.7k|    if (unlikely (count == 1))
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 233, False: 22.5k]
  |  |  ------------------
  ------------------
   42|    233|    {
   43|    233|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|    466|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    233|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (43:37): [True: 0, False: 233]
  ------------------
   44|      0|      {
   45|      0|	c->buffer->sync_so_far ();
   46|      0|	c->buffer->message (c->font,
   47|      0|			    "replacing glyph at %u (multiple substitution)",
   48|      0|			    c->buffer->idx);
   49|      0|      }
   50|       |
   51|    233|      c->replace_glyph (substitute.arrayZ[0]);
   52|       |
   53|    233|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|    466|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    233|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (53:37): [True: 0, False: 233]
  ------------------
   54|      0|      {
   55|      0|	c->buffer->message (c->font,
   56|      0|			    "replaced glyph at %u (multiple subtitution)",
   57|      0|			    c->buffer->idx - 1u);
   58|      0|      }
   59|       |
   60|    233|      return_trace (true);
  ------------------
  |  |  349|    233|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    233|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   61|    233|    }
   62|       |    /* Spec disallows this, but Uniscribe allows it.
   63|       |     * https://github.com/harfbuzz/harfbuzz/issues/253 */
   64|  22.5k|    else if (unlikely (count == 0))
  ------------------
  |  |  259|  22.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.7k, False: 4.86k]
  |  |  ------------------
  ------------------
   65|  17.7k|    {
   66|  17.7k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  35.4k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  17.7k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (66:37): [True: 0, False: 17.7k]
  ------------------
   67|      0|      {
   68|      0|	c->buffer->sync_so_far ();
   69|      0|	c->buffer->message (c->font,
   70|      0|			    "deleting glyph at %u (multiple substitution)",
   71|      0|			    c->buffer->idx);
   72|      0|      }
   73|       |
   74|  17.7k|      c->buffer->delete_glyph ();
   75|       |
   76|  17.7k|      if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  35.4k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  17.7k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (76:37): [True: 0, False: 17.7k]
  ------------------
   77|      0|      {
   78|      0|	c->buffer->sync_so_far ();
   79|      0|	c->buffer->message (c->font,
   80|      0|			    "deleted glyph at %u (multiple substitution)",
   81|      0|			    c->buffer->idx);
   82|      0|      }
   83|       |
   84|  17.7k|      return_trace (true);
  ------------------
  |  |  349|  17.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   85|  17.7k|    }
   86|       |
   87|  4.86k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  9.72k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  4.86k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (87:35): [True: 0, False: 4.86k]
  ------------------
   88|      0|    {
   89|      0|      c->buffer->sync_so_far ();
   90|      0|      c->buffer->message (c->font,
   91|      0|			  "multiplying glyph at %u",
   92|      0|			  c->buffer->idx);
   93|      0|    }
   94|       |
   95|  4.86k|    unsigned int klass = _hb_glyph_info_is_ligature (&c->buffer->cur()) ?
  ------------------
  |  Branch (95:26): [True: 41, False: 4.82k]
  ------------------
   96|  4.82k|                         HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0;
   97|  4.86k|    unsigned lig_id = _hb_glyph_info_get_lig_id (&c->buffer->cur());
   98|       |
   99|   354k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (99:30): [True: 350k, False: 4.86k]
  ------------------
  100|   350k|    {
  101|       |      /* If is attached to a ligature, don't disturb that.
  102|       |       * https://github.com/harfbuzz/harfbuzz/issues/3069 */
  103|   350k|      if (!lig_id)
  ------------------
  |  Branch (103:11): [True: 349k, False: 289]
  ------------------
  104|   349k|        _hb_glyph_info_set_lig_props_for_component (&c->buffer->cur(), i);
  105|   350k|      c->output_glyph_for_component (substitute.arrayZ[i], klass);
  106|   350k|    }
  107|  4.86k|    c->buffer->skip_glyph ();
  108|       |
  109|  4.86k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  9.72k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  4.86k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (109:35): [True: 0, False: 4.86k]
  ------------------
  110|      0|    {
  111|      0|      c->buffer->sync_so_far ();
  112|       |
  113|      0|      char buf[HB_MAX_CONTEXT_LENGTH * 16] = {0};
  114|      0|      char *p = buf;
  115|       |
  116|      0|      for (unsigned i = c->buffer->idx - count; i < c->buffer->idx; i++)
  ------------------
  |  Branch (116:49): [True: 0, False: 0]
  ------------------
  117|      0|      {
  118|      0|	if (buf < p)
  ------------------
  |  Branch (118:6): [True: 0, False: 0]
  ------------------
  119|      0|	  *p++ = ',';
  120|      0|	snprintf (p, sizeof(buf) - (p - buf), "%u", i);
  121|      0|	p += strlen(p);
  122|      0|      }
  123|       |
  124|      0|      c->buffer->message (c->font,
  125|      0|			  "multiplied glyphs at %s",
  126|      0|			  buf);
  127|      0|    }
  128|       |
  129|  4.86k|    return_trace (true);
  ------------------
  |  |  349|  4.86k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.86k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  130|  22.7k|  }

_ZNK2OT6Layout9GSUB_impl11SingleSubst8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
   29|  40.5k|  {
   30|  40.5k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  40.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.79k, False: 37.7k]
  |  |  ------------------
  ------------------
   31|  37.7k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  37.7k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   32|  37.7k|    switch (u.format) {
   33|  3.33k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 3.33k, False: 34.4k]
  ------------------
   34|  4.70k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.70k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.70k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 4.70k, False: 33.0k]
  ------------------
   35|      0|#ifndef HB_NO_BEYOND_64K
   36|  1.12k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (36:5): [True: 1.12k, False: 36.6k]
  ------------------
   37|  4.70k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.70k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.70k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (37:5): [True: 4.70k, False: 33.0k]
  ------------------
   38|      0|#endif
   39|  23.9k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  23.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (39:5): [True: 23.9k, False: 13.8k]
  ------------------
   40|  37.7k|    }
   41|  37.7k|  }
_ZNK2OT6Layout9GSUB_impl11SingleSubst8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
   29|  69.8k|  {
   30|  69.8k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  69.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 69.8k]
  |  |  ------------------
  ------------------
   31|  69.8k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  69.8k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   32|  69.8k|    switch (u.format) {
   33|  5.66k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 5.66k, False: 64.2k]
  ------------------
   34|  1.50k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.50k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.50k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 1.50k, False: 68.3k]
  ------------------
   35|      0|#ifndef HB_NO_BEYOND_64K
   36|  1.56k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.56k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.56k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (36:5): [True: 1.56k, False: 68.3k]
  ------------------
   37|    753|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    753|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    753|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (37:5): [True: 753, False: 69.1k]
  ------------------
   38|      0|#endif
   39|  60.4k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  60.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  60.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (39:5): [True: 60.4k, False: 9.48k]
  ------------------
   40|  69.8k|    }
   41|  69.8k|  }
_ZNK2OT6Layout9GSUB_impl11SingleSubst8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
   29|  8.98k|  {
   30|  8.98k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  8.98k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.98k]
  |  |  ------------------
  ------------------
   31|  8.98k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  8.98k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   32|  8.98k|    switch (u.format) {
   33|    558|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    558|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    558|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 558, False: 8.42k]
  ------------------
   34|  1.42k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 1.42k, False: 7.55k]
  ------------------
   35|      0|#ifndef HB_NO_BEYOND_64K
   36|    137|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    137|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    137|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (36:5): [True: 137, False: 8.84k]
  ------------------
   37|    613|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    613|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    613|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (37:5): [True: 613, False: 8.36k]
  ------------------
   38|      0|#endif
   39|  6.24k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  6.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (39:5): [True: 6.24k, False: 2.73k]
  ------------------
   40|  8.98k|    }
   41|  8.98k|  }
_ZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS6_EELPv0EEEbP22hb_serialize_context_tT_:
   48|    787|  {
   49|    787|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    787|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
   50|    787|    if (unlikely (!c->extend_min (u.format))) return_trace (false);
  ------------------
  |  |  259|    787|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 787]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (u.format))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   51|    787|    unsigned format = 2;
   52|    787|    unsigned delta = 0;
   53|    787|    if (glyphs)
  ------------------
  |  Branch (53:9): [True: 787, False: 0]
  ------------------
   54|    787|    {
   55|    787|      format = 1;
   56|    787|      hb_codepoint_t mask = 0xFFFFu;
   57|       |
   58|    787|#ifndef HB_NO_BEYOND_64K
   59|    787|       if (+ glyphs
  ------------------
  |  Branch (59:12): [True: 0, False: 787]
  ------------------
   60|    787|	   | hb_map_retains_sorting (hb_second)
   61|    787|	   | hb_filter ([] (hb_codepoint_t gid) { return gid > 0xFFFFu; }))
   62|      0|       {
   63|      0|	 format += 2;
   64|      0|	 mask = 0xFFFFFFu;
   65|      0|       }
   66|    787|#endif
   67|       |
   68|    787|      auto get_delta = [=] (hb_codepoint_pair_t _)
   69|    787|                       { return (unsigned) (_.second - _.first) & mask; };
   70|    787|      delta = get_delta (*glyphs);
   71|    787|      if (!hb_all (++(+glyphs), delta, get_delta)) format += 1;
  ------------------
  |  Branch (71:11): [True: 692, False: 95]
  ------------------
   72|    787|    }
   73|       |
   74|    787|    u.format = format;
   75|    787|    switch (u.format) {
   76|     95|    case 1: return_trace (u.format1.serialize (c,
  ------------------
  |  |  349|     95|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     95|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (76:5): [True: 95, False: 692]
  ------------------
   77|      0|                                               + glyphs
   78|      0|                                               | hb_map_retains_sorting (hb_first),
   79|      0|                                               delta));
   80|    692|    case 2: return_trace (u.format2.serialize (c, glyphs));
  ------------------
  |  |  349|    692|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    692|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (80:5): [True: 692, False: 95]
  ------------------
   81|      0|#ifndef HB_NO_BEYOND_64K
   82|      0|    case 3: return_trace (u.format3.serialize (c,
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (82:5): [True: 0, False: 787]
  ------------------
   83|      0|                                               + glyphs
   84|      0|                                               | hb_map_retains_sorting (hb_first),
   85|      0|                                               delta));
   86|      0|    case 4: return_trace (u.format4.serialize (c, glyphs));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (86:5): [True: 0, False: 787]
  ------------------
   87|      0|#endif
   88|      0|    default:return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (88:5): [True: 0, False: 787]
  ------------------
   89|    787|    }
   90|    787|  }
_ZZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS6_EELPv0EEEbP22hb_serialize_context_tT_ENKUljE_clEj:
   61|  26.7k|	   | hb_filter ([] (hb_codepoint_t gid) { return gid > 0xFFFFu; }))
_ZZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS6_EELPv0EEEbP22hb_serialize_context_tT_ENKUl9hb_pair_tIjjEE_clESG_:
   69|  4.14k|                       { return (unsigned) (_.second - _.first) & mask; };

_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  3.33k|  {
   27|  3.33k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.33k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  3.33k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  13.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.22k, False: 108]
  |  |  |  Branch (349:45): [True: 3.21k, False: 9]
  |  |  |  Branch (349:45): [True: 3.16k, False: 52]
  |  |  ------------------
  ------------------
   29|  3.33k|                  coverage.sanitize (c, this) &&
   30|       |                  /* The coverage  table may use a range to represent a set
   31|       |                   * of glyphs, which means a small number of bytes can
   32|       |                   * generate a large glyph set. Manually modify the
   33|       |                   * sanitizer max ops to take this into account.
   34|       |                   *
   35|       |                   * Note: This check *must* be right after coverage sanitize. */
   36|  3.33k|                  c->check_ops ((this + coverage).get_population () >> 1));
   37|  3.33k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  1.12k|  {
   27|  1.12k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.12k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  1.12k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  4.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.04k, False: 79]
  |  |  |  Branch (349:45): [True: 1.04k, False: 4]
  |  |  |  Branch (349:45): [True: 1.01k, False: 26]
  |  |  ------------------
  ------------------
   29|  1.12k|                  coverage.sanitize (c, this) &&
   30|       |                  /* The coverage  table may use a range to represent a set
   31|       |                   * of glyphs, which means a small number of bytes can
   32|       |                   * generate a large glyph set. Manually modify the
   33|       |                   * sanitizer max ops to take this into account.
   34|       |                   *
   35|       |                   * Note: This check *must* be right after coverage sanitize. */
   36|  1.12k|                  c->check_ops ((this + coverage).get_population () >> 1));
   37|  1.12k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  127|   216k|  {
  128|   216k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   216k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  129|   216k|    hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
  130|   216k|    unsigned int index = (this+coverage).get_coverage (glyph_id);
  131|   216k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   216k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 111k, False: 105k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   111k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   111k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  132|       |
  133|   105k|    hb_codepoint_t d = deltaGlyphID;
  134|   105k|    hb_codepoint_t mask = get_mask ();
  135|       |
  136|   105k|    glyph_id = (glyph_id + d) & mask;
  137|       |
  138|   105k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   210k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   105k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (138:35): [True: 0, False: 105k]
  ------------------
  139|      0|    {
  140|      0|      c->buffer->sync_so_far ();
  141|      0|      c->buffer->message (c->font,
  142|      0|			  "replacing glyph at %u (single substitution)",
  143|      0|			  c->buffer->idx);
  144|      0|    }
  145|       |
  146|   105k|    c->replace_glyph (glyph_id);
  147|       |
  148|   105k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   210k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|   105k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (148:35): [True: 0, False: 105k]
  ------------------
  149|      0|    {
  150|      0|      c->buffer->message (c->font,
  151|      0|			  "replaced glyph at %u (single substitution)",
  152|      0|			  c->buffer->idx - 1u);
  153|      0|    }
  154|       |
  155|   105k|    return_trace (true);
  ------------------
  |  |  349|   105k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   105k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  156|   216k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE8get_maskEv:
   40|   105k|  { return (1 << (8 * Types::size)) - 1; }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  127|  5.04k|  {
  128|  5.04k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  5.04k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  129|  5.04k|    hb_codepoint_t glyph_id = c->buffer->cur().codepoint;
  130|  5.04k|    unsigned int index = (this+coverage).get_coverage (glyph_id);
  131|  5.04k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  5.04k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 4.62k, False: 427]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  4.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.62k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  132|       |
  133|    427|    hb_codepoint_t d = deltaGlyphID;
  134|    427|    hb_codepoint_t mask = get_mask ();
  135|       |
  136|    427|    glyph_id = (glyph_id + d) & mask;
  137|       |
  138|    427|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|    854|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    427|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (138:35): [True: 0, False: 427]
  ------------------
  139|      0|    {
  140|      0|      c->buffer->sync_so_far ();
  141|      0|      c->buffer->message (c->font,
  142|      0|			  "replacing glyph at %u (single substitution)",
  143|      0|			  c->buffer->idx);
  144|      0|    }
  145|       |
  146|    427|    c->replace_glyph (glyph_id);
  147|       |
  148|    427|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|    854|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|    427|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (148:35): [True: 0, False: 427]
  ------------------
  149|      0|    {
  150|      0|      c->buffer->message (c->font,
  151|      0|			  "replaced glyph at %u (single substitution)",
  152|      0|			  c->buffer->idx - 1u);
  153|      0|    }
  154|       |
  155|    427|    return_trace (true);
  ------------------
  |  |  349|    427|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    427|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  156|  5.04k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_11MediumTypesEE8get_maskEv:
   40|    427|  { return (1 << (8 * Types::size)) - 1; }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   96|  5.66k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|  5.66k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (96:12): [True: 0, False: 5.66k]
  |  Branch (96:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   96|  1.56k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|  1.56k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (96:12): [True: 0, False: 1.56k]
  |  Branch (96:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE12get_coverageEv:
   93|    558|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_11MediumTypesEE12get_coverageEv:
   93|    137|  const Coverage &get_coverage () const { return this+coverage; }
hb-ot-shaper-arabic.cc:_ZN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS0_10SmallTypesEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS9_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSI_0EEEbP22hb_serialize_context_tT_j:
  163|     95|  {
  164|     95|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|     95|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  165|     95|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|     95|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  166|     95|    if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
  ------------------
  |  |  259|     95|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  ------------------
  ------------------
                  if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  167|     95|    c->check_assign (deltaGlyphID, delta, HB_SERIALIZE_ERROR_INT_OVERFLOW);
  168|     95|    return_trace (true);
  ------------------
  |  |  349|     95|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     95|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  169|     95|  }

_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  4.70k|  {
   27|  4.70k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.70k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  4.70k|    return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
  ------------------
  |  |  349|  9.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.70k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.60k, False: 103]
  |  |  |  Branch (349:45): [True: 4.32k, False: 275]
  |  |  ------------------
  ------------------
   29|  4.70k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
   26|  4.70k|  {
   27|  4.70k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.70k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   28|  4.70k|    return_trace (coverage.sanitize (c, this) && substitute.sanitize (c));
  ------------------
  |  |  349|  9.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.70k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.60k, False: 96]
  |  |  |  Branch (349:45): [True: 4.40k, False: 202]
  |  |  ------------------
  ------------------
   29|  4.70k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  104|   125k|  {
  105|   125k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   125k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  106|   125k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
  107|   125k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   125k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 26.6k, False: 98.3k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  26.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  26.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  108|       |
  109|  98.3k|    if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  259|  98.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15.7k, False: 82.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  349|  15.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  110|       |
  111|  82.6k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   165k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  82.6k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (111:35): [True: 0, False: 82.6k]
  ------------------
  112|      0|    {
  113|      0|      c->buffer->sync_so_far ();
  114|      0|      c->buffer->message (c->font,
  115|      0|			  "replacing glyph at %u (single substitution)",
  116|      0|			  c->buffer->idx);
  117|      0|    }
  118|       |
  119|  82.6k|    c->replace_glyph (substitute[index]);
  120|       |
  121|  82.6k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|   165k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  82.6k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (121:35): [True: 0, False: 82.6k]
  ------------------
  122|      0|    {
  123|      0|      c->buffer->message (c->font,
  124|      0|			  "replaced glyph at %u (single substitution)",
  125|      0|			  c->buffer->idx - 1u);
  126|      0|    }
  127|       |
  128|  82.6k|    return_trace (true);
  ------------------
  |  |  349|  82.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  82.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  129|  98.3k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
  104|  6.22k|  {
  105|  6.22k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  6.22k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  106|  6.22k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
  107|  6.22k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  6.22k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 505, False: 5.72k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|    505|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    505|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  108|       |
  109|  5.72k|    if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  259|  5.72k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 301, False: 5.42k]
  |  |  ------------------
  ------------------
                  if (unlikely (index >= substitute.len)) return_trace (false);
  ------------------
  |  |  349|    301|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    301|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  110|       |
  111|  5.42k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  10.8k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  5.42k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (111:35): [True: 0, False: 5.42k]
  ------------------
  112|      0|    {
  113|      0|      c->buffer->sync_so_far ();
  114|      0|      c->buffer->message (c->font,
  115|      0|			  "replacing glyph at %u (single substitution)",
  116|      0|			  c->buffer->idx);
  117|      0|    }
  118|       |
  119|  5.42k|    c->replace_glyph (substitute[index]);
  120|       |
  121|  5.42k|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  10.8k|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  5.42k|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (121:35): [True: 0, False: 5.42k]
  ------------------
  122|      0|    {
  123|      0|      c->buffer->message (c->font,
  124|      0|			  "replaced glyph at %u (single substitution)",
  125|      0|			  c->buffer->idx - 1u);
  126|      0|    }
  127|       |
  128|  5.42k|    return_trace (true);
  ------------------
  |  |  349|  5.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  129|  5.72k|  }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   76|  1.50k|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|  1.50k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (76:12): [True: 0, False: 1.50k]
  |  Branch (76:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
   76|    753|  { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
  ------------------
  |  |   37|    753|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (76:12): [True: 0, False: 753]
  |  Branch (76:27): [True: 0, False: 0]
  ------------------
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_10SmallTypesEE12get_coverageEv:
   73|  1.42k|  const Coverage &get_coverage () const { return this+coverage; }
_ZNK2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_11MediumTypesEE12get_coverageEv:
   73|    613|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS0_10SmallTypesEE9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_:
  136|    692|  {
  137|    692|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    692|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  138|    692|    auto substitutes =
  139|    692|      + it
  140|    692|      | hb_map (hb_second)
  141|    692|      ;
  142|    692|    auto glyphs =
  143|    692|      + it
  144|    692|      | hb_map_retains_sorting (hb_first)
  145|    692|      ;
  146|    692|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  147|    692|    if (unlikely (!substitute.serialize (c, substitutes))) return_trace (false);
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
                  if (unlikely (!substitute.serialize (c, substitutes))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  148|    692|    if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
                  if (unlikely (!coverage.serialize_serialize (c, glyphs))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  149|    692|    return_trace (true);
  ------------------
  |  |  349|    692|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    692|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  150|    692|  }

_ZNK2OT6Layout9GSUB_impl11SubstLookup8sanitizeEP21hb_sanitize_context_t:
   16|   130k|  { return Lookup::sanitize<SubTable> (c); }
_ZNK2OT6Layout9GSUB_impl11SubstLookup12get_subtableEj:
   19|    171|  { return Lookup::get_subtable<SubTable> (i); }
_ZN2OT6Layout9GSUB_impl11SubstLookup22lookup_type_is_reverseEj:
   22|   128k|  { return lookup_type == SubTable::ReverseChainSingle; }
_ZNK2OT6Layout9GSUB_impl11SubstLookup10is_reverseEv:
   25|   128k|  {
   26|   128k|    unsigned int type = get_type ();
   27|   128k|    if (unlikely (type == SubTable::Extension))
  ------------------
  |  |  259|   128k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 171, False: 128k]
  |  |  ------------------
  ------------------
   28|    171|      return get_subtable (0).u.extension.is_reverse ();
   29|   128k|    return lookup_type_is_reverse (type);
   30|   128k|  }
_ZNK2OT6Layout9GSUB_impl11SubstLookup11would_applyEPNS_24hb_would_apply_context_tEPKNS_33hb_ot_layout_lookup_accelerator_tE:
   95|  1.72M|  {
   96|  1.72M|    if (unlikely (!c->len)) return false;
  ------------------
  |  |  259|  1.72M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.72M]
  |  |  ------------------
  ------------------
   97|  1.72M|    if (!accel->may_have (c->glyphs[0])) return false;
  ------------------
  |  Branch (97:9): [True: 1.33M, False: 382k]
  ------------------
   98|   382k|      return dispatch (c);
   99|  1.72M|  }
_ZN2OT6Layout9GSUB_impl11SubstLookup18serialize_ligatureEP22hb_serialize_context_tj17hb_sorted_array_tIKNS_11HBGlyphID16EE10hb_array_tIKjES9_IS7_ESB_SC_:
  169|    900|  {
  170|    900|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    900|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  171|    900|    if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false);
  ------------------
  |  |  259|    900|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 50, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!Lookup::serialize (c, SubTable::Ligature, lookup_props, 1))) return_trace (false);
  ------------------
  |  |  349|     50|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     50|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  172|    850|    if (c->push<SubTable> ()->u.ligature.
  ------------------
  |  Branch (172:9): [True: 750, False: 100]
  ------------------
  173|    850|        serialize (c,
  174|    850|                   first_glyphs,
  175|    850|                   ligature_per_first_glyph_count_list,
  176|    850|                   ligatures_list,
  177|    850|                   component_count_list,
  178|    850|                   component_list))
  179|    750|    {
  180|    750|      c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
  181|    750|      return_trace (true);
  ------------------
  |  |  349|    750|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    750|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  182|    750|    }
  183|    100|    c->pop_discard ();
  184|    100|    return_trace (false);
  ------------------
  |  |  349|    100|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    100|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  185|    850|  }
_ZNK2OT6Layout9GSUB_impl11SubstLookup8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
  209|   382k|  { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }
_ZNK2OT6Layout9GSUB_impl11SubstLookup8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_DpOT0_:
  209|  37.2k|  { return Lookup::dispatch<SubTable> (c, std::forward<Ts> (ds)...); }
_ZN2OT6Layout9GSUB_impl11SubstLookup16serialize_singleI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tIS5_ELPv0EEEbP22hb_serialize_context_tjT_T0_:
  110|    818|  {
  111|    818|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    818|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  112|    818|    if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false);
  ------------------
  |  |  259|    818|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 787]
  |  |  ------------------
  ------------------
                  if (unlikely (!Lookup::serialize (c, SubTable::Single, lookup_props, 1))) return_trace (false);
  ------------------
  |  |  349|     31|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     31|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  113|    787|    if (c->push<SubTable> ()->u.single.serialize (c, hb_zip (glyphs, substitutes)))
  ------------------
  |  Branch (113:9): [True: 787, False: 0]
  ------------------
  114|    787|    {
  115|    787|      c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
  116|    787|      return_trace (true);
  ------------------
  |  |  349|    787|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    787|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  117|    787|    }
  118|      0|    c->pop_discard ();
  119|      0|    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  120|    787|  }

_ZNK2OT6Layout9GSUB_impl19SubstLookupSubTable8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_jDpOT0_:
   50|  2.60M|  {
   51|  2.60M|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|  2.60M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   52|  2.60M|    switch (lookup_type) {
   53|  40.5k|    case Single:                return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  40.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (53:5): [True: 40.5k, False: 2.56M]
  ------------------
   54|   139k|    case Multiple:              return_trace (u.multiple.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   139k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   139k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 139k, False: 2.46M]
  ------------------
   55|  28.9k|    case Alternate:             return_trace (u.alternate.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  28.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  28.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (55:5): [True: 28.9k, False: 2.57M]
  ------------------
   56|  86.5k|    case Ligature:              return_trace (u.ligature.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  86.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  86.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (56:5): [True: 86.5k, False: 2.51M]
  ------------------
   57|   156k|    case Context:               return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   156k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   156k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (57:5): [True: 156k, False: 2.44M]
  ------------------
   58|  92.5k|    case ChainContext:          return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  92.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  92.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (58:5): [True: 92.5k, False: 2.51M]
  ------------------
   59|  43.6k|    case Extension:             return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  43.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  43.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (59:5): [True: 43.6k, False: 2.56M]
  ------------------
   60|  65.2k|    case ReverseChainSingle:    return_trace (u.reverseChainContextSingle.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  65.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  65.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (60:5): [True: 65.2k, False: 2.53M]
  ------------------
   61|  1.95M|    default:                    return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.95M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.95M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (61:5): [True: 1.95M, False: 653k]
  ------------------
   62|  2.60M|    }
   63|  2.60M|  }
_ZNK2OT6Layout9GSUB_impl19SubstLookupSubTable8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS5_jDpOT0_:
   50|  8.21M|  {
   51|  8.21M|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|  8.21M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   52|  8.21M|    switch (lookup_type) {
   53|  69.8k|    case Single:                return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  69.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  69.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (53:5): [True: 69.8k, False: 8.14M]
  ------------------
   54|  1.67M|    case Multiple:              return_trace (u.multiple.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.67M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.67M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 1.67M, False: 6.54M]
  ------------------
   55|  1.34k|    case Alternate:             return_trace (u.alternate.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (55:5): [True: 1.34k, False: 8.21M]
  ------------------
   56|   775k|    case Ligature:              return_trace (u.ligature.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   775k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   775k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (56:5): [True: 775k, False: 7.43M]
  ------------------
   57|   330k|    case Context:               return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   330k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   330k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (57:5): [True: 330k, False: 7.88M]
  ------------------
   58|  2.24M|    case ChainContext:          return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.24M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.24M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (58:5): [True: 2.24M, False: 5.97M]
  ------------------
   59|      0|    case Extension:             return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (59:5): [True: 0, False: 8.21M]
  ------------------
   60|  3.12M|    case ReverseChainSingle:    return_trace (u.reverseChainContextSingle.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.12M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.12M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (60:5): [True: 3.12M, False: 5.09M]
  ------------------
   61|      0|    default:                    return_trace (c->default_return_value ());
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (61:5): [True: 0, False: 8.21M]
  ------------------
   62|  8.21M|    }
   63|  8.21M|  }
_ZNK2OT6Layout9GSUB_impl19SubstLookupSubTable8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS5_jDpOT0_:
   50|   656k|  {
   51|   656k|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|   656k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
   52|   656k|    switch (lookup_type) {
   53|  8.98k|    case Single:                return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  8.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (53:5): [True: 8.98k, False: 647k]
  ------------------
   54|  61.1k|    case Multiple:              return_trace (u.multiple.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  61.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  61.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 61.1k, False: 595k]
  ------------------
   55|  9.56k|    case Alternate:             return_trace (u.alternate.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.56k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.56k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (55:5): [True: 9.56k, False: 647k]
  ------------------
   56|  34.5k|    case Ligature:              return_trace (u.ligature.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  34.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (56:5): [True: 34.5k, False: 622k]
  ------------------
   57|  38.5k|    case Context:               return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  38.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  38.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (57:5): [True: 38.5k, False: 618k]
  ------------------
   58|  40.0k|    case ChainContext:          return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  40.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (58:5): [True: 40.0k, False: 616k]
  ------------------
   59|  7.21k|    case Extension:             return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.21k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.21k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (59:5): [True: 7.21k, False: 649k]
  ------------------
   60|  19.2k|    case ReverseChainSingle:    return_trace (u.reverseChainContextSingle.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  19.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (60:5): [True: 19.2k, False: 637k]
  ------------------
   61|   437k|    default:                    return_trace (c->default_return_value ());
  ------------------
  |  |  349|   437k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   437k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (61:5): [True: 437k, False: 219k]
  ------------------
   62|   656k|    }
   63|   656k|  }

_ZN2OT9glyf_impl14CompositeGlyphC2ERKNS0_11GlyphHeaderE10hb_array_tIKcE:
  314|  46.4k|    header (header_), bytes (bytes_) {}
_ZNK2OT9glyf_impl14CompositeGlyph4iterEv:
  317|  46.4k|  { return composite_iter_t (bytes, &StructAfter<CompositeGlyphRecord, GlyphHeader> (header)); }
_ZNK2OT9glyf_impl20CompositeGlyphRecord8get_sizeEv:
   37|   148k|  {
   38|   148k|    unsigned int size = min_size;
   39|       |    /* glyphIndex is 24bit instead of 16bit */
   40|   148k|#ifndef HB_NO_BEYOND_64K
   41|   148k|    if (flags & GID_IS_24BIT) size += HBGlyphID24::static_size - HBGlyphID16::static_size;
  ------------------
  |  Branch (41:9): [True: 89.7k, False: 58.4k]
  ------------------
   42|   148k|#endif
   43|       |    /* arg1 and 2 are int16 */
   44|   148k|    if (flags & ARG_1_AND_2_ARE_WORDS) size += 4;
  ------------------
  |  Branch (44:9): [True: 80.5k, False: 67.6k]
  ------------------
   45|       |    /* arg1 and 2 are int8 */
   46|  67.6k|    else size += 2;
   47|       |
   48|       |    /* One x 16 bit (scale) */
   49|   148k|    if (flags & WE_HAVE_A_SCALE) size += 2;
  ------------------
  |  Branch (49:9): [True: 74.8k, False: 73.3k]
  ------------------
   50|       |    /* Two x 16 bit (xscale, yscale) */
   51|  73.3k|    else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) size += 4;
  ------------------
  |  Branch (51:14): [True: 16.3k, False: 57.0k]
  ------------------
   52|       |    /* Four x 16 bit (xscale, scale01, scale10, yscale) */
   53|  57.0k|    else if (flags & WE_HAVE_A_TWO_BY_TWO) size += 8;
  ------------------
  |  Branch (53:14): [True: 9.52k, False: 47.5k]
  ------------------
   54|       |
   55|   148k|    return size;
   56|   148k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord10get_pointsERNS_22contour_point_vector_tE:
  130|  76.9k|  {
  131|  76.9k|    float matrix[4];
  132|  76.9k|    contour_point_t trans;
  133|  76.9k|    get_transformation (matrix, trans);
  134|  76.9k|    points.alloc (points.length + 4); // For phantom points
  135|  76.9k|    if (unlikely (!points.resize (points.length + 1))) return false;
  ------------------
  |  |  259|  76.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 263, False: 76.6k]
  |  |  ------------------
  ------------------
  136|  76.6k|    points.arrayZ[points.length - 1] = trans;
  137|  76.6k|    return true;
  138|  76.9k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord8has_moreEv:
   66|   132k|  bool has_more ()          const { return   flags & MORE_COMPONENTS; }
_ZNK2OT9glyf_impl20CompositeGlyphRecord17is_use_my_metricsEv:
   67|  83.0k|  bool is_use_my_metrics () const { return   flags & USE_MY_METRICS; }
_ZNK2OT9glyf_impl20CompositeGlyphRecord7get_gidEv:
  260|  63.2k|  {
  261|  63.2k|#ifndef HB_NO_BEYOND_64K
  262|  63.2k|    if (flags & GID_IS_24BIT)
  ------------------
  |  Branch (262:9): [True: 40.0k, False: 23.2k]
  ------------------
  263|  40.0k|      return StructAfter<const HBGlyphID24> (flags);
  264|  23.2k|    else
  265|  23.2k|#endif
  266|  23.2k|      return StructAfter<const HBGlyphID16> (flags);
  267|  63.2k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord18get_transformationERA4_fRNS_15contour_point_tE:
  206|   132k|  {
  207|   132k|    matrix[0] = matrix[3] = 1.f;
  208|   132k|    matrix[1] = matrix[2] = 0.f;
  209|       |
  210|   132k|    const auto *p = &StructAfter<const HBINT8> (flags);
  211|   132k|#ifndef HB_NO_BEYOND_64K
  212|   132k|    if (flags & GID_IS_24BIT)
  ------------------
  |  Branch (212:9): [True: 84.8k, False: 47.4k]
  ------------------
  213|  84.8k|      p += HBGlyphID24::static_size;
  214|  47.4k|    else
  215|  47.4k|#endif
  216|  47.4k|      p += HBGlyphID16::static_size;
  217|   132k|    int tx, ty;
  218|   132k|    if (flags & ARG_1_AND_2_ARE_WORDS)
  ------------------
  |  Branch (218:9): [True: 74.8k, False: 57.5k]
  ------------------
  219|  74.8k|    {
  220|  74.8k|      tx = *(const HBINT16 *) p;
  221|  74.8k|      p += HBINT16::static_size;
  222|  74.8k|      ty = *(const HBINT16 *) p;
  223|  74.8k|      p += HBINT16::static_size;
  224|  74.8k|    }
  225|  57.5k|    else
  226|  57.5k|    {
  227|  57.5k|      tx = *p++;
  228|  57.5k|      ty = *p++;
  229|  57.5k|    }
  230|   132k|    if (is_anchored ()) tx = ty = 0;
  ------------------
  |  Branch (230:9): [True: 56.1k, False: 76.1k]
  ------------------
  231|       |
  232|   132k|    trans.init ((float) tx, (float) ty);
  233|       |
  234|   132k|    {
  235|   132k|      const F2DOT14 *points = (const F2DOT14 *) p;
  236|   132k|      if (flags & WE_HAVE_A_SCALE)
  ------------------
  |  Branch (236:11): [True: 69.5k, False: 62.7k]
  ------------------
  237|  69.5k|      {
  238|  69.5k|	matrix[0] = matrix[3] = points[0].to_float ();
  239|  69.5k|	return true;
  240|  69.5k|      }
  241|  62.7k|      else if (flags & WE_HAVE_AN_X_AND_Y_SCALE)
  ------------------
  |  Branch (241:16): [True: 15.1k, False: 47.6k]
  ------------------
  242|  15.1k|      {
  243|  15.1k|	matrix[0] = points[0].to_float ();
  244|  15.1k|	matrix[3] = points[1].to_float ();
  245|  15.1k|	return true;
  246|  15.1k|      }
  247|  47.6k|      else if (flags & WE_HAVE_A_TWO_BY_TWO)
  ------------------
  |  Branch (247:16): [True: 8.90k, False: 38.7k]
  ------------------
  248|  8.90k|      {
  249|  8.90k|	matrix[0] = points[0].to_float ();
  250|  8.90k|	matrix[1] = points[1].to_float ();
  251|  8.90k|	matrix[2] = points[2].to_float ();
  252|  8.90k|	matrix[3] = points[3].to_float ();
  253|  8.90k|	return true;
  254|  8.90k|      }
  255|   132k|    }
  256|  38.7k|    return tx || ty;
  ------------------
  |  Branch (256:12): [True: 5.96k, False: 32.7k]
  |  Branch (256:18): [True: 1.11k, False: 31.6k]
  ------------------
  257|   132k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord16transform_pointsE10hb_array_tINS_15contour_point_tEERA4_KfRKS3_:
  116|  55.4k|  {
  117|  55.4k|    if (scaled_offsets ())
  ------------------
  |  Branch (117:9): [True: 7.13k, False: 48.3k]
  ------------------
  118|  7.13k|    {
  119|  7.13k|      translate (trans, points);
  120|  7.13k|      transform (matrix, points);
  121|  7.13k|    }
  122|  48.3k|    else
  123|  48.3k|    {
  124|  48.3k|      transform (matrix, points);
  125|  48.3k|      translate (trans, points);
  126|  48.3k|    }
  127|  55.4k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord14scaled_offsetsEv:
  202|  55.4k|  { return (flags & (SCALED_COMPONENT_OFFSET | UNSCALED_COMPONENT_OFFSET)) == SCALED_COMPONENT_OFFSET; }
_ZN2OT9glyf_impl20CompositeGlyphRecord9transformERA4_Kf10hb_array_tINS_15contour_point_tEE:
   92|  55.4k|  {
   93|  55.4k|    auto arrayZ = points.arrayZ;
   94|  55.4k|    unsigned count = points.length;
   95|       |
   96|  55.4k|    if (matrix[0] != 1.f || matrix[1] != 0.f ||
  ------------------
  |  Branch (96:9): [True: 40.4k, False: 15.0k]
  |  Branch (96:29): [True: 543, False: 14.4k]
  ------------------
   97|  55.4k|	matrix[2] != 0.f || matrix[3] != 1.f)
  ------------------
  |  Branch (97:2): [True: 603, False: 13.8k]
  |  Branch (97:22): [True: 682, False: 13.1k]
  ------------------
   98|   409k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (98:28): [True: 367k, False: 42.2k]
  ------------------
   99|   367k|        arrayZ[i].transform (matrix);
  100|  55.4k|  }
_ZNK2OT9glyf_impl20CompositeGlyphRecord11is_anchoredEv:
   68|   187k|  bool is_anchored ()       const { return !(flags & ARGS_ARE_XY_VALUES); }
_ZNK2OT9glyf_impl20CompositeGlyphRecord17get_anchor_pointsERjS2_:
   70|  20.8k|  {
   71|  20.8k|    const auto *p = &StructAfter<const HBUINT8> (flags);
   72|  20.8k|#ifndef HB_NO_BEYOND_64K
   73|  20.8k|    if (flags & GID_IS_24BIT)
  ------------------
  |  Branch (73:9): [True: 10.8k, False: 9.93k]
  ------------------
   74|  10.8k|      p += HBGlyphID24::static_size;
   75|  9.93k|    else
   76|  9.93k|#endif
   77|  9.93k|      p += HBGlyphID16::static_size;
   78|  20.8k|    if (flags & ARG_1_AND_2_ARE_WORDS)
  ------------------
  |  Branch (78:9): [True: 7.12k, False: 13.7k]
  ------------------
   79|  7.12k|    {
   80|  7.12k|      point1 = ((const HBUINT16 *) p)[0];
   81|  7.12k|      point2 = ((const HBUINT16 *) p)[1];
   82|  7.12k|    }
   83|  13.7k|    else
   84|  13.7k|    {
   85|  13.7k|      point1 = p[0];
   86|  13.7k|      point2 = p[1];
   87|  13.7k|    }
   88|  20.8k|  }
_ZN2OT9glyf_impl20CompositeGlyphRecord9translateERKNS_15contour_point_tE10hb_array_tIS2_E:
  104|  59.3k|  {
  105|  59.3k|    auto arrayZ = points.arrayZ;
  106|  59.3k|    unsigned count = points.length;
  107|       |
  108|  59.3k|    if (trans.x != 0.f || trans.y != 0.f)
  ------------------
  |  Branch (108:9): [True: 31.8k, False: 27.5k]
  |  Branch (108:27): [True: 2.32k, False: 25.1k]
  ------------------
  109|   191k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (109:28): [True: 157k, False: 34.2k]
  ------------------
  110|   157k|        arrayZ[i].translate (trans);
  111|  59.3k|  }

_ZN2OT9glyf_impl5GlyphC2Ev:
  553|   274k|  {}
_ZN2OT9glyf_impl5GlyphC2E10hb_array_tIKcEj:
  559|  83.2k|  {
  560|  83.2k|    int num_contours = header->numberOfContours;
  561|  83.2k|    if (unlikely (num_contours == 0)) type = EMPTY;
  ------------------
  |  |  259|  83.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18.1k, False: 65.0k]
  |  |  ------------------
  ------------------
  562|  65.0k|    else if (num_contours > 0) type = SIMPLE;
  ------------------
  |  Branch (562:14): [True: 12.6k, False: 52.4k]
  ------------------
  563|  52.4k|    else if (num_contours == -1) type = COMPOSITE;
  ------------------
  |  Branch (563:14): [True: 23.6k, False: 28.8k]
  ------------------
  564|  28.8k|#ifndef HB_NO_VAR_COMPOSITES
  565|  28.8k|    else if (num_contours == -2) type = VAR_COMPOSITE;
  ------------------
  |  Branch (565:14): [True: 26.7k, False: 2.15k]
  ------------------
  566|  2.15k|#endif
  567|  2.15k|    else type = EMPTY; // Spec deviation; Spec says COMPOSITE, but not seen in the wild.
  568|  83.2k|  }
_ZNK2OT9glyf_impl5Glyph10get_pointsINS_18glyf_accelerator_tEEEbP9hb_font_tRKT_RNS_22contour_point_vector_tEPS9_P16head_maxp_info_tPjbbb10hb_array_tIiEjSE_:
  298|   187k|  {
  299|   187k|    if (unlikely (depth > HB_MAX_NESTING_LEVEL)) return false;
  ------------------
  |  |  259|   187k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 277, False: 187k]
  |  |  ------------------
  ------------------
  300|   187k|    unsigned stack_edge_count = 0;
  301|   187k|    if (!edge_count) edge_count = &stack_edge_count;
  ------------------
  |  Branch (301:9): [True: 9.08k, False: 178k]
  ------------------
  302|   187k|    if (unlikely (*edge_count > HB_GLYF_MAX_EDGE_COUNT)) return false;
  ------------------
  |  |  259|   187k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 96, False: 187k]
  |  |  ------------------
  ------------------
  303|   187k|    (*edge_count)++;
  304|       |
  305|   187k|    if (head_maxp_info)
  ------------------
  |  Branch (305:9): [True: 0, False: 187k]
  ------------------
  306|      0|    {
  307|      0|      head_maxp_info->maxComponentDepth = hb_max (head_maxp_info->maxComponentDepth, depth);
  308|      0|    }
  309|       |
  310|   187k|    if (!coords)
  ------------------
  |  Branch (310:9): [True: 74.0k, False: 113k]
  ------------------
  311|  74.0k|      coords = hb_array (font->coords, font->num_coords);
  312|       |
  313|   187k|    contour_point_vector_t stack_points;
  314|   187k|    contour_point_vector_t &points = type == SIMPLE ? all_points : stack_points;
  ------------------
  |  Branch (314:38): [True: 10.4k, False: 177k]
  ------------------
  315|   187k|    unsigned old_length = points.length;
  316|       |
  317|   187k|    switch (type) {
  ------------------
  |  Branch (317:13): [True: 0, False: 187k]
  ------------------
  318|  10.4k|    case SIMPLE:
  ------------------
  |  Branch (318:5): [True: 10.4k, False: 177k]
  ------------------
  319|  10.4k|      if (depth == 0 && head_maxp_info)
  ------------------
  |  Branch (319:11): [True: 3.21k, False: 7.18k]
  |  Branch (319:25): [True: 0, False: 3.21k]
  ------------------
  320|      0|        head_maxp_info->maxContours = hb_max (head_maxp_info->maxContours, (unsigned) header->numberOfContours);
  321|  10.4k|      if (depth > 0 && composite_contours)
  ------------------
  |  Branch (321:11): [True: 7.18k, False: 3.21k]
  |  Branch (321:24): [True: 0, False: 7.18k]
  ------------------
  322|      0|        *composite_contours += (unsigned) header->numberOfContours;
  323|  10.4k|      if (unlikely (!SimpleGlyph (*header, bytes).get_contour_points (all_points, phantom_only)))
  ------------------
  |  |  259|  10.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.45k, False: 8.94k]
  |  |  ------------------
  ------------------
  324|  1.45k|	return false;
  325|  8.94k|      break;
  326|  23.3k|    case COMPOSITE:
  ------------------
  |  Branch (326:5): [True: 23.3k, False: 164k]
  ------------------
  327|  23.3k|    {
  328|  23.3k|      for (auto &item : get_composite_iterator ())
  ------------------
  |  Branch (328:23): [True: 76.9k, False: 23.0k]
  ------------------
  329|  76.9k|        if (unlikely (!item.get_points (points))) return false;
  ------------------
  |  |  259|  76.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 263, False: 76.6k]
  |  |  ------------------
  ------------------
  330|  23.0k|      break;
  331|  23.3k|    }
  332|  23.0k|#ifndef HB_NO_VAR_COMPOSITES
  333|  25.9k|    case VAR_COMPOSITE:
  ------------------
  |  Branch (333:5): [True: 25.9k, False: 161k]
  ------------------
  334|  25.9k|    {
  335|  25.9k|      for (auto &item : get_var_composite_iterator ())
  ------------------
  |  Branch (335:23): [True: 602k, False: 25.6k]
  ------------------
  336|   602k|        if (unlikely (!item.get_points (points))) return false;
  ------------------
  |  |  259|   602k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 347, False: 602k]
  |  |  ------------------
  ------------------
  337|  25.6k|      break;
  338|  25.9k|    }
  339|  25.6k|#endif
  340|   127k|    case EMPTY:
  ------------------
  |  Branch (340:5): [True: 127k, False: 59.7k]
  ------------------
  341|   127k|      break;
  342|   187k|    }
  343|       |
  344|       |    /* Init phantom points */
  345|   185k|    if (unlikely (!points.resize (points.length + PHANTOM_COUNT))) return false;
  ------------------
  |  |  259|   185k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 167, False: 185k]
  |  |  ------------------
  ------------------
  346|   185k|    hb_array_t<contour_point_t> phantoms = points.as_array ().sub_array (points.length - PHANTOM_COUNT, PHANTOM_COUNT);
  347|   185k|    {
  348|   185k|      int lsb = 0;
  349|   185k|      int h_delta = glyf_accelerator.hmtx->get_leading_bearing_without_var_unscaled (gid, &lsb) ?
  ------------------
  |  Branch (349:21): [True: 36.7k, False: 148k]
  ------------------
  350|   148k|		    (int) header->xMin - lsb : 0;
  351|   185k|      HB_UNUSED int tsb = 0;
  ------------------
  |  |  276|   185k|#define HB_UNUSED	__attribute__((unused))
  ------------------
  352|   185k|      int v_orig  = (int) header->yMax +
  353|   185k|#ifndef HB_NO_VERTICAL
  354|   185k|		    ((void) glyf_accelerator.vmtx->get_leading_bearing_without_var_unscaled (gid, &tsb), tsb)
  355|       |#else
  356|       |		    0
  357|       |#endif
  358|   185k|		    ;
  359|   185k|      unsigned h_adv = glyf_accelerator.hmtx->get_advance_without_var_unscaled (gid);
  360|   185k|      unsigned v_adv =
  361|   185k|#ifndef HB_NO_VERTICAL
  362|   185k|		       glyf_accelerator.vmtx->get_advance_without_var_unscaled (gid)
  363|       |#else
  364|       |		       - font->face->get_upem ()
  365|       |#endif
  366|   185k|		       ;
  367|   185k|      phantoms[PHANTOM_LEFT].x = h_delta;
  368|   185k|      phantoms[PHANTOM_RIGHT].x = (int) h_adv + h_delta;
  369|   185k|      phantoms[PHANTOM_TOP].y = v_orig;
  370|   185k|      phantoms[PHANTOM_BOTTOM].y = v_orig - (int) v_adv;
  371|   185k|    }
  372|       |
  373|   185k|#ifndef HB_NO_VAR
  374|   185k|    glyf_accelerator.gvar->apply_deltas_to_points (gid,
  375|   185k|						   coords,
  376|   185k|						   points.as_array ().sub_array (old_length));
  377|   185k|#endif
  378|       |
  379|       |    // mainly used by CompositeGlyph calculating new X/Y offset value so no need to extend it
  380|       |    // with child glyphs' points
  381|   185k|    if (points_with_deltas != nullptr && depth == 0 && type == COMPOSITE)
  ------------------
  |  Branch (381:9): [True: 0, False: 185k]
  |  Branch (381:42): [True: 0, False: 0]
  |  Branch (381:56): [True: 0, False: 0]
  ------------------
  382|      0|    {
  383|      0|      if (unlikely (!points_with_deltas->resize (points.length))) return false;
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  384|      0|      *points_with_deltas = points;
  385|      0|    }
  386|       |
  387|   185k|    switch (type) {
  ------------------
  |  Branch (387:13): [True: 0, False: 185k]
  ------------------
  388|  8.94k|    case SIMPLE:
  ------------------
  |  Branch (388:5): [True: 8.94k, False: 176k]
  ------------------
  389|  8.94k|      if (depth == 0 && head_maxp_info)
  ------------------
  |  Branch (389:11): [True: 1.82k, False: 7.11k]
  |  Branch (389:25): [True: 0, False: 1.82k]
  ------------------
  390|      0|        head_maxp_info->maxPoints = hb_max (head_maxp_info->maxPoints, all_points.length - old_length - 4);
  391|  8.94k|      break;
  392|  23.0k|    case COMPOSITE:
  ------------------
  |  Branch (392:5): [True: 23.0k, False: 162k]
  ------------------
  393|  23.0k|    {
  394|  23.0k|      unsigned int comp_index = 0;
  395|  23.0k|      for (auto &item : get_composite_iterator ())
  ------------------
  |  Branch (395:23): [True: 69.4k, False: 9.04k]
  ------------------
  396|  69.4k|      {
  397|  69.4k|	unsigned old_count = all_points.length;
  398|       |
  399|  69.4k|	if (unlikely ((!phantom_only || (use_my_metrics && item.is_use_my_metrics ())) &&
  ------------------
  |  |  259|   284k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.9k, False: 55.4k]
  |  |  |  Branch (259:47): [True: 27.6k, False: 0]
  |  |  |  Branch (259:47): [True: 21.4k, False: 6.15k]
  |  |  |  Branch (259:47): [True: 41.8k, False: 27.6k]
  |  |  |  Branch (259:47): [True: 13.9k, False: 49.2k]
  |  |  ------------------
  ------------------
  400|  69.4k|		      !glyf_accelerator.glyph_for_gid (item.get_gid ())
  401|  69.4k|				       .get_points (font,
  402|  69.4k|						    glyf_accelerator,
  403|  69.4k|						    all_points,
  404|  69.4k|						    points_with_deltas,
  405|  69.4k|						    head_maxp_info,
  406|  69.4k|						    composite_contours,
  407|  69.4k|						    shift_points_hori,
  408|  69.4k|						    use_my_metrics,
  409|  69.4k|						    phantom_only,
  410|  69.4k|						    coords,
  411|  69.4k|						    depth + 1,
  412|  69.4k|						    edge_count)))
  413|  13.9k|	  return false;
  414|       |
  415|  55.4k|	auto comp_points = all_points.as_array ().sub_array (old_count);
  416|       |
  417|       |	/* Copy phantom points from component if USE_MY_METRICS flag set */
  418|  55.4k|	if (use_my_metrics && item.is_use_my_metrics ())
  ------------------
  |  Branch (418:6): [True: 55.4k, False: 0]
  |  Branch (418:24): [True: 33.6k, False: 21.7k]
  ------------------
  419|   168k|	  for (unsigned int i = 0; i < PHANTOM_COUNT; i++)
  ------------------
  |  Branch (419:29): [True: 134k, False: 33.6k]
  ------------------
  420|   134k|	    phantoms[i] = comp_points[comp_points.length - PHANTOM_COUNT + i];
  421|       |
  422|  55.4k|	float matrix[4];
  423|  55.4k|	contour_point_t default_trans;
  424|  55.4k|	item.get_transformation (matrix, default_trans);
  425|       |
  426|       |	/* Apply component transformation & translation (with deltas applied) */
  427|  55.4k|	item.transform_points (comp_points, matrix, points[comp_index]);
  428|       |
  429|  55.4k|	if (item.is_anchored ())
  ------------------
  |  Branch (429:6): [True: 20.8k, False: 34.6k]
  ------------------
  430|  20.8k|	{
  431|  20.8k|	  unsigned int p1, p2;
  432|  20.8k|	  item.get_anchor_points (p1, p2);
  433|  20.8k|	  if (likely (p1 < all_points.length && p2 < comp_points.length))
  ------------------
  |  |  258|  26.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.93k, False: 16.8k]
  |  |  |  Branch (258:45): [True: 5.46k, False: 15.3k]
  |  |  |  Branch (258:45): [True: 3.93k, False: 1.52k]
  |  |  ------------------
  ------------------
  434|  3.93k|	  {
  435|  3.93k|	    contour_point_t delta;
  436|  3.93k|	    delta.init (all_points[p1].x - comp_points[p2].x,
  437|  3.93k|			all_points[p1].y - comp_points[p2].y);
  438|       |
  439|  3.93k|	    item.translate (delta, comp_points);
  440|  3.93k|	  }
  441|  20.8k|	}
  442|       |
  443|  55.4k|	all_points.resize (all_points.length - PHANTOM_COUNT);
  444|       |
  445|  55.4k|	if (all_points.length > HB_GLYF_MAX_POINTS)
  ------------------
  |  |   97|  55.4k|#define HB_GLYF_MAX_POINTS 20000
  ------------------
  |  Branch (445:6): [True: 40, False: 55.4k]
  ------------------
  446|     40|	  return false;
  447|       |
  448|  55.4k|	comp_index++;
  449|  55.4k|      }
  450|       |
  451|  9.04k|      if (head_maxp_info && depth == 0)
  ------------------
  |  Branch (451:11): [True: 0, False: 9.04k]
  |  Branch (451:29): [True: 0, False: 0]
  ------------------
  452|      0|      {
  453|      0|        if (composite_contours)
  ------------------
  |  Branch (453:13): [True: 0, False: 0]
  ------------------
  454|      0|          head_maxp_info->maxCompositeContours = hb_max (head_maxp_info->maxCompositeContours, *composite_contours);
  455|      0|        head_maxp_info->maxCompositePoints = hb_max (head_maxp_info->maxCompositePoints, all_points.length);
  456|      0|        head_maxp_info->maxComponentElements = hb_max (head_maxp_info->maxComponentElements, comp_index);
  457|      0|      }
  458|  9.04k|      all_points.extend (phantoms);
  459|  9.04k|    } break;
  460|      0|#ifndef HB_NO_VAR_COMPOSITES
  461|  25.6k|    case VAR_COMPOSITE:
  ------------------
  |  Branch (461:5): [True: 25.6k, False: 159k]
  ------------------
  462|  25.6k|    {
  463|  25.6k|      hb_array_t<contour_point_t> points_left = points.as_array ();
  464|  25.6k|      for (auto &item : get_var_composite_iterator ())
  ------------------
  |  Branch (464:23): [True: 334k, False: 9.76k]
  ------------------
  465|   334k|      {
  466|   334k|	unsigned item_num_points = item.get_num_points ();
  467|   334k|	hb_array_t<contour_point_t> record_points = points_left.sub_array (0, item_num_points);
  468|   334k|	assert (record_points.length == item_num_points);
  469|       |
  470|      0|	auto component_coords = coords;
  471|       |	/* Copying coords is expensive; so we have put an arbitrary
  472|       |	 * limit on the max number of coords for now. */
  473|   334k|	if (item.is_reset_unspecified_axes () ||
  ------------------
  |  Branch (473:6): [True: 41.7k, False: 292k]
  ------------------
  474|   334k|	    coords.length > HB_GLYF_VAR_COMPOSITE_MAX_AXES)
  ------------------
  |  |   93|   292k|#define HB_GLYF_VAR_COMPOSITE_MAX_AXES 4096
  ------------------
  |  Branch (474:6): [True: 0, False: 292k]
  ------------------
  475|  41.7k|	  component_coords = hb_array<int> ();
  476|       |
  477|   334k|	coord_setter_t coord_setter (component_coords);
  478|   334k|	item.set_variations (coord_setter, record_points);
  479|       |
  480|   334k|	unsigned old_count = all_points.length;
  481|       |
  482|   334k|	if (unlikely ((!phantom_only || (use_my_metrics && item.is_use_my_metrics ())) &&
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15.8k, False: 318k]
  |  |  |  Branch (259:47): [True: 266k, False: 0]
  |  |  |  Branch (259:47): [True: 47.8k, False: 218k]
  |  |  |  Branch (259:47): [True: 67.7k, False: 266k]
  |  |  |  Branch (259:47): [True: 15.8k, False: 99.7k]
  |  |  ------------------
  ------------------
  483|   334k|		      !glyf_accelerator.glyph_for_gid (item.get_gid ())
  484|   334k|				       .get_points (font,
  485|   334k|						    glyf_accelerator,
  486|   334k|						    all_points,
  487|   334k|						    points_with_deltas,
  488|   334k|						    head_maxp_info,
  489|   334k|						    nullptr,
  490|   334k|						    shift_points_hori,
  491|   334k|						    use_my_metrics,
  492|   334k|						    phantom_only,
  493|   334k|						    coord_setter.get_coords (),
  494|   334k|						    depth + 1,
  495|   334k|						    edge_count)))
  496|  15.8k|	  return false;
  497|       |
  498|   318k|	auto comp_points = all_points.as_array ().sub_array (old_count);
  499|       |
  500|       |	/* Apply component transformation */
  501|   318k|	if (comp_points) // Empty in case of phantom_only
  ------------------
  |  Branch (501:6): [True: 98.7k, False: 219k]
  ------------------
  502|  98.7k|	  item.transform_points (record_points, comp_points);
  503|       |
  504|       |	/* Copy phantom points from component if USE_MY_METRICS flag set */
  505|   318k|	if (use_my_metrics && item.is_use_my_metrics ())
  ------------------
  |  Branch (505:6): [True: 318k, False: 0]
  |  Branch (505:24): [True: 54.0k, False: 264k]
  ------------------
  506|   270k|	  for (unsigned int i = 0; i < PHANTOM_COUNT; i++)
  ------------------
  |  Branch (506:29): [True: 216k, False: 54.0k]
  ------------------
  507|   216k|	    phantoms[i] = comp_points[comp_points.length - PHANTOM_COUNT + i];
  508|       |
  509|   318k|	all_points.resize (all_points.length - PHANTOM_COUNT);
  510|       |
  511|   318k|	if (all_points.length > HB_GLYF_MAX_POINTS)
  ------------------
  |  |   97|   318k|#define HB_GLYF_MAX_POINTS 20000
  ------------------
  |  Branch (511:6): [True: 40, False: 318k]
  ------------------
  512|     40|	  return false;
  513|       |
  514|   318k|	points_left += item_num_points;
  515|   318k|      }
  516|  9.76k|      all_points.extend (phantoms);
  517|  9.76k|    } break;
  518|      0|#endif
  519|   127k|    case EMPTY:
  ------------------
  |  Branch (519:5): [True: 127k, False: 57.6k]
  ------------------
  520|   127k|      all_points.extend (phantoms);
  521|   127k|      break;
  522|   185k|    }
  523|       |
  524|   155k|    if (depth == 0 && shift_points_hori) /* Apply at top level */
  ------------------
  |  Branch (524:9): [True: 6.37k, False: 149k]
  |  Branch (524:23): [True: 6.37k, False: 0]
  ------------------
  525|  6.37k|    {
  526|       |      /* Undocumented rasterizer behavior:
  527|       |       * Shift points horizontally by the updated left side bearing
  528|       |       */
  529|  6.37k|      int v = -phantoms[PHANTOM_LEFT].x;
  530|  6.37k|      if (v)
  ------------------
  |  Branch (530:11): [True: 2.07k, False: 4.29k]
  ------------------
  531|  2.07k|        for (auto &point : all_points)
  ------------------
  |  Branch (531:26): [True: 4.17M, False: 2.07k]
  ------------------
  532|  4.17M|	  point.x += v;
  533|  6.37k|    }
  534|       |
  535|   155k|    return !all_points.in_error ();
  536|   185k|  }
_ZNK2OT9glyf_impl5Glyph22get_composite_iteratorEv:
   43|  46.4k|  {
   44|  46.4k|    if (type != COMPOSITE) return composite_iter_t ();
  ------------------
  |  Branch (44:9): [True: 0, False: 46.4k]
  ------------------
   45|  46.4k|    return CompositeGlyph (*header, bytes).iter ();
   46|  46.4k|  }
_ZNK2OT9glyf_impl5Glyph26get_var_composite_iteratorEv:
   48|  51.5k|  {
   49|  51.5k|#ifndef HB_NO_VAR_COMPOSITES
   50|  51.5k|    if (type != VAR_COMPOSITE) return var_composite_iter_t ();
  ------------------
  |  Branch (50:9): [True: 0, False: 51.5k]
  ------------------
   51|  51.5k|    return VarCompositeGlyph (*header, bytes).iter ();
   52|       |#else
   53|       |    return var_composite_iter_t ();
   54|       |#endif
   55|  51.5k|  }
_ZNK2OT9glyf_impl5Glyph30get_extents_without_var_scaledEP9hb_font_tRKNS_18glyf_accelerator_tEP18hb_glyph_extents_t:
  540|   169k|  {
  541|   169k|    if (type == EMPTY) return true; /* Empty glyph; zero extents. */
  ------------------
  |  Branch (541:9): [True: 166k, False: 3.05k]
  ------------------
  542|  3.05k|    return header->get_extents_without_var_scaled (font, glyf_accelerator, gid, extents);
  543|   169k|  }

_ZNK2OT9glyf_impl11GlyphHeader30get_extents_without_var_scaledINS_18glyf_accelerator_tEEEbP9hb_font_tRKT_jP18hb_glyph_extents_t:
   19|  3.05k|  {
   20|       |    /* Undocumented rasterizer behavior: shift glyph to the left by (lsb - xMin), i.e., xMin = lsb */
   21|       |    /* extents->x_bearing = hb_min (glyph_header.xMin, glyph_header.xMax); */
   22|  3.05k|    int lsb = hb_min (xMin, xMax);
   23|  3.05k|    (void) glyf_accelerator.hmtx->get_leading_bearing_without_var_unscaled (gid, &lsb);
   24|  3.05k|    extents->x_bearing = lsb;
   25|  3.05k|    extents->y_bearing = hb_max (yMin, yMax);
   26|  3.05k|    extents->width     = hb_max (xMin, xMax) - hb_min (xMin, xMax);
   27|  3.05k|    extents->height    = hb_min (yMin, yMax) - hb_max (yMin, yMax);
   28|       |
   29|  3.05k|    font->scale_glyph_extents (extents);
   30|       |
   31|  3.05k|    return true;
   32|  3.05k|  }

_ZN2OT9glyf_impl11SimpleGlyphC2ERKNS0_11GlyphHeaderE10hb_array_tIKcE:
   29|  10.4k|    header (header_), bytes (bytes_) {}
_ZNK2OT9glyf_impl11SimpleGlyph18get_contour_pointsERNS_22contour_point_vector_tEb:
  185|  10.4k|  {
  186|  10.4k|    const HBUINT16 *endPtsOfContours = &StructAfter<HBUINT16> (header);
  187|  10.4k|    int num_contours = header.numberOfContours;
  188|  10.4k|    assert (num_contours > 0);
  189|       |    /* One extra item at the end, for the instruction-count below. */
  190|  10.4k|    if (unlikely (!bytes.check_range (&endPtsOfContours[num_contours]))) return false;
  ------------------
  |  |  259|  10.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 300, False: 10.1k]
  |  |  ------------------
  ------------------
  191|  10.1k|    unsigned int num_points = endPtsOfContours[num_contours - 1] + 1;
  192|       |
  193|  10.1k|    unsigned old_length = points.length;
  194|  10.1k|    points.alloc (points.length + num_points + 4, true); // Allocate for phantom points, to avoid a possible copy
  195|  10.1k|    if (!points.resize (points.length + num_points, false)) return false;
  ------------------
  |  Branch (195:9): [True: 74, False: 10.0k]
  ------------------
  196|  10.0k|    auto points_ = points.as_array ().sub_array (old_length);
  197|  10.0k|    hb_memset (points_.arrayZ, 0, sizeof (contour_point_t) * num_points);
  198|  10.0k|    if (phantom_only) return true;
  ------------------
  |  Branch (198:9): [True: 2.74k, False: 7.28k]
  ------------------
  199|       |
  200|   662k|    for (int i = 0; i < num_contours; i++)
  ------------------
  |  Branch (200:21): [True: 654k, False: 7.28k]
  ------------------
  201|   654k|      points_[endPtsOfContours[i]].is_end_point = true;
  202|       |
  203|       |    /* Skip instructions */
  204|  7.28k|    const HBUINT8 *p = &StructAtOffset<HBUINT8> (&endPtsOfContours[num_contours + 1],
  205|  7.28k|						 endPtsOfContours[num_contours]);
  206|       |
  207|  7.28k|    if (unlikely ((const char *) p < bytes.arrayZ)) return false; /* Unlikely overflow */
  ------------------
  |  |  259|  7.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.28k]
  |  |  ------------------
  ------------------
  208|  7.28k|    const HBUINT8 *end = (const HBUINT8 *) (bytes.arrayZ + bytes.length);
  209|  7.28k|    if (unlikely (p >= end)) return false;
  ------------------
  |  |  259|  7.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 160, False: 7.12k]
  |  |  ------------------
  ------------------
  210|       |
  211|       |    /* Read x & y coordinates */
  212|  7.12k|    return read_flags (p, points_, end)
  ------------------
  |  Branch (212:12): [True: 6.81k, False: 309]
  ------------------
  213|  7.12k|        && read_points (p, points_, end, &contour_point_t::x,
  ------------------
  |  Branch (213:12): [True: 6.49k, False: 325]
  ------------------
  214|  6.81k|			FLAG_X_SHORT, FLAG_X_SAME)
  215|  7.12k|	&& read_points (p, points_, end, &contour_point_t::y,
  ------------------
  |  Branch (215:5): [True: 6.20k, False: 291]
  ------------------
  216|  6.49k|			FLAG_Y_SHORT, FLAG_Y_SAME);
  217|  7.28k|  }
_ZN2OT9glyf_impl11SimpleGlyph10read_flagsERPKNS_7IntTypeIhLj1EEE10hb_array_tINS_15contour_point_tEES5_:
  129|  7.12k|  {
  130|  7.12k|    unsigned count = points_.length;
  131|   320k|    for (unsigned int i = 0; i < count;)
  ------------------
  |  Branch (131:30): [True: 313k, False: 6.81k]
  ------------------
  132|   313k|    {
  133|   313k|      if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|   313k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 157, False: 313k]
  |  |  ------------------
  ------------------
  134|   313k|      uint8_t flag = *p++;
  135|   313k|      points_.arrayZ[i++].flag = flag;
  136|   313k|      if (flag & FLAG_REPEAT)
  ------------------
  |  Branch (136:11): [True: 75.5k, False: 238k]
  ------------------
  137|  75.5k|      {
  138|  75.5k|	if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|  75.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 152, False: 75.3k]
  |  |  ------------------
  ------------------
  139|  75.3k|	unsigned int repeat_count = *p++;
  140|  75.3k|	unsigned stop = hb_min (i + repeat_count, count);
  141|  5.21M|	for (; i < stop; i++)
  ------------------
  |  Branch (141:9): [True: 5.14M, False: 75.3k]
  ------------------
  142|  5.14M|	  points_.arrayZ[i].flag = flag;
  143|  75.3k|      }
  144|   313k|    }
  145|  6.81k|    return true;
  146|  7.12k|  }
_ZN2OT9glyf_impl11SimpleGlyph11read_pointsERPKNS_7IntTypeIhLj1EEE10hb_array_tINS_15contour_point_tEES5_MS8_fNS1_19simple_glyph_flag_tESB_:
  154|  13.3k|  {
  155|  13.3k|    int v = 0;
  156|       |
  157|  13.3k|    unsigned count = points_.length;
  158|  1.85M|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (158:26): [True: 1.84M, False: 12.6k]
  ------------------
  159|  1.84M|    {
  160|  1.84M|      unsigned flag = points_.arrayZ[i].flag;
  161|  1.84M|      if (flag & short_flag)
  ------------------
  |  Branch (161:11): [True: 1.08M, False: 759k]
  ------------------
  162|  1.08M|      {
  163|  1.08M|	if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|  1.08M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 316, False: 1.08M]
  |  |  ------------------
  ------------------
  164|  1.08M|	if (flag & same_flag)
  ------------------
  |  Branch (164:6): [True: 702k, False: 378k]
  ------------------
  165|   702k|	  v += *p++;
  166|   378k|	else
  167|   378k|	  v -= *p++;
  168|  1.08M|      }
  169|   759k|      else
  170|   759k|      {
  171|   759k|	if (!(flag & same_flag))
  ------------------
  |  Branch (171:6): [True: 461k, False: 297k]
  ------------------
  172|   461k|	{
  173|   461k|	  if (unlikely (p + HBINT16::static_size > end)) return false;
  ------------------
  |  |  259|   461k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 300, False: 461k]
  |  |  ------------------
  ------------------
  174|   461k|	  v += *(const HBINT16 *) p;
  175|   461k|	  p += HBINT16::static_size;
  176|   461k|	}
  177|   759k|      }
  178|  1.83M|      points_.arrayZ[i].*m = v;
  179|  1.83M|    }
  180|  12.6k|    return true;
  181|  13.3k|  }

_ZN2OT9glyf_impl17VarCompositeGlyphC2ERKNS0_11GlyphHeaderE10hb_array_tIKcE:
  382|  51.5k|    header (header_), bytes (bytes_) {}
_ZNK2OT9glyf_impl17VarCompositeGlyph4iterEv:
  385|  51.5k|  { return var_composite_iter_t (bytes, &StructAfter<VarCompositeGlyphRecord, GlyphHeader> (header)); }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord8get_sizeEv:
   38|   961k|  {
   39|   961k|    unsigned fl = flags;
   40|   961k|    unsigned int size = min_size;
   41|       |
   42|   961k|    unsigned axis_width = (fl & AXIS_INDICES_ARE_SHORT) ? 4 : 3;
  ------------------
  |  Branch (42:27): [True: 132k, False: 829k]
  ------------------
   43|   961k|    size += numAxes * axis_width;
   44|       |
   45|   961k|    if (fl & GID_IS_24BIT)	size += 1;
  ------------------
  |  Branch (45:9): [True: 134k, False: 826k]
  ------------------
   46|       |
   47|       |    // 2 bytes each for the following flags
   48|   961k|    fl = fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y |
   49|   961k|	       HAVE_ROTATION |
   50|   961k|	       HAVE_SCALE_X | HAVE_SCALE_Y |
   51|   961k|	       HAVE_SKEW_X | HAVE_SKEW_Y |
   52|   961k|	       HAVE_TCENTER_X | HAVE_TCENTER_Y);
   53|   961k|    size += hb_popcount (fl) * 2;
   54|       |
   55|   961k|    return size;
   56|   961k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord8has_moreEv:
   58|   920k|  bool has_more () const { return true; }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord10get_pointsERNS_22contour_point_vector_tE:
  211|   602k|  {
  212|   602k|    unsigned num_points = get_num_points ();
  213|       |
  214|   602k|    points.alloc (points.length + num_points + 4); // For phantom points
  215|   602k|    if (unlikely (!points.resize (points.length + num_points, false))) return false;
  ------------------
  |  |  259|   602k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 347, False: 602k]
  |  |  ------------------
  ------------------
  216|   602k|    contour_point_t *rec_points = points.arrayZ + (points.length - num_points);
  217|   602k|    memset (rec_points, 0, num_points * sizeof (rec_points[0]));
  218|       |
  219|   602k|    unsigned fl = flags;
  220|       |
  221|   602k|    unsigned num_axes = numAxes;
  222|   602k|    unsigned axis_width = (fl & AXIS_INDICES_ARE_SHORT) ? 2 : 1;
  ------------------
  |  Branch (222:27): [True: 84.7k, False: 517k]
  ------------------
  223|   602k|    unsigned axes_size = num_axes * axis_width;
  224|       |
  225|   602k|    const F2DOT14 *q = (const F2DOT14 *) (axes_size +
  226|   602k|					  (fl & GID_IS_24BIT ? 3 : 2) +
  ------------------
  |  Branch (226:9): [True: 73.1k, False: 528k]
  ------------------
  227|   602k|					  (const HBUINT8 *) &pad);
  228|       |
  229|   602k|    unsigned count = num_axes;
  230|   602k|    if (fl & AXES_HAVE_VARIATION)
  ------------------
  |  Branch (230:9): [True: 83.1k, False: 518k]
  ------------------
  231|  83.1k|    {
  232|  5.57M|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (232:28): [True: 5.48M, False: 83.1k]
  ------------------
  233|  5.48M|	rec_points++->x = q++->to_int ();
  234|  83.1k|    }
  235|   518k|    else
  236|   518k|      q += count;
  237|       |
  238|   602k|    const HBUINT16 *p = (const HBUINT16 *) q;
  239|       |
  240|   602k|    if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y))
  ------------------
  |  Branch (240:9): [True: 84.4k, False: 517k]
  ------------------
  241|  84.4k|    {
  242|  84.4k|      int translateX = (fl & HAVE_TRANSLATE_X) ? * (const FWORD *) p++ : 0;
  ------------------
  |  Branch (242:24): [True: 60.9k, False: 23.5k]
  ------------------
  243|  84.4k|      int translateY = (fl & HAVE_TRANSLATE_Y) ? * (const FWORD *) p++ : 0;
  ------------------
  |  Branch (243:24): [True: 55.6k, False: 28.8k]
  ------------------
  244|  84.4k|      rec_points->x = translateX;
  245|  84.4k|      rec_points->y = translateY;
  246|  84.4k|      rec_points++;
  247|  84.4k|    }
  248|   602k|    if (fl & HAVE_ROTATION)
  ------------------
  |  Branch (248:9): [True: 74.6k, False: 527k]
  ------------------
  249|  74.6k|    {
  250|  74.6k|      int rotation = (fl & HAVE_ROTATION) ? ((const F4DOT12 *) p++)->to_int () : 0;
  ------------------
  |  Branch (250:22): [True: 74.6k, False: 0]
  ------------------
  251|  74.6k|      rec_points->x = rotation;
  252|  74.6k|      rec_points++;
  253|  74.6k|    }
  254|   602k|    if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y))
  ------------------
  |  Branch (254:9): [True: 77.8k, False: 524k]
  ------------------
  255|  77.8k|    {
  256|  77.8k|      int scaleX = (fl & HAVE_SCALE_X) ? ((const F6DOT10 *) p++)->to_int () : 1 << 10;
  ------------------
  |  Branch (256:20): [True: 60.5k, False: 17.3k]
  ------------------
  257|  77.8k|      int scaleY = (fl & HAVE_SCALE_Y) ? ((const F6DOT10 *) p++)->to_int () : 1 << 10;
  ------------------
  |  Branch (257:20): [True: 43.8k, False: 34.0k]
  ------------------
  258|  77.8k|      if ((fl & UNIFORM_SCALE) && !(fl & HAVE_SCALE_Y))
  ------------------
  |  Branch (258:11): [True: 46.5k, False: 31.3k]
  |  Branch (258:35): [True: 13.9k, False: 32.6k]
  ------------------
  259|  13.9k|	scaleY = scaleX;
  260|  77.8k|      rec_points->x = scaleX;
  261|  77.8k|      rec_points->y = scaleY;
  262|  77.8k|      rec_points++;
  263|  77.8k|    }
  264|   602k|    if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y))
  ------------------
  |  Branch (264:9): [True: 193k, False: 408k]
  ------------------
  265|   193k|    {
  266|   193k|      int skewX = (fl & HAVE_SKEW_X) ? ((const F4DOT12 *) p++)->to_int () : 0;
  ------------------
  |  Branch (266:19): [True: 133k, False: 59.1k]
  ------------------
  267|   193k|      int skewY = (fl & HAVE_SKEW_Y) ? ((const F4DOT12 *) p++)->to_int () : 0;
  ------------------
  |  Branch (267:19): [True: 124k, False: 69.0k]
  ------------------
  268|   193k|      rec_points->x = skewX;
  269|   193k|      rec_points->y = skewY;
  270|   193k|      rec_points++;
  271|   193k|    }
  272|   602k|    if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y))
  ------------------
  |  Branch (272:9): [True: 116k, False: 485k]
  ------------------
  273|   116k|    {
  274|   116k|      int tCenterX = (fl & HAVE_TCENTER_X) ? * (const FWORD *) p++ : 0;
  ------------------
  |  Branch (274:22): [True: 92.7k, False: 23.4k]
  ------------------
  275|   116k|      int tCenterY = (fl & HAVE_TCENTER_Y) ? * (const FWORD *) p++ : 0;
  ------------------
  |  Branch (275:22): [True: 64.6k, False: 51.6k]
  ------------------
  276|   116k|      rec_points->x = tCenterX;
  277|   116k|      rec_points->y = tCenterY;
  278|   116k|      rec_points++;
  279|   116k|    }
  280|       |
  281|   602k|    return true;
  282|   602k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord14get_num_pointsEv:
   85|   936k|  {
   86|   936k|    unsigned fl = flags;
   87|   936k|    unsigned num = 0;
   88|   936k|    if (fl & AXES_HAVE_VARIATION)			num += numAxes;
  ------------------
  |  Branch (88:9): [True: 136k, False: 799k]
  ------------------
   89|       |
   90|       |    /* Hopefully faster code, relying on the value of the flags. */
   91|   936k|    fl = (((fl & (HAVE_TRANSLATE_Y | HAVE_SCALE_Y | HAVE_SKEW_Y | HAVE_TCENTER_Y)) >> 1) | fl) &
   92|   936k|         (HAVE_TRANSLATE_X | HAVE_ROTATION | HAVE_SCALE_X | HAVE_SKEW_X | HAVE_TCENTER_X);
   93|   936k|    num += hb_popcount (fl);
   94|   936k|    return num;
   95|       |
   96|       |    /* Slower but more readable code. */
   97|      0|    if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y))	num++;
  ------------------
  |  Branch (97:9): [True: 0, False: 0]
  ------------------
   98|      0|    if (fl & HAVE_ROTATION)				num++;
  ------------------
  |  Branch (98:9): [True: 0, False: 0]
  ------------------
   99|      0|    if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y))		num++;
  ------------------
  |  Branch (99:9): [True: 0, False: 0]
  ------------------
  100|      0|    if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y))		num++;
  ------------------
  |  Branch (100:9): [True: 0, False: 0]
  ------------------
  101|      0|    if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y))		num++;
  ------------------
  |  Branch (101:9): [True: 0, False: 0]
  ------------------
  102|      0|    return num;
  103|   936k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord25is_reset_unspecified_axesEv:
   61|   334k|  bool is_reset_unspecified_axes () const { return flags & RESET_UNSPECIFIED_AXES; }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord14set_variationsERNS0_14coord_setter_tE10hb_array_tINS_15contour_point_tEE:
  345|   334k|  {
  346|   334k|    bool have_variations = flags & AXES_HAVE_VARIATION;
  347|   334k|    unsigned axis_width = (flags & AXIS_INDICES_ARE_SHORT) ? 2 : 1;
  ------------------
  |  Branch (347:27): [True: 39.2k, False: 295k]
  ------------------
  348|   334k|    unsigned num_axes = numAxes;
  349|       |
  350|   334k|    const HBUINT8  *p = (const HBUINT8 *)  (((HBUINT8 *) &numAxes) + numAxes.static_size + (flags & GID_IS_24BIT ? 3 : 2));
  ------------------
  |  Branch (350:93): [True: 51.7k, False: 282k]
  ------------------
  351|   334k|    const HBUINT16 *q = (const HBUINT16 *) (((HBUINT8 *) &numAxes) + numAxes.static_size + (flags & GID_IS_24BIT ? 3 : 2));
  ------------------
  |  Branch (351:93): [True: 51.7k, False: 282k]
  ------------------
  352|       |
  353|   334k|    const F2DOT14 *a = (const F2DOT14 *) ((HBUINT8 *) (axis_width == 1 ? (p + num_axes) : (HBUINT8 *) (q + num_axes)));
  ------------------
  |  Branch (353:56): [True: 295k, False: 39.2k]
  ------------------
  354|       |
  355|   334k|    unsigned count = num_axes;
  356|  7.94M|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (356:26): [True: 7.61M, False: 334k]
  ------------------
  357|  7.61M|    {
  358|  7.61M|      unsigned axis_index = axis_width == 1 ? (unsigned) *p++ : (unsigned) *q++;
  ------------------
  |  Branch (358:29): [True: 5.99M, False: 1.61M]
  ------------------
  359|       |
  360|  7.61M|      signed v = have_variations ? rec_points.arrayZ[i].x : a++->to_int ();
  ------------------
  |  Branch (360:18): [True: 2.96M, False: 4.64M]
  ------------------
  361|       |
  362|  7.61M|      v = hb_clamp (v, -(1<<14), (1<<14));
  363|  7.61M|      setter[axis_index] = v;
  364|  7.61M|    }
  365|   334k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord17is_use_my_metricsEv:
   60|   585k|  bool is_use_my_metrics () const { return flags & USE_MY_METRICS; }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord7get_gidEv:
   64|   115k|  {
   65|   115k|    if (flags & GID_IS_24BIT)
  ------------------
  |  Branch (65:9): [True: 27.5k, False: 88.0k]
  ------------------
   66|  27.5k|      return * (const HBGlyphID24 *) &pad;
   67|  88.0k|    else
   68|  88.0k|      return * (const HBGlyphID16 *) &pad;
   69|   115k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord16transform_pointsE10hb_array_tIKNS_15contour_point_tEES2_IS3_E:
  107|  98.7k|  {
  108|  98.7k|    float matrix[4];
  109|  98.7k|    contour_point_t trans;
  110|       |
  111|  98.7k|    get_transformation_from_points (record_points.arrayZ, matrix, trans);
  112|       |
  113|  98.7k|    auto arrayZ = points.arrayZ;
  114|  98.7k|    unsigned count = points.length;
  115|       |
  116|  98.7k|    if (matrix[0] != 1.f || matrix[1] != 0.f ||
  ------------------
  |  Branch (116:9): [True: 29.3k, False: 69.4k]
  |  Branch (116:29): [True: 11.3k, False: 58.0k]
  ------------------
  117|  98.7k|	matrix[2] != 0.f || matrix[3] != 1.f)
  ------------------
  |  Branch (117:2): [True: 12.5k, False: 45.5k]
  |  Branch (117:22): [True: 2.84k, False: 42.6k]
  ------------------
  118|  2.72M|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (118:28): [True: 2.67M, False: 56.0k]
  ------------------
  119|  2.67M|        arrayZ[i].transform (matrix);
  120|       |
  121|  98.7k|    if (trans.x != 0.f || trans.y != 0.f)
  ------------------
  |  Branch (121:9): [True: 26.4k, False: 72.2k]
  |  Branch (121:27): [True: 7.00k, False: 65.2k]
  ------------------
  122|  2.55M|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (122:28): [True: 2.52M, False: 33.4k]
  ------------------
  123|  2.52M|        arrayZ[i].translate (trans);
  124|  98.7k|  }
_ZNK2OT9glyf_impl23VarCompositeGlyphRecord30get_transformation_from_pointsEPKNS_15contour_point_tERA4_fRS2_:
  286|  98.7k|  {
  287|  98.7k|    unsigned fl = flags;
  288|       |
  289|  98.7k|    if (fl & AXES_HAVE_VARIATION)
  ------------------
  |  Branch (289:9): [True: 30.1k, False: 68.5k]
  ------------------
  290|  30.1k|      rec_points += numAxes;
  291|       |
  292|  98.7k|    matrix[0] = matrix[3] = 1.f;
  293|  98.7k|    matrix[1] = matrix[2] = 0.f;
  294|  98.7k|    trans.init (0.f, 0.f);
  295|       |
  296|  98.7k|    float translateX = 0.f;
  297|  98.7k|    float translateY = 0.f;
  298|  98.7k|    float rotation = 0.f;
  299|  98.7k|    float scaleX = 1.f;
  300|  98.7k|    float scaleY = 1.f;
  301|  98.7k|    float skewX = 0.f;
  302|  98.7k|    float skewY = 0.f;
  303|  98.7k|    float tCenterX = 0.f;
  304|  98.7k|    float tCenterY = 0.f;
  305|       |
  306|  98.7k|    if (fl & (HAVE_TRANSLATE_X | HAVE_TRANSLATE_Y))
  ------------------
  |  Branch (306:9): [True: 30.6k, False: 68.0k]
  ------------------
  307|  30.6k|    {
  308|  30.6k|      translateX = rec_points->x;
  309|  30.6k|      translateY = rec_points->y;
  310|  30.6k|      rec_points++;
  311|  30.6k|    }
  312|  98.7k|    if (fl & HAVE_ROTATION)
  ------------------
  |  Branch (312:9): [True: 22.7k, False: 76.0k]
  ------------------
  313|  22.7k|    {
  314|  22.7k|      rotation = rec_points->x / (1 << 12);
  315|  22.7k|      rec_points++;
  316|  22.7k|    }
  317|  98.7k|    if (fl & (HAVE_SCALE_X | HAVE_SCALE_Y))
  ------------------
  |  Branch (317:9): [True: 27.7k, False: 70.9k]
  ------------------
  318|  27.7k|    {
  319|  27.7k|      scaleX = rec_points->x / (1 << 10);
  320|  27.7k|      scaleY = rec_points->y / (1 << 10);
  321|  27.7k|      rec_points++;
  322|  27.7k|    }
  323|  98.7k|    if (fl & (HAVE_SKEW_X | HAVE_SKEW_Y))
  ------------------
  |  Branch (323:9): [True: 48.6k, False: 50.1k]
  ------------------
  324|  48.6k|    {
  325|  48.6k|      skewX = rec_points->x / (1 << 12);
  326|  48.6k|      skewY = rec_points->y / (1 << 12);
  327|  48.6k|      rec_points++;
  328|  48.6k|    }
  329|  98.7k|    if (fl & (HAVE_TCENTER_X | HAVE_TCENTER_Y))
  ------------------
  |  Branch (329:9): [True: 28.9k, False: 69.8k]
  ------------------
  330|  28.9k|    {
  331|  28.9k|      tCenterX = rec_points->x;
  332|  28.9k|      tCenterY = rec_points->y;
  333|  28.9k|      rec_points++;
  334|  28.9k|    }
  335|       |
  336|  98.7k|    translate (matrix, trans, translateX + tCenterX, translateY + tCenterY);
  337|  98.7k|    rotate (matrix, trans, rotation);
  338|  98.7k|    scale (matrix, trans, scaleX, scaleY);
  339|  98.7k|    skew (matrix, trans, -skewX, skewY);
  340|  98.7k|    translate (matrix, trans, -tCenterX, -tCenterY);
  341|  98.7k|  }
_ZN2OT9glyf_impl23VarCompositeGlyphRecord9translateERA4_fRNS_15contour_point_tEff:
  153|   197k|  {
  154|   197k|    if (!translateX && !translateY)
  ------------------
  |  Branch (154:9): [True: 146k, False: 51.1k]
  |  Branch (154:24): [True: 132k, False: 13.9k]
  ------------------
  155|   132k|      return;
  156|       |
  157|  65.1k|    trans.x += matrix[0] * translateX + matrix[2] * translateY;
  158|  65.1k|    trans.y += matrix[1] * translateX + matrix[3] * translateY;
  159|  65.1k|  }
_ZN2OT9glyf_impl23VarCompositeGlyphRecord6rotateERA4_fRNS_15contour_point_tEf:
  175|  98.7k|  {
  176|  98.7k|    if (!rotation)
  ------------------
  |  Branch (176:9): [True: 79.6k, False: 19.1k]
  ------------------
  177|  79.6k|      return;
  178|       |
  179|       |    // https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L240
  180|  19.1k|    rotation = rotation * HB_PI;
  ------------------
  |  |  514|  19.1k|#define HB_PI 3.14159265358979f
  ------------------
  181|  19.1k|    float c;
  182|  19.1k|    float s;
  183|  19.1k|#ifdef HAVE_SINCOSF
  184|  19.1k|    sincosf (rotation, &s, &c);
  185|       |#else
  186|       |    c = cosf (rotation);
  187|       |    s = sinf (rotation);
  188|       |#endif
  189|  19.1k|    float other[6] = {c, s, -s, c, 0.f, 0.f};
  190|  19.1k|    transform (matrix, trans, other);
  191|  19.1k|  }
_ZN2OT9glyf_impl23VarCompositeGlyphRecord9transformERA4_fRNS_15contour_point_tEPf:
  128|  58.2k|  {
  129|       |    // https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L268
  130|  58.2k|    float xx1 = other[0];
  131|  58.2k|    float xy1 = other[1];
  132|  58.2k|    float yx1 = other[2];
  133|  58.2k|    float yy1 = other[3];
  134|  58.2k|    float dx1 = other[4];
  135|  58.2k|    float dy1 = other[5];
  136|  58.2k|    float xx2 = matrix[0];
  137|  58.2k|    float xy2 = matrix[1];
  138|  58.2k|    float yx2 = matrix[2];
  139|  58.2k|    float yy2 = matrix[3];
  140|  58.2k|    float dx2 = trans.x;
  141|  58.2k|    float dy2 = trans.y;
  142|       |
  143|  58.2k|    matrix[0] = xx1*xx2 + xy1*yx2;
  144|  58.2k|    matrix[1] = xx1*xy2 + xy1*yy2;
  145|  58.2k|    matrix[2] = yx1*xx2 + yy1*yx2;
  146|  58.2k|    matrix[3] = yx1*xy2 + yy1*yy2;
  147|  58.2k|    trans.x = xx2*dx1 + yx2*dy1 + dx2;
  148|  58.2k|    trans.y = xy2*dx1 + yy2*dy1 + dy2;
  149|  58.2k|  }
_ZN2OT9glyf_impl23VarCompositeGlyphRecord5scaleERA4_fRNS_15contour_point_tEff:
  163|  98.7k|  {
  164|  98.7k|    if (scaleX == 1.f && scaleY == 1.f)
  ------------------
  |  Branch (164:9): [True: 75.0k, False: 23.6k]
  |  Branch (164:26): [True: 70.9k, False: 4.06k]
  ------------------
  165|  70.9k|      return;
  166|       |
  167|  27.7k|    matrix[0] *= scaleX;
  168|  27.7k|    matrix[1] *= scaleX;
  169|  27.7k|    matrix[2] *= scaleY;
  170|  27.7k|    matrix[3] *= scaleY;
  171|  27.7k|  }
_ZN2OT9glyf_impl23VarCompositeGlyphRecord4skewERA4_fRNS_15contour_point_tEff:
  195|  98.7k|  {
  196|  98.7k|    if (!skewX && !skewY)
  ------------------
  |  Branch (196:9): [True: 68.5k, False: 30.1k]
  |  Branch (196:19): [True: 59.6k, False: 8.96k]
  ------------------
  197|  59.6k|      return;
  198|       |
  199|       |    // https://github.com/fonttools/fonttools/blob/f66ee05f71c8b57b5f519ee975e95edcd1466e14/Lib/fontTools/misc/transform.py#L255
  200|  39.1k|    skewX = skewX * HB_PI;
  ------------------
  |  |  514|  39.1k|#define HB_PI 3.14159265358979f
  ------------------
  201|  39.1k|    skewY = skewY * HB_PI;
  ------------------
  |  |  514|  39.1k|#define HB_PI 3.14159265358979f
  ------------------
  202|  39.1k|    float other[6] = {1.f,
  203|  39.1k|		      skewY ? tanf (skewY) : 0.f,
  ------------------
  |  Branch (203:9): [True: 23.7k, False: 15.3k]
  ------------------
  204|  39.1k|		      skewX ? tanf (skewX) : 0.f,
  ------------------
  |  Branch (204:9): [True: 30.1k, False: 8.96k]
  ------------------
  205|  39.1k|		      1.f,
  206|  39.1k|		      0.f, 0.f};
  207|  39.1k|    transform (matrix, trans, other);
  208|  39.1k|  }

_ZN2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEEC2E10hb_array_tIKcEPKS2_:
   19|  51.5k|  {
   20|  51.5k|    set_current (current_);
   21|  51.5k|  }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEE11set_currentEPKS2_:
   39|   972k|  {
   40|   972k|    if (!glyph.check_range (current_, CompositeGlyphRecord::min_size))
  ------------------
  |  Branch (40:9): [True: 10.9k, False: 961k]
  ------------------
   41|  10.9k|    {
   42|  10.9k|      current = nullptr;
   43|  10.9k|      current_size = 0;
   44|  10.9k|      return;
   45|  10.9k|    }
   46|   961k|    unsigned size = current_->get_size ();
   47|   961k|    if (!glyph.check_range (current_, size))
  ------------------
  |  Branch (47:9): [True: 24.4k, False: 936k]
  ------------------
   48|  24.4k|    {
   49|  24.4k|      current = nullptr;
   50|  24.4k|      current_size = 0;
   51|  24.4k|      return;
   52|  24.4k|    }
   53|       |
   54|   936k|    current = current_;
   55|   936k|    current_size = size;
   56|   936k|  }
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEE7__end__Ev:
   33|  51.5k|  composite_iter_tmpl __end__ () const { return composite_iter_tmpl (); }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEEC2Ev:
   23|  51.5k|  composite_iter_tmpl () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {}
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEEneERKS3_:
   35|   972k|  { return current != o.current; }
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEE8__item__Ev:
   25|   936k|  const CompositeGlyphRecord & __item__ () const { return *current; }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_23VarCompositeGlyphRecordEE8__next__Ev:
   28|   920k|  {
   29|   920k|    if (!current->has_more ()) { current = nullptr; return; }
  ------------------
  |  Branch (29:9): [True: 0, False: 920k]
  ------------------
   30|       |
   31|   920k|    set_current (&StructAtOffset<CompositeGlyphRecord> (current, current_size));
   32|   920k|  }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEEC2Ev:
   23|  46.4k|  composite_iter_tmpl () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {}
_ZN2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEEC2E10hb_array_tIKcEPKS2_:
   19|  46.4k|  {
   20|  46.4k|    set_current (current_);
   21|  46.4k|  }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEE11set_currentEPKS2_:
   39|   151k|  {
   40|   151k|    if (!glyph.check_range (current_, CompositeGlyphRecord::min_size))
  ------------------
  |  Branch (40:9): [True: 3.67k, False: 148k]
  ------------------
   41|  3.67k|    {
   42|  3.67k|      current = nullptr;
   43|  3.67k|      current_size = 0;
   44|  3.67k|      return;
   45|  3.67k|    }
   46|   148k|    unsigned size = current_->get_size ();
   47|   148k|    if (!glyph.check_range (current_, size))
  ------------------
  |  Branch (47:9): [True: 1.89k, False: 146k]
  ------------------
   48|  1.89k|    {
   49|  1.89k|      current = nullptr;
   50|  1.89k|      current_size = 0;
   51|  1.89k|      return;
   52|  1.89k|    }
   53|       |
   54|   146k|    current = current_;
   55|   146k|    current_size = size;
   56|   146k|  }
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEE7__end__Ev:
   33|  46.4k|  composite_iter_tmpl __end__ () const { return composite_iter_tmpl (); }
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEEneERKS3_:
   35|   178k|  { return current != o.current; }
_ZNK2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEE8__item__Ev:
   25|   146k|  const CompositeGlyphRecord & __item__ () const { return *current; }
_ZN2OT9glyf_impl19composite_iter_tmplINS0_20CompositeGlyphRecordEE8__next__Ev:
   28|   132k|  {
   29|   132k|    if (!current->has_more ()) { current = nullptr; return; }
  ------------------
  |  Branch (29:9): [True: 26.5k, False: 105k]
  ------------------
   30|       |
   31|   105k|    set_current (&StructAtOffset<CompositeGlyphRecord> (current, current_size));
   32|   105k|  }

_ZN2OT9glyf_impl14coord_setter_tC2E10hb_array_tIiE:
   15|   334k|    coords (coords) {}
_ZN2OT9glyf_impl14coord_setter_tixEj:
   18|  7.61M|  {
   19|  7.61M|    if (unlikely (idx >= HB_GLYF_VAR_COMPOSITE_MAX_AXES))
  ------------------
  |  |  259|  7.61M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 626k, False: 6.98M]
  |  |  ------------------
  ------------------
   20|   626k|      return Crap(int);
  ------------------
  |  |  188|   626k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
   21|  6.98M|    if (coords.length < idx + 1)
  ------------------
  |  Branch (21:9): [True: 370k, False: 6.61M]
  ------------------
   22|   370k|      coords.resize (idx + 1);
   23|  6.98M|    return coords[idx];
   24|  7.61M|  }
_ZN2OT9glyf_impl14coord_setter_t10get_coordsEv:
   27|   115k|  { return coords.as_array (); }

_ZNK2OT18glyf_accelerator_t10get_pointsINS0_19points_aggregator_tEEEbP9hb_font_tjT_:
  209|  5.70k|  {
  210|  5.70k|    if (gid >= num_glyphs) return false;
  ------------------
  |  Branch (210:9): [True: 0, False: 5.70k]
  ------------------
  211|       |
  212|       |    /* Making this allocfree is not that easy
  213|       |       https://github.com/harfbuzz/harfbuzz/issues/2095
  214|       |       mostly because of gvar handling in VF fonts,
  215|       |       perhaps a separate path for non-VF fonts can be considered */
  216|  5.70k|    contour_point_vector_t all_points;
  217|       |
  218|  5.70k|    bool phantom_only = !consumer.is_consuming_contour_points ();
  219|  5.70k|    if (unlikely (!glyph_for_gid (gid).get_points (font, *this, all_points, nullptr, nullptr, nullptr, true, true, phantom_only)))
  ------------------
  |  |  259|  5.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.45k, False: 4.24k]
  |  |  ------------------
  ------------------
  220|  1.45k|      return false;
  221|       |
  222|  4.24k|    if (consumer.is_consuming_contour_points ())
  ------------------
  |  Branch (222:9): [True: 847, False: 3.40k]
  ------------------
  223|    847|    {
  224|    847|      unsigned count = all_points.length;
  225|    847|      assert (count >= glyf_impl::PHANTOM_COUNT);
  226|      0|      count -= glyf_impl::PHANTOM_COUNT;
  227|  11.9k|      for (unsigned point_index = 0; point_index < count; point_index++)
  ------------------
  |  Branch (227:38): [True: 11.1k, False: 847]
  ------------------
  228|  11.1k|	consumer.consume_point (all_points[point_index]);
  229|    847|      consumer.points_end ();
  230|    847|    }
  231|       |
  232|       |    /* Where to write phantoms, nullptr if not requested */
  233|      0|    contour_point_t *phantoms = consumer.get_phantoms_sink ();
  234|  4.24k|    if (phantoms)
  ------------------
  |  Branch (234:9): [True: 3.40k, False: 847]
  ------------------
  235|  17.0k|      for (unsigned i = 0; i < glyf_impl::PHANTOM_COUNT; ++i)
  ------------------
  |  Branch (235:28): [True: 13.6k, False: 3.40k]
  ------------------
  236|  13.6k|	phantoms[i] = all_points[all_points.length - glyf_impl::PHANTOM_COUNT + i];
  237|       |
  238|  4.24k|    return true;
  239|  5.70k|  }
_ZN2OT18glyf_accelerator_t19points_aggregator_t27is_consuming_contour_pointsEv:
  302|  9.95k|    bool is_consuming_contour_points () { return extents; }
_ZNK2OT18glyf_accelerator_t13glyph_for_gidEjb:
  379|   357k|  {
  380|   357k|    if (unlikely (gid >= num_glyphs)) return glyf_impl::Glyph ();
  ------------------
  |  |  259|   357k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 86.8k, False: 270k]
  |  |  ------------------
  ------------------
  381|       |
  382|   270k|    unsigned int start_offset, end_offset;
  383|       |
  384|   270k|    if (short_offset)
  ------------------
  |  Branch (384:9): [True: 270k, False: 150]
  ------------------
  385|   270k|    {
  386|   270k|      const HBUINT16 *offsets = (const HBUINT16 *) loca_table->dataZ.arrayZ;
  387|   270k|      start_offset = 2 * offsets[gid];
  388|   270k|      end_offset   = 2 * offsets[gid + 1];
  389|   270k|    }
  390|    150|    else
  391|    150|    {
  392|    150|      const HBUINT32 *offsets = (const HBUINT32 *) loca_table->dataZ.arrayZ;
  393|    150|      start_offset = offsets[gid];
  394|    150|      end_offset   = offsets[gid + 1];
  395|    150|    }
  396|       |
  397|   270k|    if (unlikely (start_offset > end_offset || end_offset > glyf_table.get_length ()))
  ------------------
  |  |  259|   426k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 187k, False: 83.2k]
  |  |  |  Branch (259:47): [True: 114k, False: 156k]
  |  |  |  Branch (259:47): [True: 72.8k, False: 83.2k]
  |  |  ------------------
  ------------------
  398|   187k|      return glyf_impl::Glyph ();
  399|       |
  400|  83.2k|    glyf_impl::Glyph glyph (hb_bytes_t ((const char *) this->glyf_table + start_offset,
  401|  83.2k|			     end_offset - start_offset), gid);
  402|  83.2k|    return needs_padding_removal ? glyf_impl::Glyph (glyph.trim_padding (), gid) : glyph;
  ------------------
  |  Branch (402:12): [True: 0, False: 83.2k]
  ------------------
  403|   270k|  }
_ZN2OT18glyf_accelerator_t19points_aggregator_t13consume_pointERKNS_15contour_point_tE:
  299|  11.1k|    void consume_point (const contour_point_t &point) { bounds.add (point); }
_ZN2OT18glyf_accelerator_t19points_aggregator_t16contour_bounds_t3addERKNS_15contour_point_tE:
  256|  11.1k|      {
  257|  11.1k|	min_x = hb_min (min_x, p.x);
  258|  11.1k|	min_y = hb_min (min_y, p.y);
  259|  11.1k|	max_x = hb_max (max_x, p.x);
  260|  11.1k|	max_y = hb_max (max_y, p.y);
  261|  11.1k|      }
_ZN2OT18glyf_accelerator_t19points_aggregator_t10points_endEv:
  300|    847|    void points_end () { bounds.get_extents (font, extents, scaled); }
_ZN2OT18glyf_accelerator_t19points_aggregator_t16contour_bounds_t11get_extentsEP9hb_font_tP18hb_glyph_extents_tb:
  266|    847|      {
  267|    847|	if (unlikely (empty ()))
  ------------------
  |  |  259|    847|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 379, False: 468]
  |  |  ------------------
  ------------------
  268|    379|	{
  269|    379|	  extents->width = 0;
  270|    379|	  extents->x_bearing = 0;
  271|    379|	  extents->height = 0;
  272|    379|	  extents->y_bearing = 0;
  273|    379|	  return;
  274|    379|	}
  275|    468|	{
  276|    468|	  extents->x_bearing = roundf (min_x);
  ------------------
  |  |  207|    468|#define roundf(x) _hb_roundf(x)
  ------------------
  277|    468|	  extents->width = roundf (max_x - extents->x_bearing);
  ------------------
  |  |  207|    468|#define roundf(x) _hb_roundf(x)
  ------------------
  278|    468|	  extents->y_bearing = roundf (max_y);
  ------------------
  |  |  207|    468|#define roundf(x) _hb_roundf(x)
  ------------------
  279|    468|	  extents->height = roundf (min_y - extents->y_bearing);
  ------------------
  |  |  207|    468|#define roundf(x) _hb_roundf(x)
  ------------------
  280|       |
  281|    468|	  if (scaled)
  ------------------
  |  Branch (281:8): [True: 468, False: 0]
  ------------------
  282|    468|	    font->scale_glyph_extents (extents);
  283|    468|	}
  284|    468|      }
_ZNK2OT18glyf_accelerator_t19points_aggregator_t16contour_bounds_t5emptyEv:
  263|    847|      bool empty () const { return (min_x >= max_x) || (min_y >= max_y); }
  ------------------
  |  Branch (263:36): [True: 353, False: 494]
  |  Branch (263:56): [True: 26, False: 468]
  ------------------
_ZN2OT18glyf_accelerator_t19points_aggregator_t17get_phantoms_sinkEv:
  303|  4.24k|    contour_point_t *get_phantoms_sink () { return phantoms; }
_ZN2OT18glyf_accelerator_t19points_aggregator_tC2EP9hb_font_tP18hb_glyph_extents_tPNS_15contour_point_tEb:
  291|  5.70k|    {
  292|  5.70k|      font = font_;
  293|  5.70k|      extents = extents_;
  294|  5.70k|      phantoms = phantoms_;
  295|  5.70k|      scaled = scaled_;
  296|  5.70k|      if (extents) bounds = contour_bounds_t ();
  ------------------
  |  Branch (296:11): [True: 1.20k, False: 4.49k]
  ------------------
  297|  5.70k|    }
_ZN2OT18glyf_accelerator_t19points_aggregator_t16contour_bounds_tC2Ev:
  253|  6.90k|      contour_bounds_t () { min_x = min_y = FLT_MAX; max_x = max_y = -FLT_MAX; }
_ZNK2OT18glyf_accelerator_t29get_advance_with_var_unscaledEP9hb_font_tjb:
  308|  4.63k|  {
  309|  4.63k|    if (unlikely (gid >= num_glyphs)) return 0;
  ------------------
  |  |  259|  4.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 134, False: 4.49k]
  |  |  ------------------
  ------------------
  310|       |
  311|  4.49k|    bool success = false;
  312|       |
  313|  4.49k|    contour_point_t phantoms[glyf_impl::PHANTOM_COUNT];
  314|  4.49k|    if (font->num_coords)
  ------------------
  |  Branch (314:9): [True: 4.49k, False: 0]
  ------------------
  315|  4.49k|      success = get_points (font, gid, points_aggregator_t (font, nullptr, phantoms, false));
  316|       |
  317|  4.49k|    if (unlikely (!success))
  ------------------
  |  |  259|  4.49k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.09k, False: 3.40k]
  |  |  ------------------
  ------------------
  318|  1.09k|      return
  319|  1.09k|#ifndef HB_NO_VERTICAL
  320|  1.09k|	is_vertical ? vmtx->get_advance_without_var_unscaled (gid) :
  ------------------
  |  Branch (320:2): [True: 0, False: 1.09k]
  ------------------
  321|  1.09k|#endif
  322|  1.09k|	hmtx->get_advance_without_var_unscaled (gid);
  323|       |
  324|  3.40k|    float result = is_vertical
  ------------------
  |  Branch (324:20): [True: 0, False: 3.40k]
  ------------------
  325|  3.40k|		 ? phantoms[glyf_impl::PHANTOM_TOP].y - phantoms[glyf_impl::PHANTOM_BOTTOM].y
  326|  3.40k|		 : phantoms[glyf_impl::PHANTOM_RIGHT].x - phantoms[glyf_impl::PHANTOM_LEFT].x;
  327|  3.40k|    return hb_clamp (roundf (result), 0.f, (float) UINT_MAX / 2);
  ------------------
  |  |  207|  3.40k|#define roundf(x) _hb_roundf(x)
  ------------------
  328|  4.49k|  }
_ZN2OT18glyf_accelerator_tC2EP9hb_face_t:
  168|  32.7k|  {
  169|  32.7k|    short_offset = false;
  170|  32.7k|    num_glyphs = 0;
  171|  32.7k|    loca_table = nullptr;
  172|  32.7k|    glyf_table = nullptr;
  173|  32.7k|#ifndef HB_NO_VAR
  174|  32.7k|    gvar = nullptr;
  175|  32.7k|#endif
  176|  32.7k|    hmtx = nullptr;
  177|  32.7k|#ifndef HB_NO_VERTICAL
  178|  32.7k|    vmtx = nullptr;
  179|  32.7k|#endif
  180|  32.7k|    const OT::head &head = *face->table.head;
  181|  32.7k|    if (!glyf::has_valid_glyf_format (face))
  ------------------
  |  Branch (181:9): [True: 21, False: 32.7k]
  ------------------
  182|       |      /* Unknown format.  Leave num_glyphs=0, that takes care of disabling us. */
  183|     21|      return;
  184|  32.7k|    short_offset = 0 == head.indexToLocFormat;
  185|       |
  186|  32.7k|    loca_table = face->table.loca.get_blob (); // Needs no destruct!
  187|  32.7k|    glyf_table = hb_sanitize_context_t ().reference_table<glyf> (face);
  188|  32.7k|#ifndef HB_NO_VAR
  189|  32.7k|    gvar = face->table.gvar;
  190|  32.7k|#endif
  191|  32.7k|    hmtx = face->table.hmtx;
  192|  32.7k|#ifndef HB_NO_VERTICAL
  193|  32.7k|    vmtx = face->table.vmtx;
  194|  32.7k|#endif
  195|       |
  196|  32.7k|    num_glyphs = hb_max (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
  ------------------
  |  Branch (196:58): [True: 32.6k, False: 19]
  ------------------
  197|  32.7k|    num_glyphs = hb_min (num_glyphs, face->get_num_glyphs ());
  198|  32.7k|  }
_ZN2OT4glyf21has_valid_glyf_formatEPK9hb_face_t:
   35|  32.7k|  {
   36|  32.7k|    const OT::head &head = *face->table.head;
   37|  32.7k|    return head.indexToLocFormat <= 1 && head.glyphDataFormat <= 1;
  ------------------
  |  Branch (37:12): [True: 32.7k, False: 12]
  |  Branch (37:42): [True: 32.7k, False: 9]
  ------------------
   38|  32.7k|  }
_ZNK2OT4glyf8sanitizeEP21hb_sanitize_context_t:
   41|  1.85k|  {
   42|  1.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   43|       |    /* Runtime checks as eager sanitizing each glyph is costy */
   44|  1.85k|    return_trace (true);
  ------------------
  |  |  349|  1.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   45|  1.85k|  }
_ZN2OT18glyf_accelerator_tD2Ev:
  200|  32.7k|  {
  201|  32.7k|    glyf_table.destroy ();
  202|  32.7k|  }
_ZNK2OT18glyf_accelerator_t11get_extentsEP9hb_font_tjP18hb_glyph_extents_t:
  358|   778k|  {
  359|   778k|    if (unlikely (gid >= num_glyphs)) return false;
  ------------------
  |  |  259|   778k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 607k, False: 170k]
  |  |  ------------------
  ------------------
  360|       |
  361|   170k|#ifndef HB_NO_VAR
  362|   170k|    if (font->num_coords)
  ------------------
  |  Branch (362:9): [True: 1.20k, False: 169k]
  ------------------
  363|  1.20k|      return get_points (font, gid, points_aggregator_t (font, extents, nullptr, true));
  364|   169k|#endif
  365|   169k|    return glyph_for_gid (gid).get_extents_without_var_scaled (font, *this, extents);
  366|   170k|  }
_ZNK2OT18glyf_accelerator_t8get_pathEP9hb_font_tjR17hb_draw_session_t:
  407|   139k|  { return get_points (font, gid, glyf_impl::path_builder_t (font, draw_session)); }
_ZNK2OT18glyf_accelerator_t10get_pointsINS_9glyf_impl14path_builder_tEEEbP9hb_font_tjT_:
  209|   139k|  {
  210|   139k|    if (gid >= num_glyphs) return false;
  ------------------
  |  Branch (210:9): [True: 136k, False: 3.38k]
  ------------------
  211|       |
  212|       |    /* Making this allocfree is not that easy
  213|       |       https://github.com/harfbuzz/harfbuzz/issues/2095
  214|       |       mostly because of gvar handling in VF fonts,
  215|       |       perhaps a separate path for non-VF fonts can be considered */
  216|  3.38k|    contour_point_vector_t all_points;
  217|       |
  218|  3.38k|    bool phantom_only = !consumer.is_consuming_contour_points ();
  219|  3.38k|    if (unlikely (!glyph_for_gid (gid).get_points (font, *this, all_points, nullptr, nullptr, nullptr, true, true, phantom_only)))
  ------------------
  |  |  259|  3.38k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.33k, False: 2.05k]
  |  |  ------------------
  ------------------
  220|  1.33k|      return false;
  221|       |
  222|  2.05k|    if (consumer.is_consuming_contour_points ())
  ------------------
  |  Branch (222:9): [True: 2.05k, False: 0]
  ------------------
  223|  2.05k|    {
  224|  2.05k|      unsigned count = all_points.length;
  225|  2.05k|      assert (count >= glyf_impl::PHANTOM_COUNT);
  226|      0|      count -= glyf_impl::PHANTOM_COUNT;
  227|   235k|      for (unsigned point_index = 0; point_index < count; point_index++)
  ------------------
  |  Branch (227:38): [True: 233k, False: 2.05k]
  ------------------
  228|   233k|	consumer.consume_point (all_points[point_index]);
  229|  2.05k|      consumer.points_end ();
  230|  2.05k|    }
  231|       |
  232|       |    /* Where to write phantoms, nullptr if not requested */
  233|      0|    contour_point_t *phantoms = consumer.get_phantoms_sink ();
  234|  2.05k|    if (phantoms)
  ------------------
  |  Branch (234:9): [True: 0, False: 2.05k]
  ------------------
  235|      0|      for (unsigned i = 0; i < glyf_impl::PHANTOM_COUNT; ++i)
  ------------------
  |  Branch (235:28): [True: 0, False: 0]
  ------------------
  236|      0|	phantoms[i] = all_points[all_points.length - glyf_impl::PHANTOM_COUNT + i];
  237|       |
  238|  2.05k|    return true;
  239|  3.38k|  }

_ZNK2OT4loca8sanitizeEP21hb_sanitize_context_t:
   25|  2.03k|  {
   26|  2.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   27|  2.03k|    return_trace (true);
  ------------------
  |  |  349|  2.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   28|  2.03k|  }

_ZN2OT9glyf_impl14path_builder_t16optional_point_tC2Ev:
   19|   760k|    optional_point_t () {}
_ZN2OT9glyf_impl14path_builder_t16optional_point_tC2Eff:
   20|   322k|    optional_point_t (float x_, float y_) : has_data (true), x (x_), y (y_) {}
_ZNK2OT9glyf_impl14path_builder_t16optional_point_tcvbEv:
   21|   635k|    operator bool () const { return has_data; }
_ZN2OT9glyf_impl14path_builder_t16optional_point_t4lerpES2_f:
   28|  88.3k|    { return optional_point_t (x + t * (p.x - x), y + t * (p.y - y)); }
_ZN2OT9glyf_impl14path_builder_tC2EP9hb_font_tR17hb_draw_session_t:
   32|   139k|    font (font_), draw_session (&draw_session_) {}
_ZN2OT9glyf_impl14path_builder_t13consume_pointERKNS_15contour_point_tE:
   41|   233k|  {
   42|   233k|    bool is_on_curve = point.flag & glyf_impl::SimpleGlyph::FLAG_ON_CURVE;
   43|       |#ifdef HB_NO_CUBIC_GLYF
   44|       |    bool is_cubic = false;
   45|       |#else
   46|   233k|    bool is_cubic = !is_on_curve && (point.flag & glyf_impl::SimpleGlyph::FLAG_CUBIC);
  ------------------
  |  Branch (46:21): [True: 135k, False: 97.7k]
  |  Branch (46:37): [True: 74.4k, False: 61.4k]
  ------------------
   47|   233k|#endif
   48|   233k|    optional_point_t p (font->em_fscalef_x (point.x), font->em_fscalef_y (point.y));
   49|   233k|    if (!first_oncurve)
  ------------------
  |  Branch (49:9): [True: 22.8k, False: 210k]
  ------------------
   50|  22.8k|    {
   51|  22.8k|      if (is_on_curve)
  ------------------
  |  Branch (51:11): [True: 9.40k, False: 13.4k]
  ------------------
   52|  9.40k|      {
   53|  9.40k|	first_oncurve = p;
   54|  9.40k|	draw_session->move_to (p.x, p.y);
   55|  9.40k|      }
   56|  13.4k|      else
   57|  13.4k|      {
   58|  13.4k|	if (is_cubic && !first_offcurve2)
  ------------------
  |  Branch (58:6): [True: 7.68k, False: 5.80k]
  |  Branch (58:18): [True: 3.29k, False: 4.39k]
  ------------------
   59|  3.29k|	{
   60|  3.29k|	  first_offcurve2 = first_offcurve;
   61|  3.29k|	  first_offcurve = p;
   62|  3.29k|	}
   63|  10.1k|	else if (first_offcurve)
  ------------------
  |  Branch (63:11): [True: 3.63k, False: 6.56k]
  ------------------
   64|  3.63k|	{
   65|  3.63k|	  optional_point_t mid = first_offcurve.lerp (p, .5f);
   66|  3.63k|	  first_oncurve = mid;
   67|  3.63k|	  last_offcurve = p;
   68|  3.63k|	  draw_session->move_to (mid.x, mid.y);
   69|  3.63k|	}
   70|  6.56k|	else
   71|  6.56k|	  first_offcurve = p;
   72|  13.4k|      }
   73|  22.8k|    }
   74|   210k|    else
   75|   210k|    {
   76|   210k|      if (last_offcurve)
  ------------------
  |  Branch (76:11): [True: 122k, False: 88.5k]
  ------------------
   77|   122k|      {
   78|   122k|	if (is_on_curve)
  ------------------
  |  Branch (78:6): [True: 6.82k, False: 115k]
  ------------------
   79|  6.82k|	{
   80|  6.82k|	  if (last_offcurve2)
  ------------------
  |  Branch (80:8): [True: 567, False: 6.25k]
  ------------------
   81|    567|	  {
   82|    567|	    draw_session->cubic_to (last_offcurve2.x, last_offcurve2.y,
   83|    567|				    last_offcurve.x, last_offcurve.y,
   84|    567|				    p.x, p.y);
   85|    567|	    last_offcurve2 = optional_point_t ();
   86|    567|	  }
   87|  6.25k|	  else
   88|  6.25k|	    draw_session->quadratic_to (last_offcurve.x, last_offcurve.y,
   89|  6.25k|				       p.x, p.y);
   90|  6.82k|	  last_offcurve = optional_point_t ();
   91|  6.82k|	}
   92|   115k|	else
   93|   115k|	{
   94|   115k|	  if (is_cubic && !last_offcurve2)
  ------------------
  |  Branch (94:8): [True: 65.6k, False: 49.8k]
  |  Branch (94:20): [True: 33.7k, False: 31.8k]
  ------------------
   95|  33.7k|	  {
   96|  33.7k|	    last_offcurve2 = last_offcurve;
   97|  33.7k|	    last_offcurve = p;
   98|  33.7k|	  }
   99|  81.6k|	  else
  100|  81.6k|	  {
  101|  81.6k|	    optional_point_t mid = last_offcurve.lerp (p, .5f);
  102|       |
  103|  81.6k|	    if (is_cubic)
  ------------------
  |  Branch (103:10): [True: 31.8k, False: 49.8k]
  ------------------
  104|  31.8k|	    {
  105|  31.8k|	      draw_session->cubic_to (last_offcurve2.x, last_offcurve2.y,
  106|  31.8k|				      last_offcurve.x, last_offcurve.y,
  107|  31.8k|				      mid.x, mid.y);
  108|  31.8k|	      last_offcurve2 = optional_point_t ();
  109|  31.8k|	    }
  110|  49.8k|	    else
  111|  49.8k|	      draw_session->quadratic_to (last_offcurve.x, last_offcurve.y,
  112|  49.8k|					 mid.x, mid.y);
  113|  81.6k|	    last_offcurve = p;
  114|  81.6k|	  }
  115|   115k|	}
  116|   122k|      }
  117|  88.5k|      else
  118|  88.5k|      {
  119|  88.5k|	if (is_on_curve)
  ------------------
  |  Branch (119:6): [True: 81.5k, False: 6.97k]
  ------------------
  120|  81.5k|	  draw_session->line_to (p.x, p.y);
  121|  6.97k|	else
  122|  6.97k|	  last_offcurve = p;
  123|  88.5k|      }
  124|   210k|    }
  125|       |
  126|   233k|    if (point.is_end_point)
  ------------------
  |  Branch (126:9): [True: 18.4k, False: 215k]
  ------------------
  127|  18.4k|    {
  128|  18.4k|      if (first_offcurve && last_offcurve)
  ------------------
  |  Branch (128:11): [True: 9.42k, False: 9.03k]
  |  Branch (128:29): [True: 3.08k, False: 6.34k]
  ------------------
  129|  3.08k|      {
  130|  3.08k|	optional_point_t mid = last_offcurve.lerp (first_offcurve2 ?
  ------------------
  |  Branch (130:45): [True: 1.43k, False: 1.64k]
  ------------------
  131|  1.43k|						   first_offcurve2 :
  132|  3.08k|						   first_offcurve, .5f);
  133|  3.08k|	if (last_offcurve2)
  ------------------
  |  Branch (133:6): [True: 1.16k, False: 1.91k]
  ------------------
  134|  1.16k|	  draw_session->cubic_to (last_offcurve2.x, last_offcurve2.y,
  135|  1.16k|				  last_offcurve.x, last_offcurve.y,
  136|  1.16k|				  mid.x, mid.y);
  137|  1.91k|	else
  138|  1.91k|	  draw_session->quadratic_to (last_offcurve.x, last_offcurve.y,
  139|  1.91k|				     mid.x, mid.y);
  140|  3.08k|	last_offcurve = optional_point_t ();
  141|  3.08k|      }
  142|       |      /* now check the rest */
  143|       |
  144|  18.4k|      if (first_offcurve && first_oncurve)
  ------------------
  |  Branch (144:11): [True: 9.42k, False: 9.03k]
  |  Branch (144:29): [True: 4.00k, False: 5.42k]
  ------------------
  145|  4.00k|      {
  146|  4.00k|        if (first_offcurve2)
  ------------------
  |  Branch (146:13): [True: 1.76k, False: 2.23k]
  ------------------
  147|  1.76k|	  draw_session->cubic_to (first_offcurve2.x, first_offcurve2.y,
  148|  1.76k|				  first_offcurve.x, first_offcurve.y,
  149|  1.76k|				  first_oncurve.x, first_oncurve.y);
  150|  2.23k|	else
  151|  2.23k|	  draw_session->quadratic_to (first_offcurve.x, first_offcurve.y,
  152|  2.23k|				     first_oncurve.x, first_oncurve.y);
  153|  4.00k|      }
  154|  14.4k|      else if (last_offcurve && first_oncurve)
  ------------------
  |  Branch (154:16): [True: 702, False: 13.7k]
  |  Branch (154:33): [True: 702, False: 0]
  ------------------
  155|    702|      {
  156|    702|	if (last_offcurve2)
  ------------------
  |  Branch (156:6): [True: 215, False: 487]
  ------------------
  157|    215|	  draw_session->cubic_to (last_offcurve2.x, last_offcurve2.y,
  158|    215|				  last_offcurve.x, last_offcurve.y,
  159|    215|				  first_oncurve.x, first_oncurve.y);
  160|    487|	else
  161|    487|	  draw_session->quadratic_to (last_offcurve.x, last_offcurve.y,
  162|    487|				     first_oncurve.x, first_oncurve.y);
  163|    702|      }
  164|  13.7k|      else if (first_oncurve)
  ------------------
  |  Branch (164:16): [True: 8.33k, False: 5.42k]
  ------------------
  165|  8.33k|	draw_session->line_to (first_oncurve.x, first_oncurve.y);
  166|  5.42k|      else if (first_offcurve)
  ------------------
  |  Branch (166:16): [True: 5.42k, False: 0]
  ------------------
  167|  5.42k|      {
  168|  5.42k|	float x = first_offcurve.x, y = first_offcurve.y;
  169|  5.42k|	draw_session->move_to (x, y);
  170|  5.42k|	draw_session->quadratic_to (x, y, x, y);
  171|  5.42k|      }
  172|       |
  173|       |      /* Getting ready for the next contour */
  174|  18.4k|      first_oncurve = first_offcurve = last_offcurve = last_offcurve2 = optional_point_t ();
  175|  18.4k|      draw_session->close_path ();
  176|  18.4k|    }
  177|   233k|  }
_ZN2OT9glyf_impl14path_builder_t10points_endEv:
  178|  2.05k|  void points_end () {}
_ZN2OT9glyf_impl14path_builder_t27is_consuming_contour_pointsEv:
  180|  5.43k|  bool is_consuming_contour_points () { return true; }
_ZN2OT9glyf_impl14path_builder_t17get_phantoms_sinkEv:
  181|  2.05k|  contour_point_t *get_phantoms_sink () { return nullptr; }

_ZN2OT4name13accelerator_tD2Ev:
  515|  32.6k|    {
  516|  32.6k|      this->table.destroy ();
  517|  32.6k|    }
_ZNK2OT10NameRecord8languageEP9hb_face_t:
   98|   569k|  {
   99|   569k|#ifndef HB_NO_OT_NAME_LANGUAGE
  100|   569k|    unsigned int p = platformID;
  101|   569k|    unsigned int l = languageID;
  102|       |
  103|   569k|    if (p == 3)
  ------------------
  |  Branch (103:9): [True: 8.29k, False: 561k]
  ------------------
  104|  8.29k|      return _hb_ot_name_language_for_ms_code (l);
  105|       |
  106|   561k|    if (p == 1)
  ------------------
  |  Branch (106:9): [True: 7.02k, False: 554k]
  ------------------
  107|  7.02k|      return _hb_ot_name_language_for_mac_code (l);
  108|       |
  109|   554k|#ifndef HB_NO_OT_NAME_LANGUAGE_AAT
  110|   554k|    if (p == 0)
  ------------------
  |  Branch (110:9): [True: 507k, False: 46.8k]
  ------------------
  111|   507k|      return face->table.ltag->get_language (l);
  112|  46.8k|#endif
  113|       |
  114|  46.8k|#endif
  115|  46.8k|    return HB_LANGUAGE_INVALID;
  ------------------
  |  |  334|  46.8k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  116|   554k|  }
_ZNK2OT10NameRecord5scoreEv:
  119|   569k|  {
  120|       |    /* Same order as in cmap::find_best_subtable(). */
  121|   569k|    unsigned int p = platformID;
  122|   569k|    unsigned int e = encodingID;
  123|       |
  124|       |    /* 32-bit. */
  125|   569k|    if (p == 3 && e == 10) return 0;
  ------------------
  |  Branch (125:9): [True: 8.29k, False: 561k]
  |  Branch (125:19): [True: 42, False: 8.25k]
  ------------------
  126|   569k|    if (p == 0 && e ==  6) return 1;
  ------------------
  |  Branch (126:9): [True: 507k, False: 62.1k]
  |  Branch (126:19): [True: 211, False: 506k]
  ------------------
  127|   569k|    if (p == 0 && e ==  4) return 2;
  ------------------
  |  Branch (127:9): [True: 506k, False: 62.1k]
  |  Branch (127:19): [True: 683, False: 506k]
  ------------------
  128|       |
  129|       |    /* 16-bit. */
  130|   568k|    if (p == 3 && e ==  1) return 3;
  ------------------
  |  Branch (130:9): [True: 8.25k, False: 560k]
  |  Branch (130:19): [True: 3.71k, False: 4.53k]
  ------------------
  131|   564k|    if (p == 0 && e ==  3) return 4;
  ------------------
  |  Branch (131:9): [True: 506k, False: 58.4k]
  |  Branch (131:19): [True: 1.13k, False: 505k]
  ------------------
  132|   563k|    if (p == 0 && e ==  2) return 5;
  ------------------
  |  Branch (132:9): [True: 505k, False: 58.4k]
  |  Branch (132:19): [True: 325, False: 504k]
  ------------------
  133|   563k|    if (p == 0 && e ==  1) return 6;
  ------------------
  |  Branch (133:9): [True: 504k, False: 58.4k]
  |  Branch (133:19): [True: 589, False: 504k]
  ------------------
  134|   562k|    if (p == 0 && e ==  0) return 7;
  ------------------
  |  Branch (134:9): [True: 504k, False: 58.4k]
  |  Branch (134:19): [True: 496k, False: 7.40k]
  ------------------
  135|       |
  136|       |    /* Symbol. */
  137|  65.8k|    if (p == 3 && e ==  0) return 8;
  ------------------
  |  Branch (137:9): [True: 4.53k, False: 61.3k]
  |  Branch (137:19): [True: 1.47k, False: 3.05k]
  ------------------
  138|       |
  139|       |    /* We treat all Mac Latin names as ASCII only. */
  140|  64.3k|    if (p == 1 && e ==  0) return 10; /* 10 is magic number :| */
  ------------------
  |  Branch (140:9): [True: 7.02k, False: 57.3k]
  |  Branch (140:19): [True: 2.21k, False: 4.81k]
  ------------------
  141|       |
  142|  62.1k|    return UNSUPPORTED;
  ------------------
  |  |   93|  62.1k|#define UNSUPPORTED	42
  ------------------
  143|  64.3k|  }
_ZNK2OT10NameRecord8sanitizeEP21hb_sanitize_context_tPKv:
  243|   581k|  {
  244|   581k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   581k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  245|   581k|    return_trace (c->check_struct (this) && offset.sanitize (c, base, length));
  ------------------
  |  |  349|  1.16M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   581k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 581k, False: 1]
  |  |  |  Branch (349:45): [True: 581k, False: 152]
  |  |  ------------------
  ------------------
  246|   581k|  }
_ZNK2OT4name16sanitize_recordsEP21hb_sanitize_context_t:
  458|    841|  {
  459|    841|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    841|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  460|    841|    const void *string_pool = (this+stringOffset).arrayZ;
  461|    841|    return_trace (nameRecordZ.sanitize (c, count, string_pool));
  ------------------
  |  |  349|    841|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    841|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  462|    841|  }
_ZNK2OT4name8sanitizeEP21hb_sanitize_context_t:
  465|  1.29k|  {
  466|  1.29k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.29k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  467|  1.29k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 788, False: 504]
  |  |  |  Branch (349:45): [True: 99, False: 405]
  |  |  |  Branch (349:45): [True: 1.29k, False: 1]
  |  |  |  Branch (349:45): [True: 887, False: 405]
  |  |  |  Branch (349:45): [True: 850, False: 37]
  |  |  |  Branch (349:45): [True: 841, False: 9]
  |  |  |  Branch (349:45): [True: 688, False: 153]
  |  |  ------------------
  ------------------
  468|  1.29k|		  likely (format == 0 || format == 1) &&
  469|  1.29k|		  c->check_array (nameRecordZ.arrayZ, count) &&
  470|  1.29k|		  c->check_range (this, stringOffset) &&
  471|  1.29k|		  sanitize_records (c));
  472|  1.29k|  }
_ZN2OT4name13accelerator_tC2EP9hb_face_t:
  477|  32.6k|    {
  478|  32.6k|      this->table = hb_sanitize_context_t ().reference_table<name> (face);
  479|  32.6k|      assert (this->table.get_length () >= this->table->stringOffset);
  480|      0|      this->pool = (const char *) (const void *) (this->table+this->table->stringOffset);
  481|  32.6k|      this->pool_len = this->table.get_length () - this->table->stringOffset;
  482|  32.6k|      const hb_array_t<const NameRecord> all_names (this->table->nameRecordZ.arrayZ,
  483|  32.6k|						    this->table->count);
  484|       |
  485|  32.6k|      this->names.alloc (all_names.length, true);
  486|       |
  487|   602k|      for (unsigned int i = 0; i < all_names.length; i++)
  ------------------
  |  Branch (487:32): [True: 569k, False: 32.6k]
  ------------------
  488|   569k|      {
  489|   569k|	hb_ot_name_entry_t *entry = this->names.push ();
  490|       |
  491|   569k|	entry->name_id = all_names[i].nameID;
  492|   569k|	entry->language = all_names[i].language (face);
  493|   569k|	entry->entry_score =  all_names[i].score ();
  ------------------
  |  |   83|   569k|#define entry_score var.u16[0]
  ------------------
  494|   569k|	entry->entry_index = i;
  ------------------
  |  |   84|   569k|#define entry_index var.u16[1]
  ------------------
  495|   569k|      }
  496|       |
  497|  32.6k|      this->names.qsort (_hb_ot_name_entry_cmp);
  498|       |      /* Walk and pick best only for each name_id,language pair,
  499|       |       * while dropping unsupported encodings. */
  500|  32.6k|      unsigned int j = 0;
  501|   598k|      for (unsigned int i = 0; i < this->names.length; i++)
  ------------------
  |  Branch (501:32): [True: 565k, False: 32.6k]
  ------------------
  502|   565k|      {
  503|   565k|	if (this->names[i].entry_score == UNSUPPORTED ||
  ------------------
  |  |   83|   565k|#define entry_score var.u16[0]
  ------------------
              	if (this->names[i].entry_score == UNSUPPORTED ||
  ------------------
  |  |   93|  1.13M|#define UNSUPPORTED	42
  ------------------
  |  Branch (503:6): [True: 61.4k, False: 504k]
  ------------------
  504|   565k|	    this->names[i].language == HB_LANGUAGE_INVALID)
  ------------------
  |  |  334|   504k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  |  Branch (504:6): [True: 473k, False: 30.9k]
  ------------------
  505|   534k|	  continue;
  506|  30.9k|	if (i &&
  ------------------
  |  Branch (506:6): [True: 30.6k, False: 288]
  ------------------
  507|  30.9k|	    this->names[i - 1].name_id  == this->names[i].name_id &&
  ------------------
  |  Branch (507:6): [True: 28.1k, False: 2.45k]
  ------------------
  508|  30.9k|	    this->names[i - 1].language == this->names[i].language)
  ------------------
  |  Branch (508:6): [True: 27.4k, False: 739]
  ------------------
  509|  27.4k|	  continue;
  510|  3.48k|	this->names[j++] = this->names[i];
  511|  3.48k|      }
  512|  32.6k|      this->names.resize (j);
  513|  32.6k|    }
_ZNK2OT4name13accelerator_t9get_indexEjPK18hb_language_impl_tPj:
  522|   100k|    {
  523|   100k|      const hb_ot_name_entry_t key = {name_id, {0}, language};
  524|   100k|      const hb_ot_name_entry_t *entry = hb_bsearch (key, (const hb_ot_name_entry_t *) this->names,
  525|   100k|						    this->names.length,
  526|   100k|						    sizeof (hb_ot_name_entry_t),
  527|   100k|						    _hb_ot_name_entry_cmp_key,
  528|   100k|						    true);
  529|       |
  530|   100k|      if (!entry)
  ------------------
  |  Branch (530:11): [True: 99.5k, False: 495]
  ------------------
  531|  99.5k|      {
  532|  99.5k|	entry = hb_bsearch (key, (const hb_ot_name_entry_t *) this->names,
  533|  99.5k|			    this->names.length,
  534|  99.5k|			    sizeof (hb_ot_name_entry_t),
  535|  99.5k|			    _hb_ot_name_entry_cmp_key,
  536|  99.5k|			    false);
  537|  99.5k|      }
  538|       |
  539|   100k|      if (!entry)
  ------------------
  |  Branch (539:11): [True: 99.5k, False: 495]
  ------------------
  540|  99.5k|	return -1;
  541|       |
  542|    495|      if (width)
  ------------------
  |  Branch (542:11): [True: 495, False: 0]
  ------------------
  543|    495|	*width = entry->entry_score < 10 ? 2 : 1;
  ------------------
  |  |   83|    495|#define entry_score var.u16[0]
  ------------------
  |  Branch (543:11): [True: 312, False: 183]
  ------------------
  544|       |
  545|    495|      return entry->entry_index;
  ------------------
  |  |   84|    495|#define entry_index var.u16[1]
  ------------------
  546|   100k|    }
_ZNK2OT4name13accelerator_t8get_nameEj:
  549|    495|    {
  550|    495|      const hb_array_t<const NameRecord> all_names (table->nameRecordZ.arrayZ, table->count);
  551|    495|      const NameRecord &record = all_names[idx];
  552|    495|      const hb_bytes_t string_pool (pool, pool_len);
  553|    495|      return string_pool.sub_array (record.offset, record.length);
  554|    495|    }
_ZN2OT18name_accelerator_tC2EP9hb_face_t:
  580|  32.6k|  name_accelerator_t (hb_face_t *face) : name::accelerator_t (face) {}
hb-ot-name.cc:_ZN2OTL21_hb_ot_name_entry_cmpEPKvS1_:
  290|   339M|{
  291|       |  /* Compare by name_id, then language, then score, then index. */
  292|       |
  293|   339M|  int v = _hb_ot_name_entry_cmp_key (pa, pb, true);
  294|   339M|  if (v)
  ------------------
  |  Branch (294:7): [True: 512k, False: 338M]
  ------------------
  295|   512k|    return v;
  296|       |
  297|   338M|  const hb_ot_name_entry_t *a = (const hb_ot_name_entry_t *) pa;
  298|   338M|  const hb_ot_name_entry_t *b = (const hb_ot_name_entry_t *) pb;
  299|       |
  300|   338M|  if (a->entry_score != b->entry_score)
  ------------------
  |  |   83|   338M|#define entry_score var.u16[0]
  ------------------
                if (a->entry_score != b->entry_score)
  ------------------
  |  |   83|   338M|#define entry_score var.u16[0]
  ------------------
  |  Branch (300:7): [True: 253k, False: 338M]
  ------------------
  301|   253k|    return a->entry_score - b->entry_score;
  ------------------
  |  |   83|   253k|#define entry_score var.u16[0]
  ------------------
                  return a->entry_score - b->entry_score;
  ------------------
  |  |   83|   253k|#define entry_score var.u16[0]
  ------------------
  302|       |
  303|   338M|  if (a->entry_index != b->entry_index)
  ------------------
  |  |   84|   338M|#define entry_index var.u16[1]
  ------------------
                if (a->entry_index != b->entry_index)
  ------------------
  |  |   84|   338M|#define entry_index var.u16[1]
  ------------------
  |  Branch (303:7): [True: 338M, False: 0]
  ------------------
  304|   338M|    return a->entry_index - b->entry_index;
  ------------------
  |  |   84|   338M|#define entry_index var.u16[1]
  ------------------
                  return a->entry_index - b->entry_index;
  ------------------
  |  |   84|   338M|#define entry_index var.u16[1]
  ------------------
  305|       |
  306|      0|  return 0;
  307|   338M|}
hb-ot-name.cc:_ZN2OTL25_hb_ot_name_entry_cmp_keyEPKvS1_b:
  261|   339M|{
  262|   339M|  const hb_ot_name_entry_t *a = (const hb_ot_name_entry_t *) pa;
  263|   339M|  const hb_ot_name_entry_t *b = (const hb_ot_name_entry_t *) pb;
  264|       |
  265|       |  /* Compare by name_id, then language. */
  266|       |
  267|   339M|  if (a->name_id != b->name_id)
  ------------------
  |  Branch (267:7): [True: 460k, False: 338M]
  ------------------
  268|   460k|    return a->name_id - b->name_id;
  269|       |
  270|   338M|  if (a->language == b->language) return 0;
  ------------------
  |  Branch (270:7): [True: 338M, False: 57.6k]
  ------------------
  271|  57.6k|  if (!a->language) return -1;
  ------------------
  |  Branch (271:7): [True: 24.4k, False: 33.1k]
  ------------------
  272|  33.1k|  if (!b->language) return +1;
  ------------------
  |  Branch (272:7): [True: 19.5k, False: 13.6k]
  ------------------
  273|       |
  274|  13.6k|  const char *astr = hb_language_to_string (a->language);
  275|  13.6k|  const char *bstr = hb_language_to_string (b->language);
  276|       |
  277|  13.6k|  signed c = strcmp (astr, bstr);
  278|       |
  279|       |  // 'a' is the user request, and 'b' is string in the font.
  280|       |  // If eg. user asks for "en-us" and font has "en", approve.
  281|  13.6k|  if (!exact && c &&
  ------------------
  |  Branch (281:7): [True: 225, False: 13.4k]
  |  Branch (281:17): [True: 225, False: 0]
  ------------------
  282|  13.6k|      hb_language_matches (b->language, a->language))
  ------------------
  |  Branch (282:7): [True: 0, False: 225]
  ------------------
  283|      0|    return 0;
  284|       |
  285|  13.6k|  return c;
  286|  13.6k|}
_ZN2OT22hb_ot_name_convert_utfI13hb_utf16_xe_tINS_7IntTypeItLj2EEEE9hb_utf8_tEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|    104|{
   44|    104|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|    104|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|    104|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|    104|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|    104|  hb_codepoint_t unicode;
   51|    104|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|    104|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|    104|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 104, False: 0]
  |  Branch (53:20): [True: 104, False: 0]
  ------------------
   54|    104|  {
   55|    104|    (*text_size)--; /* Save room for NUL-termination. */
   56|    104|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|    348|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 343, False: 5]
  |  Branch (58:29): [True: 286, False: 57]
  ------------------
   59|    286|    {
   60|    286|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|    286|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|    286|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 42, False: 244]
  ------------------
   63|     42|	break; /* Out-of-room. */
   64|       |
   65|    244|      dst = dst_next;
   66|    244|      src = src_next;
   67|    244|    }
   68|       |
   69|    104|    *text_size = dst - text;
   70|    104|    *dst = 0; /* NUL-terminate. */
   71|    104|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|    104|  unsigned int dst_len = dst - text;
   75|  53.5k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 53.4k, False: 104]
  ------------------
   76|  53.4k|  {
   77|  53.4k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  53.4k|    dst_len += out_utf_t::encode_len (unicode);
   79|  53.4k|  }
   80|    104|  return dst_len;
   81|    104|}
_ZN2OT22hb_ot_name_convert_utfI10hb_ascii_t9hb_utf8_tEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|     61|{
   44|     61|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|     61|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|     61|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|     61|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|     61|  hb_codepoint_t unicode;
   51|     61|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|     61|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|     61|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 61, False: 0]
  |  Branch (53:20): [True: 61, False: 0]
  ------------------
   54|     61|  {
   55|     61|    (*text_size)--; /* Save room for NUL-termination. */
   56|     61|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|    154|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 119, False: 35]
  |  Branch (58:29): [True: 98, False: 21]
  ------------------
   59|     98|    {
   60|     98|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|     98|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|     98|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 5, False: 93]
  ------------------
   63|      5|	break; /* Out-of-room. */
   64|       |
   65|     93|      dst = dst_next;
   66|     93|      src = src_next;
   67|     93|    }
   68|       |
   69|     61|    *text_size = dst - text;
   70|     61|    *dst = 0; /* NUL-terminate. */
   71|     61|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|     61|  unsigned int dst_len = dst - text;
   75|  5.30k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 5.23k, False: 61]
  ------------------
   76|  5.23k|  {
   77|  5.23k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  5.23k|    dst_len += out_utf_t::encode_len (unicode);
   79|  5.23k|  }
   80|     61|  return dst_len;
   81|     61|}
_ZN2OT22hb_ot_name_convert_utfI13hb_utf16_xe_tINS_7IntTypeItLj2EEEES1_ItEEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|    104|{
   44|    104|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|    104|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|    104|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|    104|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|    104|  hb_codepoint_t unicode;
   51|    104|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|    104|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|    104|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 0, False: 104]
  |  Branch (53:20): [True: 0, False: 0]
  ------------------
   54|      0|  {
   55|      0|    (*text_size)--; /* Save room for NUL-termination. */
   56|      0|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|      0|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 0, False: 0]
  |  Branch (58:29): [True: 0, False: 0]
  ------------------
   59|      0|    {
   60|      0|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|      0|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|      0|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 0, False: 0]
  ------------------
   63|      0|	break; /* Out-of-room. */
   64|       |
   65|      0|      dst = dst_next;
   66|      0|      src = src_next;
   67|      0|    }
   68|       |
   69|      0|    *text_size = dst - text;
   70|      0|    *dst = 0; /* NUL-terminate. */
   71|      0|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|    104|  unsigned int dst_len = dst - text;
   75|  53.7k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 53.6k, False: 104]
  ------------------
   76|  53.6k|  {
   77|  53.6k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  53.6k|    dst_len += out_utf_t::encode_len (unicode);
   79|  53.6k|  }
   80|    104|  return dst_len;
   81|    104|}
_ZN2OT22hb_ot_name_convert_utfI10hb_ascii_t13hb_utf16_xe_tItEEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|     61|{
   44|     61|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|     61|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|     61|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|     61|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|     61|  hb_codepoint_t unicode;
   51|     61|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|     61|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|     61|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 0, False: 61]
  |  Branch (53:20): [True: 0, False: 0]
  ------------------
   54|      0|  {
   55|      0|    (*text_size)--; /* Save room for NUL-termination. */
   56|      0|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|      0|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 0, False: 0]
  |  Branch (58:29): [True: 0, False: 0]
  ------------------
   59|      0|    {
   60|      0|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|      0|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|      0|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 0, False: 0]
  ------------------
   63|      0|	break; /* Out-of-room. */
   64|       |
   65|      0|      dst = dst_next;
   66|      0|      src = src_next;
   67|      0|    }
   68|       |
   69|      0|    *text_size = dst - text;
   70|      0|    *dst = 0; /* NUL-terminate. */
   71|      0|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|     61|  unsigned int dst_len = dst - text;
   75|  5.39k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 5.33k, False: 61]
  ------------------
   76|  5.33k|  {
   77|  5.33k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  5.33k|    dst_len += out_utf_t::encode_len (unicode);
   79|  5.33k|  }
   80|     61|  return dst_len;
   81|     61|}
_ZN2OT22hb_ot_name_convert_utfI13hb_utf16_xe_tINS_7IntTypeItLj2EEEE13hb_utf32_xe_tIjLb1EEEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|    104|{
   44|    104|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|    104|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|    104|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|    104|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|    104|  hb_codepoint_t unicode;
   51|    104|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|    104|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|    104|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 0, False: 104]
  |  Branch (53:20): [True: 0, False: 0]
  ------------------
   54|      0|  {
   55|      0|    (*text_size)--; /* Save room for NUL-termination. */
   56|      0|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|      0|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 0, False: 0]
  |  Branch (58:29): [True: 0, False: 0]
  ------------------
   59|      0|    {
   60|      0|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|      0|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|      0|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 0, False: 0]
  ------------------
   63|      0|	break; /* Out-of-room. */
   64|       |
   65|      0|      dst = dst_next;
   66|      0|      src = src_next;
   67|      0|    }
   68|       |
   69|      0|    *text_size = dst - text;
   70|      0|    *dst = 0; /* NUL-terminate. */
   71|      0|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|    104|  unsigned int dst_len = dst - text;
   75|  53.7k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 53.6k, False: 104]
  ------------------
   76|  53.6k|  {
   77|  53.6k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  53.6k|    dst_len += out_utf_t::encode_len (unicode);
   79|  53.6k|  }
   80|    104|  return dst_len;
   81|    104|}
_ZN2OT22hb_ot_name_convert_utfI10hb_ascii_t13hb_utf32_xe_tIjLb1EEEEj10hb_array_tIKcEPjPNT0_11codepoint_tE:
   43|     61|{
   44|     61|  unsigned int src_len = bytes.length / sizeof (typename in_utf_t::codepoint_t);
   45|     61|  const typename in_utf_t::codepoint_t *src = (const typename in_utf_t::codepoint_t *) bytes.arrayZ;
   46|     61|  const typename in_utf_t::codepoint_t *src_end = src + src_len;
   47|       |
   48|     61|  typename out_utf_t::codepoint_t *dst = text;
   49|       |
   50|     61|  hb_codepoint_t unicode;
   51|     61|  const hb_codepoint_t replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|     61|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
   52|       |
   53|     61|  if (text_size && *text_size)
  ------------------
  |  Branch (53:7): [True: 0, False: 61]
  |  Branch (53:20): [True: 0, False: 0]
  ------------------
   54|      0|  {
   55|      0|    (*text_size)--; /* Save room for NUL-termination. */
   56|      0|    const typename out_utf_t::codepoint_t *dst_end = text + *text_size;
   57|       |
   58|      0|    while (src < src_end && dst < dst_end)
  ------------------
  |  Branch (58:12): [True: 0, False: 0]
  |  Branch (58:29): [True: 0, False: 0]
  ------------------
   59|      0|    {
   60|      0|      const typename in_utf_t::codepoint_t *src_next = in_utf_t::next (src, src_end, &unicode, replacement);
   61|      0|      typename out_utf_t::codepoint_t *dst_next = out_utf_t::encode (dst, dst_end, unicode);
   62|      0|      if (dst_next == dst)
  ------------------
  |  Branch (62:11): [True: 0, False: 0]
  ------------------
   63|      0|	break; /* Out-of-room. */
   64|       |
   65|      0|      dst = dst_next;
   66|      0|      src = src_next;
   67|      0|    }
   68|       |
   69|      0|    *text_size = dst - text;
   70|      0|    *dst = 0; /* NUL-terminate. */
   71|      0|  }
   72|       |
   73|       |  /* Accumulate length of rest. */
   74|     61|  unsigned int dst_len = dst - text;
   75|  5.39k|  while (src < src_end)
  ------------------
  |  Branch (75:10): [True: 5.33k, False: 61]
  ------------------
   76|  5.33k|  {
   77|  5.33k|    src = in_utf_t::next (src, src_end, &unicode, replacement);
   78|  5.33k|    dst_len += out_utf_t::encode_len (unicode);
   79|  5.33k|  }
   80|     61|  return dst_len;
   81|     61|}

hb_malloc_impl:
   44|   112k|{
   45|   112k|  return (fastrand () % 16) ? malloc (size) : NULL;
  ------------------
  |  Branch (45:10): [True: 109k, False: 2.30k]
  ------------------
   46|   112k|}
hb_calloc_impl:
   49|  1.41M|{
   50|  1.41M|  return (fastrand () % 16) ? calloc (nmemb, size) : NULL;
  ------------------
  |  Branch (50:10): [True: 1.39M, False: 17.8k]
  ------------------
   51|  1.41M|}
hb_realloc_impl:
   54|  1.77M|{
   55|  1.77M|  return (fastrand () % 16) ? realloc (ptr, size) : NULL;
  ------------------
  |  Branch (55:10): [True: 1.75M, False: 17.7k]
  ------------------
   56|  1.77M|}
hb_free_impl:
   59|  4.91M|{
   60|  4.91M|  return free (ptr);
   61|  4.91M|}
failing-alloc.c:fastrand:
   36|  3.29M|{
   37|  3.29M|  if (!alloc_state) return 1;
  ------------------
  |  Branch (37:7): [True: 2.68M, False: 610k]
  ------------------
   38|       |  /* Based on https://software.intel.com/content/www/us/en/develop/articles/fast-random-number-generator-on-the-intel-pentiumr-4-processor.html */
   39|   610k|  alloc_state = (214013 * alloc_state + 2531011);
   40|   610k|  return (alloc_state >> 16) & 0x7FFF;
   41|  3.29M|}

_ZNK3AAT4ankr8sanitizeEP21hb_sanitize_context_t:
   75|    652|  {
   76|    652|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    652|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   77|    652|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  3.86k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    652|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 647, False: 5]
  |  |  |  Branch (349:45): [True: 639, False: 8]
  |  |  |  Branch (349:45): [True: 622, False: 17]
  |  |  |  Branch (349:45): [True: 439, False: 183]
  |  |  ------------------
  ------------------
   78|    652|			  version == 0 &&
   79|    652|			  c->check_range (this, anchorData) &&
   80|    652|			  lookupTable.sanitize (c, this, &(this+anchorData))));
   81|    652|  }
_ZNK3AAT4ankr10get_anchorEjjj:
   66|  1.17M|  {
   67|  1.17M|    const NNOffset16To<GlyphAnchors> *offset = (this+lookupTable).get_value (glyph_id, num_glyphs);
   68|  1.17M|    if (!offset)
  ------------------
  |  Branch (68:9): [True: 664k, False: 511k]
  ------------------
   69|   664k|      return Null (Anchor);
  ------------------
  |  |  124|   664k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
   70|   511k|    const GlyphAnchors &anchors = &(this+anchorData) + *offset;
   71|   511k|    return anchors[i];
   72|  1.17M|  }

_ZNK3AAT10StateTableINS_13ExtendedTypesEvE8sanitizeEP21hb_sanitize_context_tPj:
  558|    224|  {
  559|    224|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    224|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    224|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|    892|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 218]
  |  |  |  Branch (259:47): [True: 223, False: 1]
  |  |  |  Branch (259:47): [True: 221, False: 2]
  |  |  |  Branch (259:47): [True: 218, False: 3]
  |  |  ------------------
  ------------------
  561|    224|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    224|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    218|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    218|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    218|    unsigned int num_classes = nClasses;
  568|    218|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    218|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 210]
  |  |  ------------------
  ------------------
  569|      8|      return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    210|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    210|    int min_state = 0;
  587|    210|    int max_state = 0;
  588|    210|    unsigned int num_entries = 0;
  589|       |
  590|    210|    int state_pos = 0;
  591|    210|    int state_neg = 0;
  592|    210|    unsigned int entry = 0;
  593|    529|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 529]
  |  Branch (593:37): [True: 345, False: 184]
  ------------------
  594|    345|    {
  595|    345|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 345]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    345|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 345, False: 0]
  ------------------
  617|    345|      {
  618|       |	/* Positive states. */
  619|    345|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    345|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 333]
  |  |  ------------------
  ------------------
  620|    345|				       max_state + 1,
  621|    345|				       row_stride)))
  622|     12|	  return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    333|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 333]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    333|	{ /* Sweep new states. */
  626|    333|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    333|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 333]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    333|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    333|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    333|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 333]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  1.05M|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 1.04M, False: 333]
  ------------------
  632|  1.04M|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    333|	  state_pos = max_state + 1;
  634|    333|	}
  635|    333|      }
  636|       |
  637|    333|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    333|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 319]
  |  |  ------------------
  ------------------
  638|     14|	return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    319|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 319]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    319|      { /* Sweep new entries. */
  642|    319|	const Entry<Extra> *stop = &entries[num_entries];
  643|  74.7k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 74.3k, False: 319]
  ------------------
  644|  74.3k|	{
  645|  74.3k|	  int newState = new_state (p->newState);
  646|  74.3k|	  min_state = hb_min (min_state, newState);
  647|  74.3k|	  max_state = hb_max (max_state, newState);
  648|  74.3k|	}
  649|    319|	entry = num_entries;
  650|    319|      }
  651|    319|    }
  652|       |
  653|    184|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 184]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    184|    return_trace (true);
  ------------------
  |  |  349|    184|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    184|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    210|  }
_ZNK3AAT6LookupIN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  415|  2.62k|  {
  416|  2.62k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.62k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  417|  2.62k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|     28|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (417:9): [True: 28, False: 2.60k]
  ------------------
  418|  2.60k|    switch (u.format) {
  419|  1.32k|    case 0: return_trace (u.format0.sanitize (c));
  ------------------
  |  |  349|  1.32k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.32k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (419:5): [True: 1.32k, False: 1.27k]
  ------------------
  420|    171|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|    171|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    171|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (420:5): [True: 171, False: 2.42k]
  ------------------
  421|    133|    case 4: return_trace (u.format4.sanitize (c));
  ------------------
  |  |  349|    133|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    133|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (421:5): [True: 133, False: 2.46k]
  ------------------
  422|    259|    case 6: return_trace (u.format6.sanitize (c));
  ------------------
  |  |  349|    259|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    259|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (422:5): [True: 259, False: 2.34k]
  ------------------
  423|    194|    case 8: return_trace (u.format8.sanitize (c));
  ------------------
  |  |  349|    194|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    194|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (423:5): [True: 194, False: 2.40k]
  ------------------
  424|     77|    case 10: return_trace (u.format10.sanitize (c));
  ------------------
  |  |  349|     77|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     77|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (424:5): [True: 77, False: 2.52k]
  ------------------
  425|    442|    default:return_trace (true);
  ------------------
  |  |  349|    442|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    442|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (425:5): [True: 442, False: 2.15k]
  ------------------
  426|  2.60k|    }
  427|  2.60k|  }
_ZNK3AAT13LookupFormat0IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
   99|  1.32k|  {
  100|  1.32k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.32k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  101|  1.32k|    return_trace (arrayZ.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|  1.32k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.32k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  102|  1.32k|  }
_ZNK3AAT13LookupFormat2IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  157|    171|  {
  158|    171|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    171|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  159|    171|    return_trace (segments.sanitize (c));
  ------------------
  |  |  349|    171|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    171|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  160|    171|  }
_ZNK3AAT13LookupFormat4IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  228|    133|  {
  229|    133|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    133|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  230|    133|    return_trace (segments.sanitize (c, this));
  ------------------
  |  |  349|    133|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    133|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  231|    133|  }
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  191|    459|  {
  192|    459|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    459|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  193|    459|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    459|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 459, False: 0]
  |  |  |  Branch (349:45): [True: 451, False: 8]
  |  |  |  Branch (349:45): [True: 439, False: 12]
  |  |  ------------------
  ------------------
  194|    459|		  first <= last &&
  195|    459|		  valuesZ.sanitize (c, base, last - first + 1));
  196|    459|  }
_ZNK3AAT13LookupFormat6IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  285|    259|  {
  286|    259|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    259|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  287|    259|    return_trace (entries.sanitize (c));
  ------------------
  |  |  349|    259|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    259|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  288|    259|  }
_ZNK3AAT13LookupFormat8IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  316|    194|  {
  317|    194|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    194|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  318|    194|    return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount));
  ------------------
  |  |  349|    387|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    194|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 193, False: 1]
  |  |  |  Branch (349:45): [True: 190, False: 3]
  |  |  ------------------
  ------------------
  319|    194|  }
_ZNK3AAT14LookupFormat10IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  360|     77|  {
  361|     77|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     77|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  362|     77|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    305|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     77|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 76, False: 1]
  |  |  |  Branch (349:45): [True: 75, False: 1]
  |  |  |  Branch (349:45): [True: 74, False: 1]
  |  |  ------------------
  ------------------
  363|     77|		  valueSize <= 4 &&
  364|     77|		  valueArrayZ.sanitize (c, glyphCount * valueSize));
  365|     77|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesEvE9new_stateEj:
  531|  5.52M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    391|  {
  559|    391|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    391|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    391|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  1.56k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 388]
  |  |  |  Branch (259:47): [True: 390, False: 1]
  |  |  |  Branch (259:47): [True: 389, False: 1]
  |  |  |  Branch (259:47): [True: 388, False: 1]
  |  |  ------------------
  ------------------
  561|    391|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    391|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    388|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    388|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    388|    unsigned int num_classes = nClasses;
  568|    388|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    388|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 385]
  |  |  ------------------
  ------------------
  569|      3|      return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    385|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    385|    int min_state = 0;
  587|    385|    int max_state = 0;
  588|    385|    unsigned int num_entries = 0;
  589|       |
  590|    385|    int state_pos = 0;
  591|    385|    int state_neg = 0;
  592|    385|    unsigned int entry = 0;
  593|  1.04k|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 1.04k]
  |  Branch (593:37): [True: 694, False: 353]
  ------------------
  594|    694|    {
  595|    694|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 694]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    694|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 694, False: 0]
  ------------------
  617|    694|      {
  618|       |	/* Positive states. */
  619|    694|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    694|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 672]
  |  |  ------------------
  ------------------
  620|    694|				       max_state + 1,
  621|    694|				       row_stride)))
  622|     22|	  return_trace (false);
  ------------------
  |  |  349|     22|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    672|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 672]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    672|	{ /* Sweep new states. */
  626|    672|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    672|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 672]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    672|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    672|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    672|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 672]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  15.0M|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 15.0M, False: 672]
  ------------------
  632|  15.0M|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    672|	  state_pos = max_state + 1;
  634|    672|	}
  635|    672|      }
  636|       |
  637|    672|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    672|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 662]
  |  |  ------------------
  ------------------
  638|     10|	return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    662|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 662]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    662|      { /* Sweep new entries. */
  642|    662|	const Entry<Extra> *stop = &entries[num_entries];
  643|  3.67M|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 3.67M, False: 662]
  ------------------
  644|  3.67M|	{
  645|  3.67M|	  int newState = new_state (p->newState);
  646|  3.67M|	  min_state = hb_min (min_state, newState);
  647|  3.67M|	  max_state = hb_max (max_state, newState);
  648|  3.67M|	}
  649|    662|	entry = num_entries;
  650|    662|      }
  651|    662|    }
  652|       |
  653|    353|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 353, False: 0]
  ------------------
  654|    353|      *num_entries_out = num_entries;
  655|       |
  656|    353|    return_trace (true);
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    385|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE9new_stateEj:
  531|  11.2M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE11get_entriesEv:
  540|    353|  { return (this+entryTable).arrayZ; }
_ZNK3AAT6LookupIN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  415|  12.6k|  {
  416|  12.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  417|  12.6k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|     38|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     38|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (417:9): [True: 38, False: 12.5k]
  ------------------
  418|  12.5k|    switch (u.format) {
  419|  4.52k|    case 0: return_trace (u.format0.sanitize (c));
  ------------------
  |  |  349|  4.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.52k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (419:5): [True: 4.52k, False: 8.04k]
  ------------------
  420|    441|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|    441|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    441|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (420:5): [True: 441, False: 12.1k]
  ------------------
  421|    230|    case 4: return_trace (u.format4.sanitize (c));
  ------------------
  |  |  349|    230|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    230|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (421:5): [True: 230, False: 12.3k]
  ------------------
  422|    888|    case 6: return_trace (u.format6.sanitize (c));
  ------------------
  |  |  349|    888|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    888|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (422:5): [True: 888, False: 11.6k]
  ------------------
  423|    354|    case 8: return_trace (u.format8.sanitize (c));
  ------------------
  |  |  349|    354|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    354|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (423:5): [True: 354, False: 12.2k]
  ------------------
  424|    181|    case 10: return_trace (u.format10.sanitize (c));
  ------------------
  |  |  349|    181|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    181|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (424:5): [True: 181, False: 12.3k]
  ------------------
  425|  5.94k|    default:return_trace (true);
  ------------------
  |  |  349|  5.94k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.94k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (425:5): [True: 5.94k, False: 6.62k]
  ------------------
  426|  12.5k|    }
  427|  12.5k|  }
_ZNK3AAT13LookupFormat0IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
   99|  4.52k|  {
  100|  4.52k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.52k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  101|  4.52k|    return_trace (arrayZ.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|  4.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.52k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  102|  4.52k|  }
_ZNK3AAT13LookupFormat2IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  157|    441|  {
  158|    441|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    441|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  159|    441|    return_trace (segments.sanitize (c));
  ------------------
  |  |  349|    441|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    441|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  160|    441|  }
_ZNK3AAT13LookupFormat4IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  228|    230|  {
  229|    230|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    230|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  230|    230|    return_trace (segments.sanitize (c, this));
  ------------------
  |  |  349|    230|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    230|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  231|    230|  }
_ZNK3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_tPKv:
  191|    314|  {
  192|    314|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    314|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  193|    314|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    314|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 314, False: 0]
  |  |  |  Branch (349:45): [True: 305, False: 9]
  |  |  |  Branch (349:45): [True: 289, False: 16]
  |  |  ------------------
  ------------------
  194|    314|		  first <= last &&
  195|    314|		  valuesZ.sanitize (c, base, last - first + 1));
  196|    314|  }
_ZNK3AAT13LookupFormat6IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  285|    888|  {
  286|    888|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    888|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  287|    888|    return_trace (entries.sanitize (c));
  ------------------
  |  |  349|    888|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    888|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  288|    888|  }
_ZNK3AAT13LookupFormat8IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  316|    354|  {
  317|    354|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    354|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  318|    354|    return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount));
  ------------------
  |  |  349|    707|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    354|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 353, False: 1]
  |  |  |  Branch (349:45): [True: 352, False: 1]
  |  |  ------------------
  ------------------
  319|    354|  }
_ZNK3AAT14LookupFormat10IN2OT11HBGlyphID16EE8sanitizeEP21hb_sanitize_context_t:
  360|    181|  {
  361|    181|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    181|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  362|    181|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    716|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    181|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 180, False: 1]
  |  |  |  Branch (349:45): [True: 174, False: 6]
  |  |  |  Branch (349:45): [True: 172, False: 2]
  |  |  ------------------
  ------------------
  363|    181|		  valueSize <= 4 &&
  364|    181|		  valueArrayZ.sanitize (c, glyphCount * valueSize));
  365|    181|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    218|  {
  559|    218|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    218|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    218|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|    871|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 215]
  |  |  |  Branch (259:47): [True: 218, False: 0]
  |  |  |  Branch (259:47): [True: 217, False: 1]
  |  |  |  Branch (259:47): [True: 215, False: 2]
  |  |  ------------------
  ------------------
  561|    218|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    218|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    215|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    215|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    215|    unsigned int num_classes = nClasses;
  568|    215|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    215|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 211]
  |  |  ------------------
  ------------------
  569|      4|      return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    211|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    211|    int min_state = 0;
  587|    211|    int max_state = 0;
  588|    211|    unsigned int num_entries = 0;
  589|       |
  590|    211|    int state_pos = 0;
  591|    211|    int state_neg = 0;
  592|    211|    unsigned int entry = 0;
  593|    619|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 619]
  |  Branch (593:37): [True: 442, False: 177]
  ------------------
  594|    442|    {
  595|    442|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 442]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    442|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 442, False: 0]
  ------------------
  617|    442|      {
  618|       |	/* Positive states. */
  619|    442|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    442|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 422]
  |  |  ------------------
  ------------------
  620|    442|				       max_state + 1,
  621|    442|				       row_stride)))
  622|     20|	  return_trace (false);
  ------------------
  |  |  349|     20|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     20|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    422|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 422]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    422|	{ /* Sweep new states. */
  626|    422|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    422|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 422]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    422|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    422|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    422|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 422]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  28.6k|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 28.2k, False: 422]
  ------------------
  632|  28.2k|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    422|	  state_pos = max_state + 1;
  634|    422|	}
  635|    422|      }
  636|       |
  637|    422|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    422|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 408]
  |  |  ------------------
  ------------------
  638|     14|	return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    408|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 408]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    408|      { /* Sweep new entries. */
  642|    408|	const Entry<Extra> *stop = &entries[num_entries];
  643|  4.12k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 3.71k, False: 408]
  ------------------
  644|  3.71k|	{
  645|  3.71k|	  int newState = new_state (p->newState);
  646|  3.71k|	  min_state = hb_min (min_state, newState);
  647|  3.71k|	  max_state = hb_max (max_state, newState);
  648|  3.71k|	}
  649|    408|	entry = num_entries;
  650|    408|      }
  651|    408|    }
  652|       |
  653|    177|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 177]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    177|    return_trace (true);
  ------------------
  |  |  349|    177|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    177|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    211|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEE9new_stateEj:
  531|  5.48M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    472|  {
  559|    472|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    472|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    472|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  1.88k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 457]
  |  |  |  Branch (259:47): [True: 472, False: 0]
  |  |  |  Branch (259:47): [True: 471, False: 1]
  |  |  |  Branch (259:47): [True: 457, False: 14]
  |  |  ------------------
  ------------------
  561|    472|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    472|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    457|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    457|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    457|    unsigned int num_classes = nClasses;
  568|    457|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    457|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 450]
  |  |  ------------------
  ------------------
  569|      7|      return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    450|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    450|    int min_state = 0;
  587|    450|    int max_state = 0;
  588|    450|    unsigned int num_entries = 0;
  589|       |
  590|    450|    int state_pos = 0;
  591|    450|    int state_neg = 0;
  592|    450|    unsigned int entry = 0;
  593|  1.16k|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 1.16k]
  |  Branch (593:37): [True: 749, False: 418]
  ------------------
  594|    749|    {
  595|    749|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 749]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    749|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 749, False: 0]
  ------------------
  617|    749|      {
  618|       |	/* Positive states. */
  619|    749|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    749|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 730]
  |  |  ------------------
  ------------------
  620|    749|				       max_state + 1,
  621|    749|				       row_stride)))
  622|     19|	  return_trace (false);
  ------------------
  |  |  349|     19|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    730|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 730]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    730|	{ /* Sweep new states. */
  626|    730|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    730|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 730]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    730|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    730|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    730|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 730]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  6.40k|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 5.67k, False: 730]
  ------------------
  632|  5.67k|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    730|	  state_pos = max_state + 1;
  634|    730|	}
  635|    730|      }
  636|       |
  637|    730|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    730|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 717]
  |  |  ------------------
  ------------------
  638|     13|	return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    717|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 717]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    717|      { /* Sweep new entries. */
  642|    717|	const Entry<Extra> *stop = &entries[num_entries];
  643|  2.73k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 2.01k, False: 717]
  ------------------
  644|  2.01k|	{
  645|  2.01k|	  int newState = new_state (p->newState);
  646|  2.01k|	  min_state = hb_min (min_state, newState);
  647|  2.01k|	  max_state = hb_max (max_state, newState);
  648|  2.01k|	}
  649|    717|	entry = num_entries;
  650|    717|      }
  651|    717|    }
  652|       |
  653|    418|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 418]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    418|    return_trace (true);
  ------------------
  |  |  349|    418|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    418|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    450|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEE9new_stateEj:
  531|  4.02M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ObsoleteTypesEvE8sanitizeEP21hb_sanitize_context_tPj:
  558|    562|  {
  559|    562|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    562|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    562|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  2.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 555]
  |  |  |  Branch (259:47): [True: 561, False: 1]
  |  |  |  Branch (259:47): [True: 558, False: 3]
  |  |  |  Branch (259:47): [True: 555, False: 3]
  |  |  ------------------
  ------------------
  561|    562|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    562|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    555|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    555|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    555|    unsigned int num_classes = nClasses;
  568|    555|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    555|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 555]
  |  |  ------------------
  ------------------
  569|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    555|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    555|    int min_state = 0;
  587|    555|    int max_state = 0;
  588|    555|    unsigned int num_entries = 0;
  589|       |
  590|    555|    int state_pos = 0;
  591|    555|    int state_neg = 0;
  592|    555|    unsigned int entry = 0;
  593|  1.55k|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 9, False: 1.54k]
  |  Branch (593:37): [True: 1.02k, False: 515]
  ------------------
  594|  1.03k|    {
  595|  1.03k|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 9, False: 1.02k]
  ------------------
  596|      9|      {
  597|       |	/* Negative states. */
  598|      9|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      9|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  599|      9|	  return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|  1.02k|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 1.02k, False: 0]
  ------------------
  617|  1.02k|      {
  618|       |	/* Positive states. */
  619|  1.02k|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|  1.02k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 1.00k]
  |  |  ------------------
  ------------------
  620|  1.02k|				       max_state + 1,
  621|  1.02k|				       row_stride)))
  622|     19|	  return_trace (false);
  ------------------
  |  |  349|     19|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|  1.00k|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 1.00k]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|  1.00k|	{ /* Sweep new states. */
  626|  1.00k|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|  1.00k|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|  1.00k|	  if (unlikely (stop < states))
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  1.38M|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 1.38M, False: 1.00k]
  ------------------
  632|  1.38M|	    num_entries = hb_max (num_entries, *p + 1u);
  633|  1.00k|	  state_pos = max_state + 1;
  634|  1.00k|	}
  635|  1.00k|      }
  636|       |
  637|  1.00k|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 995]
  |  |  ------------------
  ------------------
  638|     12|	return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    995|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 995]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    995|      { /* Sweep new entries. */
  642|    995|	const Entry<Extra> *stop = &entries[num_entries];
  643|  11.2k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 10.2k, False: 995]
  ------------------
  644|  10.2k|	{
  645|  10.2k|	  int newState = new_state (p->newState);
  646|  10.2k|	  min_state = hb_min (min_state, newState);
  647|  10.2k|	  max_state = hb_max (max_state, newState);
  648|  10.2k|	}
  649|    995|	entry = num_entries;
  650|    995|      }
  651|    995|    }
  652|       |
  653|    515|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 515]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    515|    return_trace (true);
  ------------------
  |  |  349|    515|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    515|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    555|  }
_ZNK3AAT10ClassTableIN2OT7IntTypeIhLj1EEEE8sanitizeEP21hb_sanitize_context_t:
  688|  1.46k|  {
  689|  1.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  690|  1.46k|    return_trace (c->check_struct (this) && classArray.sanitize (c));
  ------------------
  |  |  349|  2.91k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.45k, False: 3]
  |  |  |  Branch (349:45): [True: 1.45k, False: 2]
  |  |  ------------------
  ------------------
  691|  1.46k|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesEvE9new_stateEj:
  531|  10.6M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    340|  {
  559|    340|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    340|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    340|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  1.35k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 337]
  |  |  |  Branch (259:47): [True: 339, False: 1]
  |  |  |  Branch (259:47): [True: 338, False: 1]
  |  |  |  Branch (259:47): [True: 337, False: 1]
  |  |  ------------------
  ------------------
  561|    340|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    340|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    337|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    337|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    337|    unsigned int num_classes = nClasses;
  568|    337|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    337|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 337]
  |  |  ------------------
  ------------------
  569|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    337|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    337|    int min_state = 0;
  587|    337|    int max_state = 0;
  588|    337|    unsigned int num_entries = 0;
  589|       |
  590|    337|    int state_pos = 0;
  591|    337|    int state_neg = 0;
  592|    337|    unsigned int entry = 0;
  593|    846|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 11, False: 835]
  |  Branch (593:37): [True: 531, False: 304]
  ------------------
  594|    542|    {
  595|    542|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 11, False: 531]
  ------------------
  596|     11|      {
  597|       |	/* Negative states. */
  598|     11|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|     11|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 0]
  |  |  ------------------
  ------------------
  599|     11|	  return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    531|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 531, False: 0]
  ------------------
  617|    531|      {
  618|       |	/* Positive states. */
  619|    531|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    531|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 520]
  |  |  ------------------
  ------------------
  620|    531|				       max_state + 1,
  621|    531|				       row_stride)))
  622|     11|	  return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    520|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 520]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    520|	{ /* Sweep new states. */
  626|    520|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    520|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 520]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    520|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    520|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    520|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 520]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|   673k|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 673k, False: 520]
  ------------------
  632|   673k|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    520|	  state_pos = max_state + 1;
  634|    520|	}
  635|    520|      }
  636|       |
  637|    520|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    520|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 509]
  |  |  ------------------
  ------------------
  638|     11|	return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    509|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 509]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    509|      { /* Sweep new entries. */
  642|    509|	const Entry<Extra> *stop = &entries[num_entries];
  643|  5.55k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 5.04k, False: 509]
  ------------------
  644|  5.04k|	{
  645|  5.04k|	  int newState = new_state (p->newState);
  646|  5.04k|	  min_state = hb_min (min_state, newState);
  647|  5.04k|	  max_state = hb_max (max_state, newState);
  648|  5.04k|	}
  649|    509|	entry = num_entries;
  650|    509|      }
  651|    509|    }
  652|       |
  653|    304|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 304, False: 0]
  ------------------
  654|    304|      *num_entries_out = num_entries;
  655|       |
  656|    304|    return_trace (true);
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    337|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEE9new_stateEj:
  531|  8.49M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    565|  {
  559|    565|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    565|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    565|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  2.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 563]
  |  |  |  Branch (259:47): [True: 565, False: 0]
  |  |  |  Branch (259:47): [True: 564, False: 1]
  |  |  |  Branch (259:47): [True: 563, False: 1]
  |  |  ------------------
  ------------------
  561|    565|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    565|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    563|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    563|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    563|    unsigned int num_classes = nClasses;
  568|    563|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    563|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 563]
  |  |  ------------------
  ------------------
  569|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    563|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    563|    int min_state = 0;
  587|    563|    int max_state = 0;
  588|    563|    unsigned int num_entries = 0;
  589|       |
  590|    563|    int state_pos = 0;
  591|    563|    int state_neg = 0;
  592|    563|    unsigned int entry = 0;
  593|  1.27k|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 12, False: 1.26k]
  |  Branch (593:37): [True: 729, False: 535]
  ------------------
  594|    741|    {
  595|    741|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 12, False: 729]
  ------------------
  596|     12|      {
  597|       |	/* Negative states. */
  598|     12|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|     12|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  599|     12|	  return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    729|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 729, False: 0]
  ------------------
  617|    729|      {
  618|       |	/* Positive states. */
  619|    729|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    729|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 722]
  |  |  ------------------
  ------------------
  620|    729|				       max_state + 1,
  621|    729|				       row_stride)))
  622|      7|	  return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    722|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 722]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    722|	{ /* Sweep new states. */
  626|    722|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    722|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 722]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    722|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    722|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    722|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 722]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  6.40k|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 5.68k, False: 722]
  ------------------
  632|  5.68k|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    722|	  state_pos = max_state + 1;
  634|    722|	}
  635|    722|      }
  636|       |
  637|    722|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    722|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 713]
  |  |  ------------------
  ------------------
  638|      9|	return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    713|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 713]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    713|      { /* Sweep new entries. */
  642|    713|	const Entry<Extra> *stop = &entries[num_entries];
  643|  3.98k|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 3.27k, False: 713]
  ------------------
  644|  3.27k|	{
  645|  3.27k|	  int newState = new_state (p->newState);
  646|  3.27k|	  min_state = hb_min (min_state, newState);
  647|  3.27k|	  max_state = hb_max (max_state, newState);
  648|  3.27k|	}
  649|    713|	entry = num_entries;
  650|    713|      }
  651|    713|    }
  652|       |
  653|    535|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 535]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    535|    return_trace (true);
  ------------------
  |  |  349|    535|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    535|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    563|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEE9new_stateEj:
  531|  1.82M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZN3AAT22hb_aat_apply_context_t16set_lookup_indexEj:
   76|   103k|  void set_lookup_index (unsigned int i) { lookup_index = i; }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_21RearrangementSubtableINS_13ExtendedTypesEEEEEbRKT_:
   50|    895|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesEvEC2ERKNS_10StateTableIS1_vEEP11hb_buffer_tP9hb_face_t:
  780|    895|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesEvE5driveINS_21RearrangementSubtableIS1_E16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    895|  {
  785|    895|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 895]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|    895|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    895|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 895, False: 0]
  |  Branch (790:43): [True: 0, False: 895]
  ------------------
  791|  4.80M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 4.80M, False: 0]
  ------------------
  792|  4.80M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  4.80M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 4.80M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  4.80M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 4.80M, False: 895]
  ------------------
  820|  4.80M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  4.80M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  4.80M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  4.80M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  4.80M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  4.80M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  4.80M|      const EntryT *wouldbe_entry;
  855|  4.80M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  4.80M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 3.01M, False: 1.79M]
  ------------------
  858|  4.80M|      &&
  859|       |	/* 2. */
  860|  4.80M|	(
  861|       |	  /* 2a. */
  862|  3.01M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 1.16M, False: 1.84M]
  ------------------
  863|  3.01M|	||
  864|       |	  /* 2b. */
  865|  3.01M|	  (
  866|  1.84M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.84M, False: 4.61k]
  ------------------
  867|  1.84M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 804k, False: 1.04M]
  ------------------
  868|  1.84M|	  )
  869|  3.01M|	||
  870|       |	  /* 2c. */
  871|  3.01M|	  (
  ------------------
  |  Branch (871:4): [True: 312k, False: 732k]
  ------------------
  872|  1.04M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.04M|	  ,
  874|       |	    /* 2c'. */
  875|  1.04M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 642k, False: 402k]
  ------------------
  876|  1.04M|	  &&
  877|       |	    /* 2c". */
  878|  1.04M|	    (
  879|   642k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 312k, False: 330k]
  ------------------
  880|   642k|	    &&
  881|   642k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 312k, False: 102]
  ------------------
  882|   642k|	    )
  883|  1.04M|	  )
  884|  3.01M|	)
  885|  4.80M|      &&
  886|       |	/* 3. */
  887|  4.80M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 1.34M, False: 930k]
  ------------------
  888|  4.80M|      ;
  889|       |
  890|  4.80M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 3.45M, False: 1.34M]
  |  Branch (890:29): [True: 392k, False: 3.06M]
  |  Branch (890:57): [True: 392k, False: 302]
  ------------------
  891|   392k|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  4.80M|      c->transition (this, entry);
  894|       |
  895|  4.80M|      state = next_state;
  896|  4.80M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  4.80M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  4.80M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  4.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.80M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 895, False: 4.80M]
  ------------------
  899|    895|	break;
  900|       |
  901|  4.80M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 97.2k, False: 4.70M]
  |  Branch (901:54): [True: 18.2k, False: 4.68M]
  ------------------
  902|   115k|	(void) buffer->next_glyph ();
  903|  4.80M|    }
  904|       |
  905|    895|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 895]
  ------------------
  906|      0|      buffer->sync ();
  907|    895|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesEvE9get_classEjj:
  534|  4.80M|  {
  535|  4.80M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  4.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 214k, False: 4.58M]
  |  |  ------------------
  ------------------
  536|  4.58M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  4.80M|  }
_ZNK3AAT6LookupIN2OT7IntTypeItLj2EEEE9get_classEjjj:
  409|  24.9M|  {
  410|  24.9M|    const T *v = get_value (glyph_id, num_glyphs);
  411|  24.9M|    return v ? *v : outOfRange;
  ------------------
  |  Branch (411:12): [True: 3.63M, False: 21.3M]
  ------------------
  412|  24.9M|  }
_ZNK3AAT6LookupIN2OT7IntTypeItLj2EEEE9get_valueEjj:
  384|  24.9M|  {
  385|  24.9M|    switch (u.format) {
  386|  13.7M|    case 0: return u.format0.get_value (glyph_id, num_glyphs);
  ------------------
  |  Branch (386:5): [True: 13.7M, False: 11.1M]
  ------------------
  387|  2.75M|    case 2: return u.format2.get_value (glyph_id);
  ------------------
  |  Branch (387:5): [True: 2.75M, False: 22.2M]
  ------------------
  388|  1.79M|    case 4: return u.format4.get_value (glyph_id);
  ------------------
  |  Branch (388:5): [True: 1.79M, False: 23.1M]
  ------------------
  389|  1.58M|    case 6: return u.format6.get_value (glyph_id);
  ------------------
  |  Branch (389:5): [True: 1.58M, False: 23.3M]
  ------------------
  390|  2.64M|    case 8: return u.format8.get_value (glyph_id);
  ------------------
  |  Branch (390:5): [True: 2.64M, False: 22.3M]
  ------------------
  391|  2.41M|    default:return nullptr;
  ------------------
  |  Branch (391:5): [True: 2.41M, False: 22.5M]
  ------------------
  392|  24.9M|    }
  393|  24.9M|  }
_ZNK3AAT13LookupFormat0IN2OT7IntTypeItLj2EEEE9get_valueEjj:
   93|  13.7M|  {
   94|  13.7M|    if (unlikely (glyph_id >= num_glyphs)) return nullptr;
  ------------------
  |  |  259|  13.7M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.1M, False: 583k]
  |  |  ------------------
  ------------------
   95|   583k|    return &arrayZ[glyph_id];
   96|  13.7M|  }
_ZNK3AAT13LookupFormat2IN2OT7IntTypeItLj2EEEE9get_valueEj:
  151|  2.75M|  {
  152|  2.75M|    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
  153|  2.75M|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (153:12): [True: 715k, False: 2.03M]
  ------------------
  154|  2.75M|  }
_ZNK3AAT19LookupSegmentSingleIN2OT7IntTypeItLj2EEEE3cmpEj:
  124|  3.47M|  { return g < first ? -1 : g <= last ? 0 : +1 ; }
  ------------------
  |  Branch (124:12): [True: 2.46M, False: 1.01M]
  |  Branch (124:29): [True: 715k, False: 294k]
  ------------------
_ZNK3AAT13LookupFormat4IN2OT7IntTypeItLj2EEEE9get_valueEj:
  222|  1.79M|  {
  223|  1.79M|    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
  224|  1.79M|    return v ? v->get_value (glyph_id, this) : nullptr;
  ------------------
  |  Branch (224:12): [True: 129k, False: 1.66M]
  ------------------
  225|  1.79M|  }
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEE3cmpEj:
  188|   486k|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (188:12): [True: 3.87k, False: 482k]
  |  Branch (188:29): [True: 129k, False: 352k]
  ------------------
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEE9get_valueEjPKv:
  183|   129k|  {
  184|   129k|    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
  ------------------
  |  Branch (184:12): [True: 129k, False: 0]
  |  Branch (184:33): [True: 129k, False: 0]
  ------------------
  185|   129k|  }
_ZNK3AAT13LookupFormat6IN2OT7IntTypeItLj2EEEE9get_valueEj:
  279|  1.58M|  {
  280|  1.58M|    const LookupSingle<T> *v = entries.bsearch (glyph_id);
  281|  1.58M|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (281:12): [True: 601k, False: 981k]
  ------------------
  282|  1.58M|  }
_ZNK3AAT12LookupSingleIN2OT7IntTypeItLj2EEEE3cmpEj:
  253|  3.02M|  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
_ZNK3AAT13LookupFormat8IN2OT7IntTypeItLj2EEEE9get_valueEj:
  310|  2.64M|  {
  311|  2.64M|    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
  ------------------
  |  Branch (311:12): [True: 2.51M, False: 128k]
  |  Branch (311:38): [True: 1.60M, False: 906k]
  ------------------
  312|  1.60M|	   &valueArrayZ[glyph_id - firstGlyph] : nullptr;
  313|  2.64M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesEvE9get_entryEij:
  543|  8.12M|  {
  544|  8.12M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  8.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 650k, False: 7.47M]
  |  |  ------------------
  ------------------
  545|   650k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  8.12M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  8.12M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  8.12M|    unsigned int entry = states[state * nClasses + klass];
  551|  8.12M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  8.12M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  8.12M|    return entries[entry];
  554|  8.12M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_18ContextualSubtableINS_13ExtendedTypesEEEEEbRKT_:
   50|  1.34k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|  1.34k|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE5driveINS3_16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|  1.34k|  {
  785|  1.34k|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 1.34k]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|  1.34k|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|  1.34k|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 1.34k, False: 0]
  |  Branch (790:43): [True: 0, False: 1.34k]
  ------------------
  791|  6.53M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 6.53M, False: 0]
  ------------------
  792|  6.53M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  6.53M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 6.53M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  6.53M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 6.53M, False: 1.34k]
  ------------------
  820|  6.53M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  6.53M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  6.53M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  6.53M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  6.53M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  6.53M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  6.53M|      const EntryT *wouldbe_entry;
  855|  6.53M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  6.53M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 3.40M, False: 3.12M]
  ------------------
  858|  6.53M|      &&
  859|       |	/* 2. */
  860|  6.53M|	(
  861|       |	  /* 2a. */
  862|  3.40M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 1.68M, False: 1.72M]
  ------------------
  863|  3.40M|	||
  864|       |	  /* 2b. */
  865|  3.40M|	  (
  866|  1.72M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.71M, False: 2.97k]
  ------------------
  867|  1.72M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 234k, False: 1.48M]
  ------------------
  868|  1.72M|	  )
  869|  3.40M|	||
  870|       |	  /* 2c. */
  871|  3.40M|	  (
  ------------------
  |  Branch (871:4): [True: 996k, False: 491k]
  ------------------
  872|  1.48M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.48M|	  ,
  874|       |	    /* 2c'. */
  875|  1.48M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 1.05M, False: 435k]
  ------------------
  876|  1.48M|	  &&
  877|       |	    /* 2c". */
  878|  1.48M|	    (
  879|  1.05M|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 1.05M, False: 157]
  ------------------
  880|  1.05M|	    &&
  881|  1.05M|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 996k, False: 55.4k]
  ------------------
  882|  1.05M|	    )
  883|  1.48M|	  )
  884|  3.40M|	)
  885|  6.53M|      &&
  886|       |	/* 3. */
  887|  6.53M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 2.24M, False: 671k]
  ------------------
  888|  6.53M|      ;
  889|       |
  890|  6.53M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 4.29M, False: 2.24M]
  |  Branch (890:29): [True: 834k, False: 3.45M]
  |  Branch (890:57): [True: 834k, False: 504]
  ------------------
  891|   834k|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  6.53M|      c->transition (this, entry);
  894|       |
  895|  6.53M|      state = next_state;
  896|  6.53M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  6.53M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  6.53M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  6.53M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.53M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 1.34k, False: 6.53M]
  ------------------
  899|  1.34k|	break;
  900|       |
  901|  6.53M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 12.1k, False: 6.52M]
  |  Branch (901:54): [True: 10.7k, False: 6.50M]
  ------------------
  902|  22.8k|	(void) buffer->next_glyph ();
  903|  6.53M|    }
  904|       |
  905|  1.34k|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 1.34k]
  ------------------
  906|      0|      buffer->sync ();
  907|  1.34k|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE9get_classEjj:
  534|  6.53M|  {
  535|  6.53M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  6.53M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.68M, False: 4.84M]
  |  |  ------------------
  ------------------
  536|  4.84M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  6.53M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_18ContextualSubtableIS1_E9EntryDataEE9get_entryEij:
  543|  10.9M|  {
  544|  10.9M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  10.9M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 470k, False: 10.4M]
  |  |  ------------------
  ------------------
  545|   470k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  10.9M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  10.9M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  10.9M|    unsigned int entry = states[state * nClasses + klass];
  551|  10.9M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  10.9M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  10.9M|    return entries[entry];
  554|  10.9M|  }
_ZNK3AAT6LookupIN2OT11HBGlyphID16EE9get_valueEjj:
  384|  6.42M|  {
  385|  6.42M|    switch (u.format) {
  386|  1.77M|    case 0: return u.format0.get_value (glyph_id, num_glyphs);
  ------------------
  |  Branch (386:5): [True: 1.77M, False: 4.64M]
  ------------------
  387|   333k|    case 2: return u.format2.get_value (glyph_id);
  ------------------
  |  Branch (387:5): [True: 333k, False: 6.08M]
  ------------------
  388|   506k|    case 4: return u.format4.get_value (glyph_id);
  ------------------
  |  Branch (388:5): [True: 506k, False: 5.91M]
  ------------------
  389|   662k|    case 6: return u.format6.get_value (glyph_id);
  ------------------
  |  Branch (389:5): [True: 662k, False: 5.75M]
  ------------------
  390|  2.76M|    case 8: return u.format8.get_value (glyph_id);
  ------------------
  |  Branch (390:5): [True: 2.76M, False: 3.65M]
  ------------------
  391|   380k|    default:return nullptr;
  ------------------
  |  Branch (391:5): [True: 380k, False: 6.04M]
  ------------------
  392|  6.42M|    }
  393|  6.42M|  }
_ZNK3AAT13LookupFormat0IN2OT11HBGlyphID16EE9get_valueEjj:
   93|  1.77M|  {
   94|  1.77M|    if (unlikely (glyph_id >= num_glyphs)) return nullptr;
  ------------------
  |  |  259|  1.77M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.36M, False: 409k]
  |  |  ------------------
  ------------------
   95|   409k|    return &arrayZ[glyph_id];
   96|  1.77M|  }
_ZNK3AAT13LookupFormat2IN2OT11HBGlyphID16EE9get_valueEj:
  151|   333k|  {
  152|   333k|    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
  153|   333k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (153:12): [True: 111k, False: 222k]
  ------------------
  154|   333k|  }
_ZNK3AAT19LookupSegmentSingleIN2OT11HBGlyphID16EE3cmpEj:
  124|   555k|  { return g < first ? -1 : g <= last ? 0 : +1 ; }
  ------------------
  |  Branch (124:12): [True: 1.67k, False: 554k]
  |  Branch (124:29): [True: 111k, False: 442k]
  ------------------
_ZNK3AAT13LookupFormat4IN2OT11HBGlyphID16EE9get_valueEj:
  222|   506k|  {
  223|   506k|    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
  224|   506k|    return v ? v->get_value (glyph_id, this) : nullptr;
  ------------------
  |  Branch (224:12): [True: 60.5k, False: 445k]
  ------------------
  225|   506k|  }
_ZNK3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EE3cmpEj:
  188|   446k|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (188:12): [True: 32.7k, False: 413k]
  |  Branch (188:29): [True: 60.5k, False: 353k]
  ------------------
_ZNK3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EE9get_valueEjPKv:
  183|  60.5k|  {
  184|  60.5k|    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
  ------------------
  |  Branch (184:12): [True: 60.5k, False: 0]
  |  Branch (184:33): [True: 60.5k, False: 0]
  ------------------
  185|  60.5k|  }
_ZNK3AAT13LookupFormat6IN2OT11HBGlyphID16EE9get_valueEj:
  279|   662k|  {
  280|   662k|    const LookupSingle<T> *v = entries.bsearch (glyph_id);
  281|   662k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (281:12): [True: 2.33k, False: 660k]
  ------------------
  282|   662k|  }
_ZNK3AAT12LookupSingleIN2OT11HBGlyphID16EE3cmpEj:
  253|  1.97M|  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
_ZNK3AAT13LookupFormat8IN2OT11HBGlyphID16EE9get_valueEj:
  310|  2.76M|  {
  311|  2.76M|    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
  ------------------
  |  Branch (311:12): [True: 872k, False: 1.89M]
  |  Branch (311:38): [True: 3.25k, False: 869k]
  ------------------
  312|  2.76M|	   &valueArrayZ[glyph_id - firstGlyph] : nullptr;
  313|  2.76M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_16LigatureSubtableINS_13ExtendedTypesEEEEEbRKT_:
   50|    935|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|    935|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEE5driveINS_16LigatureSubtableIS1_E16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    935|  {
  785|    935|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 935, False: 0]
  ------------------
  786|    935|      buffer->clear_output ();
  787|       |
  788|    935|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    935|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 935, False: 0]
  |  Branch (790:43): [True: 0, False: 935]
  ------------------
  791|  4.96M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 4.96M, False: 0]
  ------------------
  792|  4.96M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  4.96M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 4.96M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  4.96M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 4.96M, False: 935]
  ------------------
  820|  4.96M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  4.96M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  4.96M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  4.96M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  4.96M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  4.96M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  4.96M|      const EntryT *wouldbe_entry;
  855|  4.96M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  4.96M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 2.41M, False: 2.55M]
  ------------------
  858|  4.96M|      &&
  859|       |	/* 2. */
  860|  4.96M|	(
  861|       |	  /* 2a. */
  862|  2.41M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 673k, False: 1.73M]
  ------------------
  863|  2.41M|	||
  864|       |	  /* 2b. */
  865|  2.41M|	  (
  866|  1.73M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.73M, False: 1.72k]
  ------------------
  867|  1.73M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 517k, False: 1.21M]
  ------------------
  868|  1.73M|	  )
  869|  2.41M|	||
  870|       |	  /* 2c. */
  871|  2.41M|	  (
  ------------------
  |  Branch (871:4): [True: 331k, False: 887k]
  ------------------
  872|  1.21M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.21M|	  ,
  874|       |	    /* 2c'. */
  875|  1.21M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 515k, False: 704k]
  ------------------
  876|  1.21M|	  &&
  877|       |	    /* 2c". */
  878|  1.21M|	    (
  879|   515k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 370k, False: 144k]
  ------------------
  880|   515k|	    &&
  881|   515k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 331k, False: 39.0k]
  ------------------
  882|   515k|	    )
  883|  1.21M|	  )
  884|  2.41M|	)
  885|  4.96M|      &&
  886|       |	/* 3. */
  887|  4.96M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 1.13M, False: 390k]
  ------------------
  888|  4.96M|      ;
  889|       |
  890|  4.96M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 3.83M, False: 1.13M]
  |  Branch (890:29): [True: 842k, False: 2.99M]
  |  Branch (890:57): [True: 841k, False: 411]
  ------------------
  891|   841k|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  4.96M|      c->transition (this, entry);
  894|       |
  895|  4.96M|      state = next_state;
  896|  4.96M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  4.96M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  4.96M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  4.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.96M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 935, False: 4.96M]
  ------------------
  899|    935|	break;
  900|       |
  901|  4.96M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 8.40k, False: 4.95M]
  |  Branch (901:54): [True: 3.12k, False: 4.95M]
  ------------------
  902|  11.5k|	(void) buffer->next_glyph ();
  903|  4.96M|    }
  904|       |
  905|    935|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 935, False: 0]
  ------------------
  906|    935|      buffer->sync ();
  907|    935|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEE9get_classEjj:
  534|  4.96M|  {
  535|  4.96M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  4.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 91.3k, False: 4.87M]
  |  |  ------------------
  ------------------
  536|  4.87M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  4.96M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_13LigatureEntryILb1EE9EntryDataEE9get_entryEij:
  543|  7.71M|  {
  544|  7.71M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  7.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 805k, False: 6.90M]
  |  |  ------------------
  ------------------
  545|   805k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  7.71M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  7.71M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  7.71M|    unsigned int entry = states[state * nClasses + klass];
  551|  7.71M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  7.71M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  7.71M|    return entries[entry];
  554|  7.71M|  }
_ZN3AAT13ExtendedTypes13offsetToIndexIN2OT7IntTypeIjLj4EEEEEjjPKvPKT_:
  750|  2.44M|  {
  751|  2.44M|    return offset;
  752|  2.44M|  }
_ZN3AAT13ExtendedTypes17wordOffsetToIndexIN2OT7IntTypeItLj2EEEEEjjPKvPKT_:
  764|  1.74M|  {
  765|  1.74M|    return offset;
  766|  1.74M|  }
_ZN3AAT13ExtendedTypes13offsetToIndexIN2OT11HBGlyphID16EEEjjPKvPKT_:
  750|   709k|  {
  751|   709k|    return offset;
  752|   709k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_21NoncontextualSubtableINS_13ExtendedTypesEEEEEbRKT_:
   50|    713|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_17InsertionSubtableINS_13ExtendedTypesEEEEEbRKT_:
   50|  1.66k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|  1.66k|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEE5driveINS3_16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|  1.66k|  {
  785|  1.66k|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 1.66k, False: 0]
  ------------------
  786|  1.66k|      buffer->clear_output ();
  787|       |
  788|  1.66k|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|  1.66k|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 1.66k, False: 0]
  |  Branch (790:43): [True: 0, False: 1.66k]
  ------------------
  791|  3.28M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 3.28M, False: 11]
  ------------------
  792|  3.28M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  3.28M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 3.28M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  3.28M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 3.24M, False: 35.9k]
  ------------------
  820|  3.24M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  3.28M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  3.28M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  3.28M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  3.28M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  3.28M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  3.28M|      const EntryT *wouldbe_entry;
  855|  3.28M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  3.28M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 1.95M, False: 1.32M]
  ------------------
  858|  3.28M|      &&
  859|       |	/* 2. */
  860|  3.28M|	(
  861|       |	  /* 2a. */
  862|  1.95M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 415k, False: 1.54M]
  ------------------
  863|  1.95M|	||
  864|       |	  /* 2b. */
  865|  1.95M|	  (
  866|  1.54M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.50M, False: 33.4k]
  ------------------
  867|  1.54M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 208k, False: 1.30M]
  ------------------
  868|  1.54M|	  )
  869|  1.95M|	||
  870|       |	  /* 2c. */
  871|  1.95M|	  (
  ------------------
  |  Branch (871:4): [True: 705k, False: 629k]
  ------------------
  872|  1.33M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.33M|	  ,
  874|       |	    /* 2c'. */
  875|  1.33M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 742k, False: 592k]
  ------------------
  876|  1.33M|	  &&
  877|       |	    /* 2c". */
  878|  1.33M|	    (
  879|   742k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 741k, False: 1.10k]
  ------------------
  880|   742k|	    &&
  881|   742k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 705k, False: 35.8k]
  ------------------
  882|   742k|	    )
  883|  1.33M|	  )
  884|  1.95M|	)
  885|  3.28M|      &&
  886|       |	/* 3. */
  887|  3.28M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 984k, False: 344k]
  ------------------
  888|  3.28M|      ;
  889|       |
  890|  3.28M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 2.29M, False: 984k]
  |  Branch (890:29): [True: 2.03M, False: 263k]
  |  Branch (890:57): [True: 1.99M, False: 35.1k]
  ------------------
  891|  1.99M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  3.28M|      c->transition (this, entry);
  894|       |
  895|  3.28M|      state = next_state;
  896|  3.28M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  3.28M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  3.28M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  3.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 181, False: 3.27M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 1.46k, False: 3.27M]
  ------------------
  899|  1.65k|	break;
  900|       |
  901|  3.27M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 412k, False: 2.86M]
  |  Branch (901:54): [True: 904k, False: 1.96M]
  ------------------
  902|  1.31M|	(void) buffer->next_glyph ();
  903|  3.27M|    }
  904|       |
  905|  1.66k|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 1.66k, False: 0]
  ------------------
  906|  1.66k|      buffer->sync ();
  907|  1.66k|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEE9get_classEjj:
  534|  3.24M|  {
  535|  3.24M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  3.24M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47.4k, False: 3.19M]
  |  |  ------------------
  ------------------
  536|  3.19M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  3.24M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_17InsertionSubtableIS1_E9EntryDataEE9get_entryEij:
  543|  5.94M|  {
  544|  5.94M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  5.94M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 339k, False: 5.60M]
  |  |  ------------------
  ------------------
  545|   339k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  5.94M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  5.94M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  5.94M|    unsigned int entry = states[state * nClasses + klass];
  551|  5.94M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  5.94M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  5.94M|    return entries[entry];
  554|  5.94M|  }
_ZN3AAT22hb_aat_apply_context_t20default_return_valueEv:
   51|  34.7k|  static return_t default_return_value () { return false; }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_21RearrangementSubtableINS_13ObsoleteTypesEEEEEbRKT_:
   50|    943|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesEvEC2ERKNS_10StateTableIS1_vEEP11hb_buffer_tP9hb_face_t:
  780|  2.23k|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesEvE5driveINS_21RearrangementSubtableIS1_E16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    943|  {
  785|    943|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 943]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|    943|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    943|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 943, False: 0]
  |  Branch (790:43): [True: 0, False: 943]
  ------------------
  791|  3.88M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 3.88M, False: 0]
  ------------------
  792|  3.88M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  3.88M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 3.88M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  3.88M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 3.88M, False: 943]
  ------------------
  820|  3.88M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  3.88M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  3.88M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  3.88M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  3.88M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  3.88M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  3.88M|      const EntryT *wouldbe_entry;
  855|  3.88M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  3.88M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 1.32M, False: 2.56M]
  ------------------
  858|  3.88M|      &&
  859|       |	/* 2. */
  860|  3.88M|	(
  861|       |	  /* 2a. */
  862|  1.32M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 755k, False: 564k]
  ------------------
  863|  1.32M|	||
  864|       |	  /* 2b. */
  865|  1.32M|	  (
  866|   564k|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 528k, False: 36.0k]
  ------------------
  867|   564k|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 33.8k, False: 494k]
  ------------------
  868|   564k|	  )
  869|  1.32M|	||
  870|       |	  /* 2c. */
  871|  1.32M|	  (
  ------------------
  |  Branch (871:4): [True: 319k, False: 211k]
  ------------------
  872|   530k|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|   530k|	  ,
  874|       |	    /* 2c'. */
  875|   530k|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 483k, False: 47.1k]
  ------------------
  876|   530k|	  &&
  877|       |	    /* 2c". */
  878|   530k|	    (
  879|   483k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 449k, False: 33.9k]
  ------------------
  880|   483k|	    &&
  881|   483k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 319k, False: 130k]
  ------------------
  882|   483k|	    )
  883|   530k|	  )
  884|  1.32M|	)
  885|  3.88M|      &&
  886|       |	/* 3. */
  887|  3.88M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 1.00M, False: 105k]
  ------------------
  888|  3.88M|      ;
  889|       |
  890|  3.88M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 2.88M, False: 1.00M]
  |  Branch (890:29): [True: 736k, False: 2.14M]
  |  Branch (890:57): [True: 736k, False: 373]
  ------------------
  891|   736k|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  3.88M|      c->transition (this, entry);
  894|       |
  895|  3.88M|      state = next_state;
  896|  3.88M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  3.88M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  3.88M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  3.88M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.88M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 943, False: 3.88M]
  ------------------
  899|    943|	break;
  900|       |
  901|  3.88M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 216k, False: 3.66M]
  |  Branch (901:54): [True: 44.1k, False: 3.62M]
  ------------------
  902|   261k|	(void) buffer->next_glyph ();
  903|  3.88M|    }
  904|       |
  905|    943|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 943]
  ------------------
  906|      0|      buffer->sync ();
  907|    943|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesEvE9get_classEjj:
  534|  9.62M|  {
  535|  9.62M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  9.62M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 113k, False: 9.50M]
  |  |  ------------------
  ------------------
  536|  9.50M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  9.62M|  }
_ZNK3AAT10ClassTableIN2OT7IntTypeIhLj1EEEE9get_classEjjj:
  684|  17.2M|  {
  685|  17.2M|    return get_class (glyph_id, outOfRange);
  686|  17.2M|  }
_ZNK3AAT10ClassTableIN2OT7IntTypeIhLj1EEEE9get_classEjj:
  677|  17.2M|  {
  678|  17.2M|    unsigned int i = glyph_id - firstGlyph;
  679|  17.2M|    return i >= classArray.len ? outOfRange : classArray.arrayZ[i];
  ------------------
  |  Branch (679:12): [True: 15.4M, False: 1.81M]
  ------------------
  680|  17.2M|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesEvE9get_entryEij:
  543|  14.3M|  {
  544|  14.3M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  14.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 405k, False: 13.9M]
  |  |  ------------------
  ------------------
  545|   405k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  14.3M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  14.3M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  14.3M|    unsigned int entry = states[state * nClasses + klass];
  551|  14.3M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  14.3M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  14.3M|    return entries[entry];
  554|  14.3M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_18ContextualSubtableINS_13ObsoleteTypesEEEEEbRKT_:
   50|  1.48k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|  1.48k|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEE5driveINS3_16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|  1.48k|  {
  785|  1.48k|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 1.48k]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|  1.48k|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|  1.48k|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 1.48k, False: 0]
  |  Branch (790:43): [True: 0, False: 1.48k]
  ------------------
  791|  7.43M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 7.43M, False: 0]
  ------------------
  792|  7.43M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  7.43M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 7.43M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  7.43M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 7.43M, False: 1.48k]
  ------------------
  820|  7.43M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  7.43M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  7.43M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  7.43M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  7.43M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  7.43M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  7.43M|      const EntryT *wouldbe_entry;
  855|  7.43M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  7.43M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 1.33M, False: 6.10M]
  ------------------
  858|  7.43M|      &&
  859|       |	/* 2. */
  860|  7.43M|	(
  861|       |	  /* 2a. */
  862|  1.33M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 149k, False: 1.18M]
  ------------------
  863|  1.33M|	||
  864|       |	  /* 2b. */
  865|  1.33M|	  (
  866|  1.18M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.18M, False: 1.51k]
  ------------------
  867|  1.18M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 108k, False: 1.07M]
  ------------------
  868|  1.18M|	  )
  869|  1.33M|	||
  870|       |	  /* 2c. */
  871|  1.33M|	  (
  ------------------
  |  Branch (871:4): [True: 1.05M, False: 18.0k]
  ------------------
  872|  1.07M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.07M|	  ,
  874|       |	    /* 2c'. */
  875|  1.07M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 1.05M, False: 17.9k]
  ------------------
  876|  1.07M|	  &&
  877|       |	    /* 2c". */
  878|  1.07M|	    (
  879|  1.05M|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 1.05M, False: 102]
  ------------------
  880|  1.05M|	    &&
  881|  1.05M|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 1.05M, False: 71]
  ------------------
  882|  1.05M|	    )
  883|  1.07M|	  )
  884|  1.33M|	)
  885|  7.43M|      &&
  886|       |	/* 3. */
  887|  7.43M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 1.07M, False: 239k]
  ------------------
  888|  7.43M|      ;
  889|       |
  890|  7.43M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 6.35M, False: 1.07M]
  |  Branch (890:29): [True: 2.01M, False: 4.34M]
  |  Branch (890:57): [True: 2.01M, False: 795]
  ------------------
  891|  2.01M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  7.43M|      c->transition (this, entry);
  894|       |
  895|  7.43M|      state = next_state;
  896|  7.43M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  7.43M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  7.43M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  7.43M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.43M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 1.48k, False: 7.43M]
  ------------------
  899|  1.48k|	break;
  900|       |
  901|  7.43M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 285k, False: 7.14M]
  |  Branch (901:54): [True: 69.3k, False: 7.07M]
  ------------------
  902|   354k|	(void) buffer->next_glyph ();
  903|  7.43M|    }
  904|       |
  905|  1.48k|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 1.48k]
  ------------------
  906|      0|      buffer->sync ();
  907|  1.48k|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEE9get_classEjj:
  534|  7.43M|  {
  535|  7.43M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  7.43M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.28M, False: 6.14M]
  |  |  ------------------
  ------------------
  536|  6.14M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  7.43M|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_18ContextualSubtableIS1_E9EntryDataEE9get_entryEij:
  543|  9.82M|  {
  544|  9.82M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  9.82M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 187k, False: 9.63M]
  |  |  ------------------
  ------------------
  545|   187k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  9.82M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  9.82M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  9.82M|    unsigned int entry = states[state * nClasses + klass];
  551|  9.82M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  9.82M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  9.82M|    return entries[entry];
  554|  9.82M|  }
_ZN3AAT13ObsoleteTypes17wordOffsetToIndexIN2OT11HBGlyphID16EEEjjPKvPKT_:
  734|  14.8M|  {
  735|  14.8M|    return offsetToIndex (2 * offset, base, array);
  736|  14.8M|  }
_ZN3AAT13ObsoleteTypes13offsetToIndexIN2OT11HBGlyphID16EEEjjPKvPKT_:
  712|  14.9M|  {
  713|       |    /* https://github.com/harfbuzz/harfbuzz/issues/3483 */
  714|       |    /* If offset is less than base, return an offset that would
  715|       |     * result in an address half a 32bit address-space away,
  716|       |     * to make sure sanitize fails even on 32bit builds. */
  717|  14.9M|    if (unlikely (offset < unsigned ((const char *) array - (const char *) base)))
  ------------------
  |  |  259|  14.9M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.38M, False: 13.5M]
  |  |  ------------------
  ------------------
  718|  1.38M|      return INT_MAX / T::static_size;
  719|       |
  720|       |    /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
  721|  13.5M|    return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
  722|  14.9M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_16LigatureSubtableINS_13ObsoleteTypesEEEEEbRKT_:
   50|    654|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesEvE5driveINS_16LigatureSubtableIS1_E16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    654|  {
  785|    654|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 654, False: 0]
  ------------------
  786|    654|      buffer->clear_output ();
  787|       |
  788|    654|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    654|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 654, False: 0]
  |  Branch (790:43): [True: 0, False: 654]
  ------------------
  791|  1.58M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 1.58M, False: 0]
  ------------------
  792|  1.58M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  1.58M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 1.58M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  1.58M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 1.58M, False: 654]
  ------------------
  820|  1.58M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  1.58M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  1.58M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  1.58M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  1.58M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  1.58M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  1.58M|      const EntryT *wouldbe_entry;
  855|  1.58M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  1.58M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 590k, False: 994k]
  ------------------
  858|  1.58M|      &&
  859|       |	/* 2. */
  860|  1.58M|	(
  861|       |	  /* 2a. */
  862|   590k|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 78.3k, False: 512k]
  ------------------
  863|   590k|	||
  864|       |	  /* 2b. */
  865|   590k|	  (
  866|   512k|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 227k, False: 285k]
  ------------------
  867|   512k|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 99.9k, False: 127k]
  ------------------
  868|   512k|	  )
  869|   590k|	||
  870|       |	  /* 2c. */
  871|   590k|	  (
  ------------------
  |  Branch (871:4): [True: 12.4k, False: 399k]
  ------------------
  872|   412k|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|   412k|	  ,
  874|       |	    /* 2c'. */
  875|   412k|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 179k, False: 232k]
  ------------------
  876|   412k|	  &&
  877|       |	    /* 2c". */
  878|   412k|	    (
  879|   179k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 139k, False: 40.2k]
  ------------------
  880|   179k|	    &&
  881|   179k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 12.4k, False: 127k]
  ------------------
  882|   179k|	    )
  883|   412k|	  )
  884|   590k|	)
  885|  1.58M|      &&
  886|       |	/* 3. */
  887|  1.58M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 186k, False: 4.69k]
  ------------------
  888|  1.58M|      ;
  889|       |
  890|  1.58M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 1.39M, False: 186k]
  |  Branch (890:29): [True: 927k, False: 471k]
  |  Branch (890:57): [True: 926k, False: 261]
  ------------------
  891|   926k|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  1.58M|      c->transition (this, entry);
  894|       |
  895|  1.58M|      state = next_state;
  896|  1.58M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  1.58M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  1.58M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.58M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 654, False: 1.58M]
  ------------------
  899|    654|	break;
  900|       |
  901|  1.58M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 669k, False: 914k]
  |  Branch (901:54): [True: 4.78k, False: 909k]
  ------------------
  902|   674k|	(void) buffer->next_glyph ();
  903|  1.58M|    }
  904|       |
  905|    654|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 654, False: 0]
  ------------------
  906|    654|      buffer->sync ();
  907|    654|  }
_ZN3AAT13ObsoleteTypes13offsetToIndexIN2OT7IntTypeIjLj4EEEEEjjPKvPKT_:
  712|   860k|  {
  713|       |    /* https://github.com/harfbuzz/harfbuzz/issues/3483 */
  714|       |    /* If offset is less than base, return an offset that would
  715|       |     * result in an address half a 32bit address-space away,
  716|       |     * to make sure sanitize fails even on 32bit builds. */
  717|   860k|    if (unlikely (offset < unsigned ((const char *) array - (const char *) base)))
  ------------------
  |  |  259|   860k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 88.0k, False: 772k]
  |  |  ------------------
  ------------------
  718|  88.0k|      return INT_MAX / T::static_size;
  719|       |
  720|       |    /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
  721|   772k|    return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
  722|   860k|  }
_ZN3AAT13ObsoleteTypes17wordOffsetToIndexIN2OT7IntTypeItLj2EEEEEjjPKvPKT_:
  734|   381k|  {
  735|   381k|    return offsetToIndex (2 * offset, base, array);
  736|   381k|  }
_ZN3AAT13ObsoleteTypes13offsetToIndexIN2OT7IntTypeItLj2EEEEEjjPKvPKT_:
  712|   381k|  {
  713|       |    /* https://github.com/harfbuzz/harfbuzz/issues/3483 */
  714|       |    /* If offset is less than base, return an offset that would
  715|       |     * result in an address half a 32bit address-space away,
  716|       |     * to make sure sanitize fails even on 32bit builds. */
  717|   381k|    if (unlikely (offset < unsigned ((const char *) array - (const char *) base)))
  ------------------
  |  |  259|   381k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.2k, False: 365k]
  |  |  ------------------
  ------------------
  718|  16.2k|      return INT_MAX / T::static_size;
  719|       |
  720|       |    /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
  721|   365k|    return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
  722|   381k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_21NoncontextualSubtableINS_13ObsoleteTypesEEEEEbRKT_:
   50|  2.84k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_17InsertionSubtableINS_13ObsoleteTypesEEEEEbRKT_:
   50|  2.02k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|  2.02k|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEE5driveINS3_16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|  2.02k|  {
  785|  2.02k|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 2.02k, False: 0]
  ------------------
  786|  2.02k|      buffer->clear_output ();
  787|       |
  788|  2.02k|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|  2.02k|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 2.02k, False: 0]
  |  Branch (790:43): [True: 0, False: 2.02k]
  ------------------
  791|  1.76M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 1.76M, False: 12]
  ------------------
  792|  1.76M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  1.76M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 1.76M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  1.76M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 1.68M, False: 78.9k]
  ------------------
  820|  1.68M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  1.76M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  1.76M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  1.76M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  1.76M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  1.76M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  1.76M|      const EntryT *wouldbe_entry;
  855|  1.76M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  1.76M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 541k, False: 1.22M]
  ------------------
  858|  1.76M|      &&
  859|       |	/* 2. */
  860|  1.76M|	(
  861|       |	  /* 2a. */
  862|   541k|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 300k, False: 241k]
  ------------------
  863|   541k|	||
  864|       |	  /* 2b. */
  865|   541k|	  (
  866|   241k|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 24.7k, False: 216k]
  ------------------
  867|   241k|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 16.5k, False: 8.29k]
  ------------------
  868|   241k|	  )
  869|   541k|	||
  870|       |	  /* 2c. */
  871|   541k|	  (
  ------------------
  |  Branch (871:4): [True: 21.7k, False: 203k]
  ------------------
  872|   225k|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|   225k|	  ,
  874|       |	    /* 2c'. */
  875|   225k|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 54.0k, False: 170k]
  ------------------
  876|   225k|	  &&
  877|       |	    /* 2c". */
  878|   225k|	    (
  879|  54.0k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 21.8k, False: 32.1k]
  ------------------
  880|  54.0k|	    &&
  881|  54.0k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 21.7k, False: 62]
  ------------------
  882|  54.0k|	    )
  883|   225k|	  )
  884|   541k|	)
  885|  1.76M|      &&
  886|       |	/* 3. */
  887|  1.76M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 156k, False: 182k]
  ------------------
  888|  1.76M|      ;
  889|       |
  890|  1.76M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 1.60M, False: 156k]
  |  Branch (890:29): [True: 1.48M, False: 119k]
  |  Branch (890:57): [True: 1.41M, False: 78.5k]
  ------------------
  891|  1.41M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  1.76M|      c->transition (this, entry);
  894|       |
  895|  1.76M|      state = next_state;
  896|  1.76M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  1.76M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  1.76M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  1.76M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 85, False: 1.76M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 1.92k, False: 1.76M]
  ------------------
  899|  2.00k|	break;
  900|       |
  901|  1.76M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 1.10M, False: 654k]
  |  Branch (901:54): [True: 269k, False: 384k]
  ------------------
  902|  1.37M|	(void) buffer->next_glyph ();
  903|  1.76M|    }
  904|       |
  905|  2.02k|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 2.02k, False: 0]
  ------------------
  906|  2.02k|      buffer->sync ();
  907|  2.02k|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEE9get_classEjj:
  534|  1.68M|  {
  535|  1.68M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  1.68M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 69.6k, False: 1.61M]
  |  |  ------------------
  ------------------
  536|  1.61M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  1.68M|  }
_ZNK3AAT10StateTableINS_13ObsoleteTypesENS_17InsertionSubtableIS1_E9EntryDataEE9get_entryEij:
  543|  2.32M|  {
  544|  2.32M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  2.32M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 69.5k, False: 2.25M]
  |  |  ------------------
  ------------------
  545|  69.5k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  2.32M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  2.32M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  2.32M|    unsigned int entry = states[state * nClasses + klass];
  551|  2.32M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  2.32M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  2.32M|    return entries[entry];
  554|  2.32M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    228|  {
  559|    228|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    228|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    228|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|    911|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 216]
  |  |  |  Branch (259:47): [True: 228, False: 0]
  |  |  |  Branch (259:47): [True: 227, False: 1]
  |  |  |  Branch (259:47): [True: 216, False: 11]
  |  |  ------------------
  ------------------
  561|    228|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    228|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    216|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    216|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    216|    unsigned int num_classes = nClasses;
  568|    216|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    216|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 213]
  |  |  ------------------
  ------------------
  569|      3|      return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    213|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    213|    int min_state = 0;
  587|    213|    int max_state = 0;
  588|    213|    unsigned int num_entries = 0;
  589|       |
  590|    213|    int state_pos = 0;
  591|    213|    int state_neg = 0;
  592|    213|    unsigned int entry = 0;
  593|    554|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 554]
  |  Branch (593:37): [True: 387, False: 167]
  ------------------
  594|    387|    {
  595|    387|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 387]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    387|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 387, False: 0]
  ------------------
  617|    387|      {
  618|       |	/* Positive states. */
  619|    387|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    387|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29, False: 358]
  |  |  ------------------
  ------------------
  620|    387|				       max_state + 1,
  621|    387|				       row_stride)))
  622|     29|	  return_trace (false);
  ------------------
  |  |  349|     29|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     29|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    358|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 358]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    358|	{ /* Sweep new states. */
  626|    358|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    358|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 358]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    358|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    358|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    358|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 358]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  5.31M|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 5.31M, False: 358]
  ------------------
  632|  5.31M|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    358|	  state_pos = max_state + 1;
  634|    358|	}
  635|    358|      }
  636|       |
  637|    358|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    358|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 341]
  |  |  ------------------
  ------------------
  638|     17|	return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    341|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 341]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    341|      { /* Sweep new entries. */
  642|    341|	const Entry<Extra> *stop = &entries[num_entries];
  643|  1.39M|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 1.39M, False: 341]
  ------------------
  644|  1.39M|	{
  645|  1.39M|	  int newState = new_state (p->newState);
  646|  1.39M|	  min_state = hb_min (min_state, newState);
  647|  1.39M|	  max_state = hb_max (max_state, newState);
  648|  1.39M|	}
  649|    341|	entry = num_entries;
  650|    341|      }
  651|    341|    }
  652|       |
  653|    167|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 167]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    167|    return_trace (true);
  ------------------
  |  |  349|    167|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    167|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    213|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEE9new_stateEj:
  531|  4.82M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEE8sanitizeEP21hb_sanitize_context_tPj:
  558|    314|  {
  559|    314|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    314|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  560|    314|    if (unlikely (!(c->check_struct (this) &&
  ------------------
  |  |  259|  1.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 308]
  |  |  |  Branch (259:47): [True: 314, False: 0]
  |  |  |  Branch (259:47): [True: 313, False: 1]
  |  |  |  Branch (259:47): [True: 308, False: 5]
  |  |  ------------------
  ------------------
  561|    314|		    nClasses >= 4 /* Ensure pre-defined classes fit.  */ &&
  562|    314|		    classTable.sanitize (c, this)))) return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  563|       |
  564|    308|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  565|    308|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  566|       |
  567|    308|    unsigned int num_classes = nClasses;
  568|    308|    if (unlikely (hb_unsigned_mul_overflows (num_classes, states[0].static_size)))
  ------------------
  |  |  259|    308|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 298]
  |  |  ------------------
  ------------------
  569|     10|      return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|    298|    unsigned int row_stride = num_classes * states[0].static_size;
  571|       |
  572|       |    /* Apple 'kern' table has this peculiarity:
  573|       |     *
  574|       |     * "Because the stateTableOffset in the state table header is (strictly
  575|       |     * speaking) redundant, some 'kern' tables use it to record an initial
  576|       |     * state where that should not be StartOfText. To determine if this is
  577|       |     * done, calculate what the stateTableOffset should be. If it's different
  578|       |     * from the actual stateTableOffset, use it as the initial state."
  579|       |     *
  580|       |     * We implement this by calling the initial state zero, but allow *negative*
  581|       |     * states if the start state indeed was not the first state.  Since the code
  582|       |     * is shared, this will also apply to 'mort' table.  The 'kerx' / 'morx'
  583|       |     * tables are not affected since those address states by index, not offset.
  584|       |     */
  585|       |
  586|    298|    int min_state = 0;
  587|    298|    int max_state = 0;
  588|    298|    unsigned int num_entries = 0;
  589|       |
  590|    298|    int state_pos = 0;
  591|    298|    int state_neg = 0;
  592|    298|    unsigned int entry = 0;
  593|    846|    while (min_state < state_neg || state_pos <= max_state)
  ------------------
  |  Branch (593:12): [True: 0, False: 846]
  |  Branch (593:37): [True: 583, False: 263]
  ------------------
  594|    583|    {
  595|    583|      if (min_state < state_neg)
  ------------------
  |  Branch (595:11): [True: 0, False: 583]
  ------------------
  596|      0|      {
  597|       |	/* Negative states. */
  598|      0|	if (unlikely (hb_unsigned_mul_overflows (min_state, num_classes)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|      0|	if (unlikely (!c->check_range (&states[min_state * num_classes],
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  601|      0|				       -min_state,
  602|      0|				       row_stride)))
  603|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  604|      0|	if ((c->max_ops -= state_neg - min_state) <= 0)
  ------------------
  |  Branch (604:6): [True: 0, False: 0]
  ------------------
  605|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  606|      0|	{ /* Sweep new states. */
  607|      0|	  const HBUSHORT *stop = &states[min_state * num_classes];
  608|      0|	  if (unlikely (stop > states))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  609|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  610|      0|	  for (const HBUSHORT *p = states; stop < p; p--)
  ------------------
  |  Branch (610:37): [True: 0, False: 0]
  ------------------
  611|      0|	    num_entries = hb_max (num_entries, *(p - 1) + 1u);
  612|      0|	  state_neg = min_state;
  613|      0|	}
  614|      0|      }
  615|       |
  616|    583|      if (state_pos <= max_state)
  ------------------
  |  Branch (616:11): [True: 583, False: 0]
  ------------------
  617|    583|      {
  618|       |	/* Positive states. */
  619|    583|	if (unlikely (!c->check_range (states,
  ------------------
  |  |  259|    583|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25, False: 558]
  |  |  ------------------
  ------------------
  620|    583|				       max_state + 1,
  621|    583|				       row_stride)))
  622|     25|	  return_trace (false);
  ------------------
  |  |  349|     25|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     25|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  623|    558|	if ((c->max_ops -= max_state - state_pos + 1) <= 0)
  ------------------
  |  Branch (623:6): [True: 0, False: 558]
  ------------------
  624|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  625|    558|	{ /* Sweep new states. */
  626|    558|	  if (unlikely (hb_unsigned_mul_overflows ((max_state + 1), num_classes)))
  ------------------
  |  |  259|    558|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 558]
  |  |  ------------------
  ------------------
  627|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  628|    558|	  const HBUSHORT *stop = &states[(max_state + 1) * num_classes];
  629|    558|	  if (unlikely (stop < states))
  ------------------
  |  |  259|    558|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 558]
  |  |  ------------------
  ------------------
  630|      0|	    return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  631|  21.1M|	  for (const HBUSHORT *p = &states[state_pos * num_classes]; p < stop; p++)
  ------------------
  |  Branch (631:63): [True: 21.1M, False: 558]
  ------------------
  632|  21.1M|	    num_entries = hb_max (num_entries, *p + 1u);
  633|    558|	  state_pos = max_state + 1;
  634|    558|	}
  635|    558|      }
  636|       |
  637|    558|      if (unlikely (!c->check_array (entries, num_entries)))
  ------------------
  |  |  259|    558|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 548]
  |  |  ------------------
  ------------------
  638|     10|	return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  639|    548|      if ((c->max_ops -= num_entries - entry) <= 0)
  ------------------
  |  Branch (639:11): [True: 0, False: 548]
  ------------------
  640|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  641|    548|      { /* Sweep new entries. */
  642|    548|	const Entry<Extra> *stop = &entries[num_entries];
  643|  5.39M|	for (const Entry<Extra> *p = &entries[entry]; p < stop; p++)
  ------------------
  |  Branch (643:48): [True: 5.39M, False: 548]
  ------------------
  644|  5.39M|	{
  645|  5.39M|	  int newState = new_state (p->newState);
  646|  5.39M|	  min_state = hb_min (min_state, newState);
  647|  5.39M|	  max_state = hb_max (max_state, newState);
  648|  5.39M|	}
  649|    548|	entry = num_entries;
  650|    548|      }
  651|    548|    }
  652|       |
  653|    263|    if (num_entries_out)
  ------------------
  |  Branch (653:9): [True: 0, False: 263]
  ------------------
  654|      0|      *num_entries_out = num_entries;
  655|       |
  656|    263|    return_trace (true);
  ------------------
  |  |  349|    263|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    263|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  657|    298|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEE9new_stateEj:
  531|  10.1M|  { return Types::extended ? newState : ((int) newState - (int) stateArrayTable) / (int) nClasses; }
  ------------------
  |  Branch (531:12): [Folded - Ignored]
  ------------------
_ZNK3AAT6LookupIN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  415|    799|  {
  416|    799|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    799|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  417|    799|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (417:9): [True: 8, False: 791]
  ------------------
  418|    791|    switch (u.format) {
  419|    242|    case 0: return_trace (u.format0.sanitize (c));
  ------------------
  |  |  349|    242|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    242|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (419:5): [True: 242, False: 549]
  ------------------
  420|     89|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|     89|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (420:5): [True: 89, False: 702]
  ------------------
  421|     89|    case 4: return_trace (u.format4.sanitize (c));
  ------------------
  |  |  349|     89|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (421:5): [True: 89, False: 702]
  ------------------
  422|     78|    case 6: return_trace (u.format6.sanitize (c));
  ------------------
  |  |  349|     78|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     78|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (422:5): [True: 78, False: 713]
  ------------------
  423|     44|    case 8: return_trace (u.format8.sanitize (c));
  ------------------
  |  |  349|     44|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     44|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (423:5): [True: 44, False: 747]
  ------------------
  424|     91|    case 10: return_trace (u.format10.sanitize (c));
  ------------------
  |  |  349|     91|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     91|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (424:5): [True: 91, False: 700]
  ------------------
  425|    158|    default:return_trace (true);
  ------------------
  |  |  349|    158|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    158|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (425:5): [True: 158, False: 633]
  ------------------
  426|    791|    }
  427|    791|  }
_ZNK3AAT13LookupFormat0IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
   99|    242|  {
  100|    242|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    242|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  101|    242|    return_trace (arrayZ.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|    242|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    242|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  102|    242|  }
_ZNK3AAT13LookupFormat2IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  157|     89|  {
  158|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  159|     89|    return_trace (segments.sanitize (c));
  ------------------
  |  |  349|     89|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  160|     89|  }
_ZNK3AAT13LookupFormat4IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  228|     89|  {
  229|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  230|     89|    return_trace (segments.sanitize (c, this));
  ------------------
  |  |  349|     89|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  231|     89|  }
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  191|    313|  {
  192|    313|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    313|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  193|    313|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    313|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 313, False: 0]
  |  |  |  Branch (349:45): [True: 303, False: 10]
  |  |  |  Branch (349:45): [True: 294, False: 9]
  |  |  ------------------
  ------------------
  194|    313|		  first <= last &&
  195|    313|		  valuesZ.sanitize (c, base, last - first + 1));
  196|    313|  }
_ZNK3AAT13LookupFormat6IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  285|     78|  {
  286|     78|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     78|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  287|     78|    return_trace (entries.sanitize (c));
  ------------------
  |  |  349|     78|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     78|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  288|     78|  }
_ZNK3AAT13LookupFormat8IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  316|     44|  {
  317|     44|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     44|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  318|     44|    return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount));
  ------------------
  |  |  349|     87|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     44|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 43, False: 1]
  |  |  |  Branch (349:45): [True: 42, False: 1]
  |  |  ------------------
  ------------------
  319|     44|  }
_ZNK3AAT14LookupFormat10IN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  360|     91|  {
  361|     91|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     91|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  362|     91|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    361|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     91|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 90, False: 1]
  |  |  |  Branch (349:45): [True: 89, False: 1]
  |  |  |  Branch (349:45): [True: 88, False: 1]
  |  |  ------------------
  ------------------
  363|     91|		  valueSize <= 4 &&
  364|     91|		  valueArrayZ.sanitize (c, glyphCount * valueSize));
  365|     91|  }
_ZNK3AAT6LookupIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  429|    478|  {
  430|    478|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    478|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  431|    478|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (431:9): [True: 10, False: 468]
  ------------------
  432|    468|    switch (u.format) {
  433|     35|    case 0: return_trace (u.format0.sanitize (c, base));
  ------------------
  |  |  349|     35|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (433:5): [True: 35, False: 433]
  ------------------
  434|    124|    case 2: return_trace (u.format2.sanitize (c, base));
  ------------------
  |  |  349|    124|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    124|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (434:5): [True: 124, False: 344]
  ------------------
  435|    114|    case 4: return_trace (u.format4.sanitize (c, base));
  ------------------
  |  |  349|    114|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    114|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (435:5): [True: 114, False: 354]
  ------------------
  436|    118|    case 6: return_trace (u.format6.sanitize (c, base));
  ------------------
  |  |  349|    118|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    118|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (436:5): [True: 118, False: 350]
  ------------------
  437|     56|    case 8: return_trace (u.format8.sanitize (c, base));
  ------------------
  |  |  349|     56|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     56|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (437:5): [True: 56, False: 412]
  ------------------
  438|      3|    case 10: return_trace (false); /* We don't support format10 here currently. */
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (438:5): [True: 3, False: 465]
  ------------------
  439|     18|    default:return_trace (true);
  ------------------
  |  |  349|     18|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     18|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (439:5): [True: 18, False: 450]
  ------------------
  440|    468|    }
  441|    468|  }
_ZNK3AAT13LookupFormat0IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  104|     35|  {
  105|     35|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     35|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  106|     35|    return_trace (arrayZ.sanitize (c, c->get_num_glyphs (), base));
  ------------------
  |  |  349|     35|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  107|     35|  }
_ZNK3AAT13LookupFormat2IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  162|    124|  {
  163|    124|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    124|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  164|    124|    return_trace (segments.sanitize (c, base));
  ------------------
  |  |  349|    124|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    124|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  165|    124|  }
_ZNK3AAT19LookupSegmentSingleIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  132|    989|  {
  133|    989|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    989|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  134|    989|    return_trace (c->check_struct (this) && value.sanitize (c, base));
  ------------------
  |  |  349|  1.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    989|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 987, False: 2]
  |  |  |  Branch (349:45): [True: 911, False: 76]
  |  |  ------------------
  ------------------
  135|    989|  }
_ZNK3AAT13LookupFormat4IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  233|    114|  {
  234|    114|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    114|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  235|    114|    return_trace (segments.sanitize (c, this, base));
  ------------------
  |  |  349|    114|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    114|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  236|    114|  }
_ZNK3AAT18LookupSegmentArrayIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tSD_DpOT_:
  199|    350|  {
  200|    350|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    350|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  201|    350|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  1.38k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    350|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 350, False: 0]
  |  |  |  Branch (349:45): [True: 339, False: 11]
  |  |  |  Branch (349:45): [True: 282, False: 57]
  |  |  ------------------
  ------------------
  202|    350|		  first <= last &&
  203|    350|		  valuesZ.sanitize (c, base, last - first + 1, std::forward<Ts> (ds)...));
  204|    350|  }
_ZNK3AAT13LookupFormat6IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  290|    118|  {
  291|    118|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    118|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  292|    118|    return_trace (entries.sanitize (c, base));
  ------------------
  |  |  349|    118|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    118|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  293|    118|  }
_ZNK3AAT12LookupSingleIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  261|    354|  {
  262|    354|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    354|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  263|    354|    return_trace (c->check_struct (this) && value.sanitize (c, base));
  ------------------
  |  |  349|    708|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    354|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 354, False: 0]
  |  |  |  Branch (349:45): [True: 305, False: 49]
  |  |  ------------------
  ------------------
  264|    354|  }
_ZNK3AAT13LookupFormat8IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeEP21hb_sanitize_context_tPKv:
  321|     56|  {
  322|     56|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     56|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  323|     56|    return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount, base));
  ------------------
  |  |  349|    109|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     56|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 53, False: 3]
  |  |  |  Branch (349:45): [True: 45, False: 8]
  |  |  ------------------
  ------------------
  324|     56|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat0INS_18KerxSubTableHeaderEEEEEbRKT_:
   50|  1.27k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat1INS_18KerxSubTableHeaderEEEEEbRKT_:
   50|    633|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEEC2ERKNS_10StateTableIS1_S4_EEP11hb_buffer_tP9hb_face_t:
  780|    540|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEE5driveINS_19KerxSubTableFormat1INS_18KerxSubTableHeaderEE16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    540|  {
  785|    540|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 540]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|    540|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    540|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 0, False: 540]
  |  Branch (790:43): [True: 0, False: 0]
  ------------------
  791|  3.22M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 3.22M, False: 4]
  ------------------
  792|  3.22M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  3.22M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 3.22M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  3.22M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 3.22M, False: 536]
  ------------------
  820|  3.22M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  3.22M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  3.22M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  3.22M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  3.22M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  3.22M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  3.22M|      const EntryT *wouldbe_entry;
  855|  3.22M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  3.22M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 1.02M, False: 2.20M]
  ------------------
  858|  3.22M|      &&
  859|       |	/* 2. */
  860|  3.22M|	(
  861|       |	  /* 2a. */
  862|  1.02M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 68.7k, False: 952k]
  ------------------
  863|  1.02M|	||
  864|       |	  /* 2b. */
  865|  1.02M|	  (
  866|   952k|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 952k, False: 596]
  ------------------
  867|   952k|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 367k, False: 584k]
  ------------------
  868|   952k|	  )
  869|  1.02M|	||
  870|       |	  /* 2c. */
  871|  1.02M|	  (
  ------------------
  |  Branch (871:4): [True: 104k, False: 480k]
  ------------------
  872|   585k|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|   585k|	  ,
  874|       |	    /* 2c'. */
  875|   585k|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 208k, False: 377k]
  ------------------
  876|   585k|	  &&
  877|       |	    /* 2c". */
  878|   585k|	    (
  879|   208k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 196k, False: 12.0k]
  ------------------
  880|   208k|	    &&
  881|   208k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 104k, False: 91.2k]
  ------------------
  882|   208k|	    )
  883|   585k|	  )
  884|  1.02M|	)
  885|  3.22M|      &&
  886|       |	/* 3. */
  887|  3.22M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 397k, False: 143k]
  ------------------
  888|  3.22M|      ;
  889|       |
  890|  3.22M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 2.82M, False: 397k]
  |  Branch (890:29): [True: 1.08M, False: 1.74M]
  |  Branch (890:57): [True: 1.08M, False: 398]
  ------------------
  891|  1.08M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  3.22M|      c->transition (this, entry);
  894|       |
  895|  3.22M|      state = next_state;
  896|  3.22M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  3.22M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  3.22M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  3.22M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.22M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 536, False: 3.22M]
  ------------------
  899|    536|	break;
  900|       |
  901|  3.22M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 227k, False: 2.99M]
  |  Branch (901:54): [True: 120k, False: 2.87M]
  ------------------
  902|   347k|	(void) buffer->next_glyph ();
  903|  3.22M|    }
  904|       |
  905|    540|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 540]
  ------------------
  906|      0|      buffer->sync ();
  907|    540|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEE9get_classEjj:
  534|  3.22M|  {
  535|  3.22M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  3.22M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.83k, False: 3.22M]
  |  |  ------------------
  ------------------
  536|  3.22M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  3.22M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEE9get_entryEij:
  543|  4.35M|  {
  544|  4.35M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  4.35M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 295k, False: 4.05M]
  |  |  ------------------
  ------------------
  545|   295k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  4.35M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  4.35M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  4.35M|    unsigned int entry = states[state * nClasses + klass];
  551|  4.35M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  4.35M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  4.35M|    return entries[entry];
  554|  4.35M|  }
_ZN3AAT13ExtendedTypes17byteOffsetToIndexIN2OT7IntTypeIsLj2EEEEEjjPKvPKT_:
  757|  1.77M|  {
  758|  1.77M|    return offset / 2;
  759|  1.77M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat2INS_18KerxSubTableHeaderEEEEEbRKT_:
   50|  1.18k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT13ExtendedTypes13offsetToIndexIN2OT7IntTypeIsLj2EEEEEjjPKvPKT_:
  750|  4.85k|  {
  751|  4.85k|    return offset;
  752|  4.85k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEEEEEbRKT_:
   50|    682|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEEC2ERKNS_10StateTableIS1_S5_EEP11hb_buffer_tP9hb_face_t:
  780|    682|	      num_glyphs (face_->get_num_glyphs ()) {}
_ZN3AAT16StateTableDriverINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEE5driveINS4_16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    682|  {
  785|    682|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 682]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|    682|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    682|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 0, False: 682]
  |  Branch (790:43): [True: 0, False: 0]
  ------------------
  791|  4.23M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 4.23M, False: 5]
  ------------------
  792|  4.23M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  4.23M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 4.23M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  4.23M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 4.23M, False: 677]
  ------------------
  820|  4.23M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  4.23M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  4.23M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  4.23M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  4.23M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  4.23M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  4.23M|      const EntryT *wouldbe_entry;
  855|  4.23M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  4.23M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 2.04M, False: 2.19M]
  ------------------
  858|  4.23M|      &&
  859|       |	/* 2. */
  860|  4.23M|	(
  861|       |	  /* 2a. */
  862|  2.04M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 276k, False: 1.76M]
  ------------------
  863|  2.04M|	||
  864|       |	  /* 2b. */
  865|  2.04M|	  (
  866|  1.76M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.76M, False: 346]
  ------------------
  867|  1.76M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 102k, False: 1.66M]
  ------------------
  868|  1.76M|	  )
  869|  2.04M|	||
  870|       |	  /* 2c. */
  871|  2.04M|	  (
  ------------------
  |  Branch (871:4): [True: 491k, False: 1.17M]
  ------------------
  872|  1.66M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.66M|	  ,
  874|       |	    /* 2c'. */
  875|  1.66M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 562k, False: 1.10M]
  ------------------
  876|  1.66M|	  &&
  877|       |	    /* 2c". */
  878|  1.66M|	    (
  879|   562k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 547k, False: 14.8k]
  ------------------
  880|   562k|	    &&
  881|   562k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 491k, False: 55.4k]
  ------------------
  882|   562k|	    )
  883|  1.66M|	  )
  884|  2.04M|	)
  885|  4.23M|      &&
  886|       |	/* 3. */
  887|  4.23M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 657k, False: 213k]
  ------------------
  888|  4.23M|      ;
  889|       |
  890|  4.23M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 3.57M, False: 657k]
  |  Branch (890:29): [True: 1.74M, False: 1.83M]
  |  Branch (890:57): [True: 1.74M, False: 594]
  ------------------
  891|  1.74M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  4.23M|      c->transition (this, entry);
  894|       |
  895|  4.23M|      state = next_state;
  896|  4.23M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  4.23M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  4.23M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  4.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.23M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 677, False: 4.23M]
  ------------------
  899|    677|	break;
  900|       |
  901|  4.23M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 137k, False: 4.09M]
  |  Branch (901:54): [True: 288k, False: 3.80M]
  ------------------
  902|   426k|	(void) buffer->next_glyph ();
  903|  4.23M|    }
  904|       |
  905|    682|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 682]
  ------------------
  906|      0|      buffer->sync ();
  907|    682|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEE9get_classEjj:
  534|  4.23M|  {
  535|  4.23M|    if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
  ------------------
  |  |  259|  4.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.3k, False: 4.21M]
  |  |  ------------------
  ------------------
  536|  4.21M|    return (this+classTable).get_class (glyph_id, num_glyphs, 1);
  537|  4.23M|  }
_ZNK3AAT10StateTableINS_13ExtendedTypesENS_19KerxSubTableFormat4INS_18KerxSubTableHeaderEE9EntryDataEE9get_entryEij:
  543|  6.76M|  {
  544|  6.76M|    if (unlikely (klass >= nClasses))
  ------------------
  |  |  259|  6.76M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 273k, False: 6.49M]
  |  |  ------------------
  ------------------
  545|   273k|      klass = StateTable::CLASS_OUT_OF_BOUNDS;
  546|       |
  547|  6.76M|    const HBUSHORT *states = (this+stateArrayTable).arrayZ;
  548|  6.76M|    const Entry<Extra> *entries = (this+entryTable).arrayZ;
  549|       |
  550|  6.76M|    unsigned int entry = states[state * nClasses + klass];
  551|  6.76M|    DEBUG_MSG (APPLY, nullptr, "e%u", entry);
  ------------------
  |  |  232|  6.76M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  552|       |
  553|  6.76M|    return entries[entry];
  554|  6.76M|  }
_ZNK3AAT6LookupIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEjj:
  384|  1.17M|  {
  385|  1.17M|    switch (u.format) {
  386|    680|    case 0: return u.format0.get_value (glyph_id, num_glyphs);
  ------------------
  |  Branch (386:5): [True: 680, False: 1.17M]
  ------------------
  387|   255k|    case 2: return u.format2.get_value (glyph_id);
  ------------------
  |  Branch (387:5): [True: 255k, False: 920k]
  ------------------
  388|  39.3k|    case 4: return u.format4.get_value (glyph_id);
  ------------------
  |  Branch (388:5): [True: 39.3k, False: 1.13M]
  ------------------
  389|   144k|    case 6: return u.format6.get_value (glyph_id);
  ------------------
  |  Branch (389:5): [True: 144k, False: 1.03M]
  ------------------
  390|  75.5k|    case 8: return u.format8.get_value (glyph_id);
  ------------------
  |  Branch (390:5): [True: 75.5k, False: 1.10M]
  ------------------
  391|   660k|    default:return nullptr;
  ------------------
  |  Branch (391:5): [True: 660k, False: 515k]
  ------------------
  392|  1.17M|    }
  393|  1.17M|  }
_ZNK3AAT13LookupFormat0IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEjj:
   93|    680|  {
   94|    680|    if (unlikely (glyph_id >= num_glyphs)) return nullptr;
  ------------------
  |  |  259|    680|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 350, False: 330]
  |  |  ------------------
  ------------------
   95|    330|    return &arrayZ[glyph_id];
   96|    680|  }
_ZNK3AAT13LookupFormat2IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEj:
  151|   255k|  {
  152|   255k|    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
  153|   255k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (153:12): [True: 254k, False: 536]
  ------------------
  154|   255k|  }
_ZNK3AAT19LookupSegmentSingleIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE3cmpEj:
  124|   255k|  { return g < first ? -1 : g <= last ? 0 : +1 ; }
  ------------------
  |  Branch (124:12): [True: 484, False: 254k]
  |  Branch (124:29): [True: 254k, False: 0]
  ------------------
_ZNK3AAT13LookupFormat4IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEj:
  222|  39.3k|  {
  223|  39.3k|    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
  224|  39.3k|    return v ? v->get_value (glyph_id, this) : nullptr;
  ------------------
  |  Branch (224:12): [True: 39.0k, False: 298]
  ------------------
  225|  39.3k|  }
_ZNK3AAT18LookupSegmentArrayIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE3cmpEj:
  188|  78.1k|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (188:12): [True: 39.0k, False: 39.0k]
  |  Branch (188:29): [True: 39.0k, False: 0]
  ------------------
_ZNK3AAT18LookupSegmentArrayIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEjPKv:
  183|  39.0k|  {
  184|  39.0k|    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
  ------------------
  |  Branch (184:12): [True: 39.0k, False: 0]
  |  Branch (184:33): [True: 39.0k, False: 0]
  ------------------
  185|  39.0k|  }
_ZNK3AAT13LookupFormat6IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEj:
  279|   144k|  {
  280|   144k|    const LookupSingle<T> *v = entries.bsearch (glyph_id);
  281|   144k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (281:12): [True: 143k, False: 522]
  ------------------
  282|   144k|  }
_ZNK3AAT12LookupSingleIN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE3cmpEj:
  253|   255k|  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
_ZNK3AAT13LookupFormat8IN2OT8OffsetToINS1_7ArrayOfINS_6AnchorENS1_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE9get_valueEj:
  310|  75.5k|  {
  311|  75.5k|    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
  ------------------
  |  Branch (311:12): [True: 75.1k, False: 402]
  |  Branch (311:38): [True: 73.6k, False: 1.47k]
  ------------------
  312|  73.6k|	   &valueArrayZ[glyph_id - firstGlyph] : nullptr;
  313|  75.5k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat6INS_18KerxSubTableHeaderEEEEEbRKT_:
   50|  4.58k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZNK3AAT6LookupIN2OT7IntTypeIjLj4EEEE17get_value_or_nullEjj:
  396|   111k|  {
  397|   111k|    switch (u.format) {
  398|       |      /* Format 10 cannot return a pointer. */
  399|  74.5k|      case 10: return u.format10.get_value_or_null (glyph_id);
  ------------------
  |  Branch (399:7): [True: 74.5k, False: 36.9k]
  ------------------
  400|  36.9k|      default:
  ------------------
  |  Branch (400:7): [True: 36.9k, False: 74.5k]
  ------------------
  401|  36.9k|      const T *v = get_value (glyph_id, num_glyphs);
  402|  36.9k|      return v ? *v : Null (T);
  ------------------
  |  |  124|  70.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (402:14): [True: 3.40k, False: 33.5k]
  ------------------
  403|   111k|    }
  404|   111k|  }
_ZNK3AAT14LookupFormat10IN2OT7IntTypeIjLj4EEEE17get_value_or_nullEj:
  345|  74.5k|  {
  346|  74.5k|    if (!(firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount))
  ------------------
  |  Branch (346:11): [True: 71.0k, False: 3.57k]
  |  Branch (346:37): [True: 30.1k, False: 40.8k]
  ------------------
  347|  44.4k|      return Null (T);
  ------------------
  |  |  124|  44.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  348|       |
  349|  30.1k|    const HBUINT8 *p = &valueArrayZ[(glyph_id - firstGlyph) * valueSize];
  350|       |
  351|  30.1k|    unsigned int v = 0;
  352|  30.1k|    unsigned int count = valueSize;
  353|   135k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (353:30): [True: 105k, False: 30.1k]
  ------------------
  354|   105k|      v = (v << 8) | *p++;
  355|       |
  356|  30.1k|    return v;
  357|  74.5k|  }
_ZNK3AAT6LookupIN2OT7IntTypeIjLj4EEEE9get_valueEjj:
  384|  36.9k|  {
  385|  36.9k|    switch (u.format) {
  386|  9.47k|    case 0: return u.format0.get_value (glyph_id, num_glyphs);
  ------------------
  |  Branch (386:5): [True: 9.47k, False: 27.5k]
  ------------------
  387|  3.70k|    case 2: return u.format2.get_value (glyph_id);
  ------------------
  |  Branch (387:5): [True: 3.70k, False: 33.2k]
  ------------------
  388|  3.05k|    case 4: return u.format4.get_value (glyph_id);
  ------------------
  |  Branch (388:5): [True: 3.05k, False: 33.9k]
  ------------------
  389|  2.57k|    case 6: return u.format6.get_value (glyph_id);
  ------------------
  |  Branch (389:5): [True: 2.57k, False: 34.4k]
  ------------------
  390|  13.7k|    case 8: return u.format8.get_value (glyph_id);
  ------------------
  |  Branch (390:5): [True: 13.7k, False: 23.2k]
  ------------------
  391|  4.47k|    default:return nullptr;
  ------------------
  |  Branch (391:5): [True: 4.47k, False: 32.5k]
  ------------------
  392|  36.9k|    }
  393|  36.9k|  }
_ZNK3AAT13LookupFormat0IN2OT7IntTypeIjLj4EEEE9get_valueEjj:
   93|  9.47k|  {
   94|  9.47k|    if (unlikely (glyph_id >= num_glyphs)) return nullptr;
  ------------------
  |  |  259|  9.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8.78k, False: 684]
  |  |  ------------------
  ------------------
   95|    684|    return &arrayZ[glyph_id];
   96|  9.47k|  }
_ZNK3AAT13LookupFormat2IN2OT7IntTypeIjLj4EEEE9get_valueEj:
  151|  3.70k|  {
  152|  3.70k|    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
  153|  3.70k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (153:12): [True: 1.05k, False: 2.64k]
  ------------------
  154|  3.70k|  }
_ZNK3AAT19LookupSegmentSingleIN2OT7IntTypeIjLj4EEEE3cmpEj:
  124|  2.45k|  { return g < first ? -1 : g <= last ? 0 : +1 ; }
  ------------------
  |  Branch (124:12): [True: 1.02k, False: 1.42k]
  |  Branch (124:29): [True: 1.05k, False: 368]
  ------------------
_ZNK3AAT13LookupFormat4IN2OT7IntTypeIjLj4EEEE9get_valueEj:
  222|  3.05k|  {
  223|  3.05k|    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
  224|  3.05k|    return v ? v->get_value (glyph_id, this) : nullptr;
  ------------------
  |  Branch (224:12): [True: 695, False: 2.35k]
  ------------------
  225|  3.05k|  }
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEE3cmpEj:
  188|  2.29k|  { return g < first ? -1 : g <= last ? 0 : +1; }
  ------------------
  |  Branch (188:12): [True: 837, False: 1.45k]
  |  Branch (188:29): [True: 695, False: 763]
  ------------------
_ZNK3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEE9get_valueEjPKv:
  183|    695|  {
  184|    695|    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
  ------------------
  |  Branch (184:12): [True: 695, False: 0]
  |  Branch (184:33): [True: 695, False: 0]
  ------------------
  185|    695|  }
_ZNK3AAT13LookupFormat6IN2OT7IntTypeIjLj4EEEE9get_valueEj:
  279|  2.57k|  {
  280|  2.57k|    const LookupSingle<T> *v = entries.bsearch (glyph_id);
  281|  2.57k|    return v ? &v->value : nullptr;
  ------------------
  |  Branch (281:12): [True: 614, False: 1.95k]
  ------------------
  282|  2.57k|  }
_ZNK3AAT12LookupSingleIN2OT7IntTypeIjLj4EEEE3cmpEj:
  253|  5.39k|  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
_ZNK3AAT13LookupFormat8IN2OT7IntTypeIjLj4EEEE9get_valueEj:
  310|  13.7k|  {
  311|  13.7k|    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ?
  ------------------
  |  Branch (311:12): [True: 6.01k, False: 7.70k]
  |  Branch (311:38): [True: 356, False: 5.65k]
  ------------------
  312|  13.3k|	   &valueArrayZ[glyph_id - firstGlyph] : nullptr;
  313|  13.7k|  }
_ZNK3AAT6LookupIN2OT7IntTypeItLj2EEEE17get_value_or_nullEjj:
  396|  75.0k|  {
  397|  75.0k|    switch (u.format) {
  398|       |      /* Format 10 cannot return a pointer. */
  399|  56.4k|      case 10: return u.format10.get_value_or_null (glyph_id);
  ------------------
  |  Branch (399:7): [True: 56.4k, False: 18.5k]
  ------------------
  400|  18.5k|      default:
  ------------------
  |  Branch (400:7): [True: 18.5k, False: 56.4k]
  ------------------
  401|  18.5k|      const T *v = get_value (glyph_id, num_glyphs);
  402|  18.5k|      return v ? *v : Null (T);
  ------------------
  |  |  124|  34.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (402:14): [True: 2.60k, False: 15.9k]
  ------------------
  403|  75.0k|    }
  404|  75.0k|  }
_ZNK3AAT14LookupFormat10IN2OT7IntTypeItLj2EEEE17get_value_or_nullEj:
  345|  56.4k|  {
  346|  56.4k|    if (!(firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount))
  ------------------
  |  Branch (346:11): [True: 53.3k, False: 3.11k]
  |  Branch (346:37): [True: 21.2k, False: 32.0k]
  ------------------
  347|  35.1k|      return Null (T);
  ------------------
  |  |  124|  35.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  348|       |
  349|  21.2k|    const HBUINT8 *p = &valueArrayZ[(glyph_id - firstGlyph) * valueSize];
  350|       |
  351|  21.2k|    unsigned int v = 0;
  352|  21.2k|    unsigned int count = valueSize;
  353|   103k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (353:30): [True: 82.4k, False: 21.2k]
  ------------------
  354|  82.4k|      v = (v << 8) | *p++;
  355|       |
  356|  21.2k|    return v;
  357|  56.4k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchIN2OT6KernOTEEEbRKT_:
   50|  2.05k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEEEEEbRKT_:
   50|    965|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT13ObsoleteTypes17byteOffsetToIndexIN2OT7IntTypeIsLj2EEEEEjjPKvPKT_:
  727|  1.34M|  {
  728|  1.34M|    return offsetToIndex (offset, base, array);
  729|  1.34M|  }
_ZN3AAT13ObsoleteTypes13offsetToIndexIN2OT7IntTypeIsLj2EEEEEjjPKvPKT_:
  712|  1.69M|  {
  713|       |    /* https://github.com/harfbuzz/harfbuzz/issues/3483 */
  714|       |    /* If offset is less than base, return an offset that would
  715|       |     * result in an address half a 32bit address-space away,
  716|       |     * to make sure sanitize fails even on 32bit builds. */
  717|  1.69M|    if (unlikely (offset < unsigned ((const char *) array - (const char *) base)))
  ------------------
  |  |  259|  1.69M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 110k, False: 1.58M]
  |  |  ------------------
  ------------------
  718|   110k|      return INT_MAX / T::static_size;
  719|       |
  720|       |    /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
  721|  1.58M|    return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
  722|  1.69M|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEEEEEbRKT_:
   50|    854|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZNK3AAT10ClassTableIN2OT7IntTypeItLj2EEEE9get_classEjjj:
  684|   692k|  {
  685|   692k|    return get_class (glyph_id, outOfRange);
  686|   692k|  }
_ZNK3AAT10ClassTableIN2OT7IntTypeItLj2EEEE9get_classEjj:
  677|   692k|  {
  678|   692k|    unsigned int i = glyph_id - firstGlyph;
  679|   692k|    return i >= classArray.len ? outOfRange : classArray.arrayZ[i];
  ------------------
  |  Branch (679:12): [True: 516k, False: 175k]
  ------------------
  680|   692k|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchIN2OT7KernAATEEEbRKT_:
   50|  2.35k|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEEEEEbRKT_:
   50|    607|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEEEEEbRKT_:
   50|    732|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT16StateTableDriverINS_13ObsoleteTypesEvE5driveINS_19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE16driver_context_tEEEvPT_PNS_22hb_aat_apply_context_tE:
  784|    633|  {
  785|    633|    if (!c->in_place)
  ------------------
  |  Branch (785:9): [True: 0, False: 633]
  ------------------
  786|      0|      buffer->clear_output ();
  787|       |
  788|    633|    int state = StateTableT::STATE_START_OF_TEXT;
  789|       |    // If there's only one range, we already checked the flag.
  790|    633|    auto *last_range = ac->range_flags && (ac->range_flags->length > 1) ? &(*ac->range_flags)[0] : nullptr;
  ------------------
  |  Branch (790:24): [True: 0, False: 633]
  |  Branch (790:43): [True: 0, False: 0]
  ------------------
  791|  4.15M|    for (buffer->idx = 0; buffer->successful;)
  ------------------
  |  Branch (791:27): [True: 4.15M, False: 3]
  ------------------
  792|  4.15M|    {
  793|       |      /* This block is copied in NoncontextualSubtable::apply. Keep in sync. */
  794|  4.15M|      if (last_range)
  ------------------
  |  Branch (794:11): [True: 0, False: 4.15M]
  ------------------
  795|      0|      {
  796|      0|	auto *range = last_range;
  797|      0|	if (buffer->idx < buffer->len)
  ------------------
  |  Branch (797:6): [True: 0, False: 0]
  ------------------
  798|      0|	{
  799|      0|	  unsigned cluster = buffer->cur().cluster;
  800|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (800:11): [True: 0, False: 0]
  ------------------
  801|      0|	    range--;
  802|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (802:11): [True: 0, False: 0]
  ------------------
  803|      0|	    range++;
  804|       |
  805|       |
  806|      0|	  last_range = range;
  807|      0|	}
  808|      0|	if (!(range->flags & ac->subtable_flags))
  ------------------
  |  Branch (808:6): [True: 0, False: 0]
  ------------------
  809|      0|	{
  810|      0|	  if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|	    break;
  812|       |
  813|      0|	  state = StateTableT::STATE_START_OF_TEXT;
  814|      0|	  (void) buffer->next_glyph ();
  815|      0|	  continue;
  816|      0|	}
  817|      0|      }
  818|       |
  819|  4.15M|      unsigned int klass = buffer->idx < buffer->len ?
  ------------------
  |  Branch (819:28): [True: 4.15M, False: 630]
  ------------------
  820|  4.15M|			   machine.get_class (buffer->cur().codepoint, num_glyphs) :
  821|  4.15M|			   (unsigned) StateTableT::CLASS_END_OF_TEXT;
  822|  4.15M|      DEBUG_MSG (APPLY, nullptr, "c%u at %u", klass, buffer->idx);
  ------------------
  |  |  232|  4.15M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  823|  4.15M|      const EntryT &entry = machine.get_entry (state, klass);
  824|  4.15M|      const int next_state = machine.new_state (entry.newState);
  825|       |
  826|       |      /* Conditions under which it's guaranteed safe-to-break before current glyph:
  827|       |       *
  828|       |       * 1. There was no action in this transition; and
  829|       |       *
  830|       |       * 2. If we break before current glyph, the results will be the same. That
  831|       |       *    is guaranteed if:
  832|       |       *
  833|       |       *    2a. We were already in start-of-text state; or
  834|       |       *
  835|       |       *    2b. We are epsilon-transitioning to start-of-text state; or
  836|       |       *
  837|       |       *    2c. Starting from start-of-text state seeing current glyph:
  838|       |       *
  839|       |       *        2c'. There won't be any actions; and
  840|       |       *
  841|       |       *        2c". We would end up in the same state that we were going to end up
  842|       |       *             in now, including whether epsilon-transitioning.
  843|       |       *
  844|       |       *    and
  845|       |       *
  846|       |       * 3. If we break before current glyph, there won't be any end-of-text action
  847|       |       *    after previous glyph.
  848|       |       *
  849|       |       * This triples the transitions we need to look up, but is worth returning
  850|       |       * granular unsafe-to-break results. See eg.:
  851|       |       *
  852|       |       *   https://github.com/harfbuzz/harfbuzz/issues/2860
  853|       |       */
  854|  4.15M|      const EntryT *wouldbe_entry;
  855|  4.15M|      bool safe_to_break =
  856|       |	/* 1. */
  857|  4.15M|	!c->is_actionable (this, entry)
  ------------------
  |  Branch (857:2): [True: 2.23M, False: 1.91M]
  ------------------
  858|  4.15M|      &&
  859|       |	/* 2. */
  860|  4.15M|	(
  861|       |	  /* 2a. */
  862|  2.23M|	  state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (862:4): [True: 571k, False: 1.66M]
  ------------------
  863|  2.23M|	||
  864|       |	  /* 2b. */
  865|  2.23M|	  (
  866|  1.66M|	    (entry.flags & context_t::DontAdvance) &&
  ------------------
  |  Branch (866:6): [True: 1.55M, False: 107k]
  ------------------
  867|  1.66M|	    next_state == StateTableT::STATE_START_OF_TEXT
  ------------------
  |  Branch (867:6): [True: 427k, False: 1.13M]
  ------------------
  868|  1.66M|	  )
  869|  2.23M|	||
  870|       |	  /* 2c. */
  871|  2.23M|	  (
  ------------------
  |  Branch (871:4): [True: 262k, False: 974k]
  ------------------
  872|  1.23M|	    wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass)
  873|  1.23M|	  ,
  874|       |	    /* 2c'. */
  875|  1.23M|	    !c->is_actionable (this, *wouldbe_entry)
  ------------------
  |  Branch (875:6): [True: 390k, False: 847k]
  ------------------
  876|  1.23M|	  &&
  877|       |	    /* 2c". */
  878|  1.23M|	    (
  879|   390k|	      next_state == machine.new_state (wouldbe_entry->newState)
  ------------------
  |  Branch (879:8): [True: 389k, False: 552]
  ------------------
  880|   390k|	    &&
  881|   390k|	      (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance)
  ------------------
  |  Branch (881:8): [True: 262k, False: 127k]
  ------------------
  882|   390k|	    )
  883|  1.23M|	  )
  884|  2.23M|	)
  885|  4.15M|      &&
  886|       |	/* 3. */
  887|  4.15M|	!c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT))
  ------------------
  |  Branch (887:2): [True: 1.04M, False: 220k]
  ------------------
  888|  4.15M|      ;
  889|       |
  890|  4.15M|      if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len)
  ------------------
  |  Branch (890:11): [True: 3.11M, False: 1.04M]
  |  Branch (890:29): [True: 1.43M, False: 1.67M]
  |  Branch (890:57): [True: 1.43M, False: 212]
  ------------------
  891|  1.43M|	buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1);
  892|       |
  893|  4.15M|      c->transition (this, entry);
  894|       |
  895|  4.15M|      state = next_state;
  896|  4.15M|      DEBUG_MSG (APPLY, nullptr, "s%d", state);
  ------------------
  |  |  232|  4.15M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  897|       |
  898|  4.15M|      if (buffer->idx == buffer->len || unlikely (!buffer->successful))
  ------------------
  |  |  259|  4.15M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.15M]
  |  |  ------------------
  ------------------
  |  Branch (898:11): [True: 630, False: 4.15M]
  ------------------
  899|    630|	break;
  900|       |
  901|  4.15M|      if (!(entry.flags & context_t::DontAdvance) || buffer->max_ops-- <= 0)
  ------------------
  |  Branch (901:11): [True: 392k, False: 3.75M]
  |  Branch (901:54): [True: 170k, False: 3.58M]
  ------------------
  902|   563k|	(void) buffer->next_glyph ();
  903|  4.15M|    }
  904|       |
  905|    633|    if (!c->in_place)
  ------------------
  |  Branch (905:9): [True: 0, False: 633]
  ------------------
  906|      0|      buffer->sync ();
  907|    633|  }
_ZN3AAT22hb_aat_apply_context_t8dispatchINS_19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEEEEEbRKT_:
   50|    455|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZN3AAT22hb_aat_apply_context_t8dispatchIN2OT19KernSubTableFormat3INS2_21KernAATSubTableHeaderEEEEEbRKT_:
   50|    426|  return_t dispatch (const T &obj) { return obj.apply (this); }
_ZNK3AAT10ClassTableIN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  688|    306|  {
  689|    306|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    306|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  690|    306|    return_trace (c->check_struct (this) && classArray.sanitize (c));
  ------------------
  |  |  349|    609|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    306|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 303, False: 3]
  |  |  |  Branch (349:45): [True: 295, False: 8]
  |  |  ------------------
  ------------------
  691|    306|  }

_ZNK3AAT4feat17get_feature_typesEjPjP28hb_aat_layout_feature_type_t:
  169|  33.3k|  {
  170|  33.3k|    if (count)
  ------------------
  |  Branch (170:9): [True: 33.3k, False: 0]
  ------------------
  171|  33.3k|    {
  172|  33.3k|      + namesZ.as_array (featureNameCount).sub_array (start_offset, count)
  173|  33.3k|      | hb_map (&FeatureName::get_feature_type)
  174|  33.3k|      | hb_sink (hb_array (features, *count))
  175|  33.3k|      ;
  176|  33.3k|    }
  177|  33.3k|    return featureNameCount;
  178|  33.3k|  }
_ZNK3AAT11FeatureName16get_feature_typeEv:
  128|     18|  { return (hb_aat_layout_feature_type_t) (unsigned int) feature; }
_ZNK3AAT4feat19get_feature_name_idE28hb_aat_layout_feature_type_t:
  187|  33.3k|  { return get_feature (feature).get_feature_name_id (); }
_ZNK3AAT4feat11get_featureE28hb_aat_layout_feature_type_t:
  184|  66.6k|  { return namesZ.bsearch (featureNameCount, feature_type); }
_ZNK3AAT11FeatureName3cmpE28hb_aat_layout_feature_type_t:
   81|     92|  { return (int) key - (int) feature; }
_ZNK3AAT11FeatureName19get_feature_name_idEv:
  130|  33.3k|  hb_ot_name_id_t get_feature_name_id () const { return nameIndex; }
_ZNK3AAT4feat18get_selector_infosE28hb_aat_layout_feature_type_tjPjP37hb_aat_layout_feature_selector_info_tS2_:
  194|  33.3k|  {
  195|  33.3k|    return get_feature (feature_type).get_selector_infos (start_offset, selectors_count, selectors,
  196|  33.3k|							  default_index, this);
  197|  33.3k|  }
_ZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS1_PKv:
  102|  33.3k|  {
  103|  33.3k|    hb_array_t< const SettingName> settings_table = (base+settingTableZ).as_array (nSettings);
  104|       |
  105|  33.3k|    static_assert (Index::NOT_FOUND_INDEX == HB_AAT_LAYOUT_NO_SELECTOR_INDEX, "");
  106|       |
  107|  33.3k|    hb_aat_layout_feature_selector_t default_selector = HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID;
  108|  33.3k|    unsigned int default_index = Index::NOT_FOUND_INDEX;
  109|  33.3k|    if (featureFlags & Exclusive)
  ------------------
  |  Branch (109:9): [True: 3, False: 33.3k]
  ------------------
  110|      3|    {
  111|      3|      default_index = (featureFlags & NotDefault) ? featureFlags & IndexMask : 0;
  ------------------
  |  Branch (111:23): [True: 1, False: 2]
  ------------------
  112|      3|      default_selector = settings_table[default_index].get_selector ();
  113|      3|    }
  114|  33.3k|    if (pdefault_index)
  ------------------
  |  Branch (114:9): [True: 33.3k, False: 0]
  ------------------
  115|  33.3k|      *pdefault_index = default_index;
  116|       |
  117|  33.3k|    if (selectors_count)
  ------------------
  |  Branch (117:9): [True: 33.3k, False: 0]
  ------------------
  118|  33.3k|    {
  119|  33.3k|      + settings_table.sub_array (start_offset, selectors_count)
  120|  33.3k|      | hb_map ([=] (const SettingName& setting) { return setting.get_info (default_selector); })
  121|  33.3k|      | hb_sink (hb_array (selectors, *selectors_count))
  122|  33.3k|      ;
  123|  33.3k|    }
  124|  33.3k|    return settings_table.length;
  125|  33.3k|  }
_ZNK3AAT11SettingName12get_selectorEv:
   48|      3|  { return (hb_aat_layout_feature_selector_t) (unsigned) setting; }
_ZZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS1_PKvENKUlRKNS_11SettingNameEE_clES8_:
  120|      2|      | hb_map ([=] (const SettingName& setting) { return setting.get_info (default_selector); })
_ZNK3AAT11SettingName8get_infoE32hb_aat_layout_feature_selector_t:
   51|      2|  {
   52|      2|    return {
   53|      2|      nameIndex,
   54|      2|      (hb_aat_layout_feature_selector_t) (unsigned int) setting,
   55|      2|      default_selector == HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID
  ------------------
  |  Branch (55:7): [True: 1, False: 1]
  ------------------
   56|      2|	? (hb_aat_layout_feature_selector_t) (setting + 1)
   57|      2|	: default_selector,
   58|      2|      0
   59|      2|    };
   60|      2|  }
_ZNK3AAT4feat8sanitizeEP21hb_sanitize_context_t:
  200|     36|  {
  201|     36|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     36|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  202|     36|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    140|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 35, False: 1]
  |  |  |  Branch (349:45): [True: 33, False: 2]
  |  |  |  Branch (349:45): [True: 20, False: 13]
  |  |  ------------------
  ------------------
  203|     36|			  version.major == 1 &&
  204|     36|			  namesZ.sanitize (c, featureNameCount, this)));
  205|     36|  }
_ZNK3AAT11FeatureName8sanitizeEP21hb_sanitize_context_tPKv:
  138|    448|  {
  139|    448|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    448|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  140|    448|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    896|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    448|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 448, False: 0]
  |  |  |  Branch (349:45): [True: 440, False: 8]
  |  |  ------------------
  ------------------
  141|    448|			  (base+settingTableZ).sanitize (c, nSettings)));
  142|    448|  }

_ZNK3AAT4kerx8has_dataEv:
  982|  49.3k|  bool has_data () const { return version; }
_ZNK3AAT9KerxTableINS_4kerxEE8sanitizeEP21hb_sanitize_context_t:
  937|  1.67k|  {
  938|  1.67k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.67k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  939|  1.67k|    if (unlikely (!thiz()->version.sanitize (c) ||
  ------------------
  |  |  259|  6.69k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 1.66k]
  |  |  |  Branch (259:47): [True: 1, False: 1.67k]
  |  |  |  Branch (259:47): [True: 3, False: 1.67k]
  |  |  |  Branch (259:47): [True: 2, False: 1.66k]
  |  |  ------------------
  ------------------
  940|  1.67k|		  (unsigned) thiz()->version < (unsigned) T::minVersion ||
  941|  1.67k|		  !thiz()->tableCount.sanitize (c)))
  942|      6|      return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  943|       |
  944|  1.66k|    typedef typename T::SubTable SubTable;
  945|       |
  946|  1.66k|    const SubTable *st = &thiz()->firstSubTable;
  947|  1.66k|    unsigned int count = thiz()->tableCount;
  948|  2.98k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (948:30): [True: 1.70k, False: 1.28k]
  ------------------
  949|  1.70k|    {
  950|  1.70k|      if (unlikely (!st->u.header.sanitize (c)))
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36, False: 1.66k]
  |  |  ------------------
  ------------------
  951|     36|	return_trace (false);
  ------------------
  |  |  349|     36|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  952|       |      /* OpenType kern table has 2-byte subtable lengths.  That's limiting.
  953|       |       * MS implementation also only supports one subtable, of format 0,
  954|       |       * anyway.  Certain versions of some fonts, like Calibry, contain
  955|       |       * kern subtable that exceeds 64kb.  Looks like, the subtable length
  956|       |       * is simply ignored.  Which makes sense.  It's only needed if you
  957|       |       * have multiple subtables.  To handle such fonts, we just ignore
  958|       |       * the length for the last subtable. */
  959|  1.66k|      hb_sanitize_with_object_t with (c, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (959:42): [True: 336, False: 1.33k]
  ------------------
  960|       |
  961|  1.66k|      if (unlikely (!st->sanitize (c)))
  ------------------
  |  |  259|  1.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 348, False: 1.32k]
  |  |  ------------------
  ------------------
  962|    348|	return_trace (false);
  ------------------
  |  |  349|    348|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    348|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  963|       |
  964|  1.32k|      st = &StructAfter<SubTable> (*st);
  965|  1.32k|    }
  966|       |
  967|  1.28k|    return_trace (true);
  ------------------
  |  |  349|  1.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  968|  1.66k|  }
_ZNK3AAT9KerxTableINS_4kerxEE4thizEv:
  820|  30.1k|  const T* thiz () const { return static_cast<const T *> (this); }
_ZNK3AAT18KerxSubTableHeader8sanitizeEP21hb_sanitize_context_t:
  752|  3.37k|  {
  753|  3.37k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.37k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  754|  3.37k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  3.37k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  755|  3.37k|  }
_ZNK3AAT12KerxSubTable8get_sizeEv:
  769|  12.1k|  unsigned int get_size () const { return u.header.length; }
_ZNK3AAT12KerxSubTable8sanitizeEP21hb_sanitize_context_t:
  788|  1.66k|  {
  789|  1.66k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.66k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  790|  1.66k|    if (!u.header.sanitize (c) ||
  ------------------
  |  Branch (790:9): [True: 6, False: 1.66k]
  ------------------
  791|  1.66k|	u.header.length <= u.header.static_size ||
  ------------------
  |  Branch (791:2): [True: 3, False: 1.65k]
  ------------------
  792|  1.66k|	!c->check_range (this, u.header.length))
  ------------------
  |  Branch (792:2): [True: 55, False: 1.60k]
  ------------------
  793|     64|      return_trace (false);
  ------------------
  |  |  349|     64|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     64|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  794|       |
  795|  1.60k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  1.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  796|  1.66k|  }
_ZNK3AAT12KerxSubTable8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
  774|  1.60k|  {
  775|  1.60k|    unsigned int subtable_type = get_type ();
  776|  1.60k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  1.60k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  777|  1.60k|    switch (subtable_type) {
  778|    151|    case 0:	return_trace (c->dispatch (u.format0, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    151|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (778:5): [True: 151, False: 1.45k]
  ------------------
  779|    229|    case 1:	return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    229|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    229|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (779:5): [True: 229, False: 1.37k]
  ------------------
  780|    158|    case 2:	return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    158|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    158|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (780:5): [True: 158, False: 1.44k]
  ------------------
  781|    316|    case 4:	return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    316|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    316|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (781:5): [True: 316, False: 1.28k]
  ------------------
  782|    676|    case 6:	return_trace (c->dispatch (u.format6, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    676|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    676|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (782:5): [True: 676, False: 928]
  ------------------
  783|     74|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|     74|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     74|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (783:5): [True: 74, False: 1.53k]
  ------------------
  784|  1.60k|    }
  785|  1.60k|  }
_ZNK3AAT12KerxSubTable8get_typeEv:
  770|  10.5k|  unsigned int get_type () const { return u.header.coverage & u.header.SubtableType; }
_ZNK3AAT19KerxSubTableFormat0INS_18KerxSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  135|    151|  {
  136|    151|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    151|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  137|    151|    return_trace (likely (pairs.sanitize (c)));
  ------------------
  |  |  349|    151|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  138|    151|  }
_ZNK3AAT19KerxSubTableFormat1INS_18KerxSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  359|    229|  {
  360|    229|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    229|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  361|       |    /* The rest of array sanitizations are done at run-time. */
  362|    229|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    457|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    229|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 228, False: 1]
  |  |  |  Branch (349:45): [True: 167, False: 61]
  |  |  ------------------
  ------------------
  363|    229|			  machine.sanitize (c)));
  364|    229|  }
_ZNK3AAT19KerxSubTableFormat2INS_18KerxSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  427|    158|  {
  428|    158|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    158|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  429|    158|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    933|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    158|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 157, False: 1]
  |  |  |  Branch (349:45): [True: 153, False: 4]
  |  |  |  Branch (349:45): [True: 149, False: 4]
  |  |  |  Branch (349:45): [True: 146, False: 3]
  |  |  ------------------
  ------------------
  430|    158|			  leftClassTable.sanitize (c, this) &&
  431|    158|			  rightClassTable.sanitize (c, this) &&
  432|    158|			  c->check_range (this, array)));
  433|    158|  }
_ZNK3AAT19KerxSubTableFormat4INS_18KerxSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  603|    316|  {
  604|    316|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    316|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  605|       |    /* The rest of array sanitizations are done at run-time. */
  606|    316|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    630|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    316|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 314, False: 2]
  |  |  |  Branch (349:45): [True: 263, False: 51]
  |  |  ------------------
  ------------------
  607|    316|			  machine.sanitize (c)));
  608|    316|  }
_ZNK3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  674|    676|  {
  675|    676|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    676|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  676|    676|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  7.43k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    676|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 376, False: 47]
  |  |  |  Branch (349:45): [True: 362, False: 14]
  |  |  |  Branch (349:45): [True: 346, False: 16]
  |  |  |  Branch (349:45): [True: 229, False: 22]
  |  |  |  Branch (349:45): [True: 220, False: 9]
  |  |  |  Branch (349:45): [True: 207, False: 13]
  |  |  |  Branch (349:45): [True: 423, False: 251]
  |  |  |  Branch (349:45): [True: 674, False: 2]
  |  |  |  Branch (349:45): [True: 553, False: 121]
  |  |  |  Branch (349:45): [True: 132, False: 421]
  |  |  |  Branch (349:45): [True: 404, False: 17]
  |  |  ------------------
  ------------------
  677|    676|			  (is_long () ?
  678|    676|			   (
  679|    676|			     u.l.rowIndexTable.sanitize (c, this) &&
  680|    676|			     u.l.columnIndexTable.sanitize (c, this) &&
  681|    676|			     c->check_range (this, u.l.array)
  682|    676|			   ) : (
  683|    676|			     u.s.rowIndexTable.sanitize (c, this) &&
  684|    676|			     u.s.columnIndexTable.sanitize (c, this) &&
  685|    676|			     c->check_range (this, u.s.array)
  686|    676|			   )) &&
  687|    676|			  (header.tuple_count () == 0 ||
  688|    676|			   c->check_range (this, vector))));
  689|    676|  }
_ZNK3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE7is_longEv:
  626|  93.9k|  bool is_long () const { return flags & ValuesAreLong; }
_ZNK3AAT18KerxSubTableHeader11tuple_countEv:
  734|  1.91M|  unsigned   tuple_count () const { return tupleCount; }
_ZNK3AAT9KerxTableINS_4kerxEE5applyEPNS_22hb_aat_apply_context_tE:
  871|  10.9k|  {
  872|  10.9k|    c->buffer->unsafe_to_concat ();
  873|       |
  874|  10.9k|    typedef typename T::SubTable SubTable;
  875|       |
  876|  10.9k|    bool ret = false;
  877|  10.9k|    bool seenCrossStream = false;
  878|  10.9k|    c->set_lookup_index (0);
  879|  10.9k|    const SubTable *st = &thiz()->firstSubTable;
  880|  10.9k|    unsigned int count = thiz()->tableCount;
  881|  20.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (881:30): [True: 9.08k, False: 10.9k]
  ------------------
  882|  9.08k|    {
  883|  9.08k|      bool reverse;
  884|       |
  885|  9.08k|      if (!T::Types::extended && (st->u.header.coverage & st->u.header.Variation))
  ------------------
  |  Branch (885:11): [Folded - Ignored]
  |  Branch (885:34): [True: 0, False: 0]
  ------------------
  886|      0|	goto skip;
  887|       |
  888|  9.08k|      if (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) != st->u.header.is_horizontal ())
  ------------------
  |  |  271|  9.08k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  |  Branch (888:11): [True: 150, False: 8.93k]
  ------------------
  889|    150|	goto skip;
  890|       |
  891|  8.93k|      reverse = bool (st->u.header.coverage & st->u.header.Backwards) !=
  892|  8.93k|		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
  ------------------
  |  |  298|  8.93k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  893|       |
  894|  8.93k|      if (!c->buffer->message (c->font, "start subtable %u", c->lookup_index))
  ------------------
  |  Branch (894:11): [True: 0, False: 8.93k]
  ------------------
  895|      0|	goto skip;
  896|       |
  897|  8.93k|      if (!seenCrossStream &&
  ------------------
  |  Branch (897:11): [True: 8.77k, False: 156]
  ------------------
  898|  8.93k|	  (st->u.header.coverage & st->u.header.CrossStream))
  ------------------
  |  Branch (898:4): [True: 3.69k, False: 5.08k]
  ------------------
  899|  3.69k|      {
  900|       |	/* Attach all glyphs into a chain. */
  901|  3.69k|	seenCrossStream = true;
  902|  3.69k|	hb_glyph_position_t *pos = c->buffer->pos;
  903|  3.69k|	unsigned int count = c->buffer->len;
  904|   899k|	for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (904:27): [True: 895k, False: 3.69k]
  ------------------
  905|   895k|	{
  906|   895k|	  pos[i].attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_CURSIVE;
  ------------------
  |  |   18|   895k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  907|   895k|	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |   17|   895k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
              	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |  289|   895k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 885k, False: 10.1k]
  |  |  ------------------
  ------------------
  908|       |	  /* We intentionally don't set HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT,
  909|       |	   * since there needs to be a non-zero attachment for post-positioning to
  910|       |	   * be needed. */
  911|   895k|	}
  912|  3.69k|      }
  913|       |
  914|  8.93k|      if (reverse)
  ------------------
  |  Branch (914:11): [True: 1.21k, False: 7.71k]
  ------------------
  915|  1.21k|	c->buffer->reverse ();
  916|       |
  917|  8.93k|      {
  918|       |	/* See comment in sanitize() for conditional here. */
  919|  8.93k|	hb_sanitize_with_object_t with (&c->sanitizer, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (919:49): [True: 1.41k, False: 7.52k]
  ------------------
  920|  8.93k|	ret |= st->dispatch (c);
  921|  8.93k|      }
  922|       |
  923|  8.93k|      if (reverse)
  ------------------
  |  Branch (923:11): [True: 1.21k, False: 7.71k]
  ------------------
  924|  1.21k|	c->buffer->reverse ();
  925|       |
  926|  8.93k|      (void) c->buffer->message (c->font, "end subtable %u", c->lookup_index);
  927|       |
  928|  9.08k|    skip:
  929|  9.08k|      st = &StructAfter<SubTable> (*st);
  930|  9.08k|      c->set_lookup_index (c->lookup_index + 1);
  931|  9.08k|    }
  932|       |
  933|  10.9k|    return ret;
  934|  10.9k|  }
_ZNK3AAT18KerxSubTableHeader13is_horizontalEv:
  735|  9.08k|  bool     is_horizontal () const { return !(coverage & Vertical); }
_ZNK3AAT12KerxSubTable8dispatchINS_22hb_aat_apply_context_tEJEEENT_8return_tEPS3_DpOT0_:
  774|  8.93k|  {
  775|  8.93k|    unsigned int subtable_type = get_type ();
  776|  8.93k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  8.93k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  777|  8.93k|    switch (subtable_type) {
  778|  1.27k|    case 0:	return_trace (c->dispatch (u.format0, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.27k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.27k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (778:5): [True: 1.27k, False: 7.66k]
  ------------------
  779|    633|    case 1:	return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    633|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    633|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (779:5): [True: 633, False: 8.30k]
  ------------------
  780|  1.18k|    case 2:	return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (780:5): [True: 1.18k, False: 7.74k]
  ------------------
  781|    682|    case 4:	return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    682|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    682|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (781:5): [True: 682, False: 8.25k]
  ------------------
  782|  4.58k|    case 6:	return_trace (c->dispatch (u.format6, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.58k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.58k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (782:5): [True: 4.58k, False: 4.34k]
  ------------------
  783|    572|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|    572|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    572|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (783:5): [True: 572, False: 8.36k]
  ------------------
  784|  8.93k|    }
  785|  8.93k|  }
_ZNK3AAT19KerxSubTableFormat0INS_18KerxSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  104|  1.27k|  {
  105|  1.27k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.27k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  106|       |
  107|  1.27k|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (107:9): [True: 205, False: 1.06k]
  ------------------
  108|    205|      return false;
  109|       |
  110|  1.06k|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (110:9): [True: 159, False: 908]
  ------------------
  111|    159|      return false;
  112|       |
  113|    908|    accelerator_t accel (*this, c);
  114|    908|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  115|    908|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  116|       |
  117|    908|    return_trace (true);
  ------------------
  |  |  349|    908|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    908|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  118|  1.06k|  }
_ZN3AAT19KerxSubTableFormat0INS_18KerxSubTableHeaderEE13accelerator_tC2ERKS2_PNS_22hb_aat_apply_context_tE:
  127|    908|		     table (table_), c (c_) {}
_ZNK3AAT19KerxSubTableFormat0INS_18KerxSubTableHeaderEE13accelerator_t11get_kerningEjj:
  130|  72.9k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat0INS_18KerxSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
   97|  72.9k|  {
   98|  72.9k|    hb_glyph_pair_t pair = {left, right};
   99|  72.9k|    int v = pairs.bsearch (pair).get_kerning ();
  100|  72.9k|    return kerxTupleKern (v, header.tuple_count (), this, c);
  101|  72.9k|  }
_ZNK3AAT8KernPair3cmpERKNS_15hb_glyph_pair_tE:
   72|   405k|  {
   73|   405k|    int ret = left.cmp (o.left);
   74|   405k|    if (ret) return ret;
  ------------------
  |  Branch (74:9): [True: 364k, False: 41.8k]
  ------------------
   75|  41.8k|    return right.cmp (o.right);
   76|   405k|  }
_ZNK3AAT8KernPair11get_kerningEv:
   69|   207k|  int get_kerning () const { return value; }
hb-aat-layout.cc:_ZN3AATL13kerxTupleKernEijPKvPNS_22hb_aat_apply_context_tE:
   51|   138k|{
   52|   138k|  if (likely (!tupleCount || !c)) return value;
  ------------------
  |  |  258|   272k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 4.28k, False: 134k]
  |  |  |  Branch (258:45): [True: 4.28k, False: 134k]
  |  |  |  Branch (258:45): [True: 0, False: 134k]
  |  |  ------------------
  ------------------
   53|       |
   54|   134k|  unsigned int offset = value;
   55|   134k|  const FWORD *pv = &StructAtOffset<FWORD> (base, offset);
   56|   134k|  if (unlikely (!c->sanitizer.check_array (pv, tupleCount))) return 0;
  ------------------
  |  |  259|   134k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 126k, False: 7.32k]
  |  |  ------------------
  ------------------
   57|  7.32k|  return *pv;
   58|   134k|}
_ZNK3AAT19KerxSubTableFormat1INS_18KerxSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  343|    633|  {
  344|    633|    TRACE_APPLY (this);
  ------------------
  |  |  410|    633|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  345|       |
  346|    633|    if (!c->plan->requested_kerning &&
  ------------------
  |  Branch (346:9): [True: 168, False: 465]
  ------------------
  347|    633|	!(header.coverage & header.CrossStream))
  ------------------
  |  Branch (347:2): [True: 93, False: 75]
  ------------------
  348|     93|      return false;
  349|       |
  350|    540|    driver_context_t dc (this, c);
  351|       |
  352|    540|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
  353|    540|    driver.drive (&dc, c);
  354|       |
  355|    540|    return_trace (true);
  ------------------
  |  |  349|    540|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    540|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  356|    633|  }
_ZN3AAT19KerxSubTableFormat1INS_18KerxSubTableHeaderEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  228|    540|	crossStream (table->header.coverage & table->header.CrossStream) {}
_ZN3AAT19KerxSubTableFormat1INS_18KerxSubTableHeaderEE16driver_context_t13is_actionableEPNS_16StateTableDriverINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEEERKNS_5EntryIS8_EE:
  232|  4.35M|    { return Format1EntryT::performAction (entry); }
_ZN3AAT12Format1EntryILb1EE13performActionERKNS_5EntryINS1_9EntryDataEEE:
  174|  7.57M|  { return entry.data.kernActionIndex != 0xFFFF; }
_ZN3AAT19KerxSubTableFormat1INS_18KerxSubTableHeaderEE16driver_context_t10transitionEPNS_16StateTableDriverINS_13ExtendedTypesENS_12Format1EntryILb1EE9EntryDataEEERKNS_5EntryIS8_EE:
  235|  3.22M|    {
  236|  3.22M|      hb_buffer_t *buffer = driver->buffer;
  237|  3.22M|      unsigned int flags = entry.flags;
  238|       |
  239|  3.22M|      if (flags & Format1EntryT::Reset)
  ------------------
  |  Branch (239:11): [True: 1.42M, False: 1.80M]
  ------------------
  240|  1.42M|	depth = 0;
  241|       |
  242|  3.22M|      if (flags & Format1EntryT::Push)
  ------------------
  |  Branch (242:11): [True: 2.80M, False: 422k]
  ------------------
  243|  2.80M|      {
  244|  2.80M|	if (likely (depth < ARRAY_LENGTH (stack)))
  ------------------
  |  |  258|  2.80M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.73M, False: 62.7k]
  |  |  ------------------
  ------------------
  245|  2.73M|	  stack[depth++] = buffer->idx;
  246|  62.7k|	else
  247|  62.7k|	  depth = 0; /* Probably not what CoreText does, but better? */
  248|  2.80M|      }
  249|       |
  250|  3.22M|      if (Format1EntryT::performAction (entry) && depth)
  ------------------
  |  Branch (250:11): [True: 2.20M, False: 1.02M]
  |  Branch (250:51): [True: 1.77M, False: 425k]
  ------------------
  251|  1.77M|      {
  252|  1.77M|	unsigned int tuple_count = hb_max (1u, table->header.tuple_count ());
  253|       |
  254|  1.77M|	unsigned int kern_idx = Format1EntryT::kernActionIndex (entry);
  255|  1.77M|	kern_idx = Types::byteOffsetToIndex (kern_idx, &table->machine, kernAction.arrayZ);
  256|  1.77M|	const FWORD *actions = &kernAction[kern_idx];
  257|  1.77M|	if (!c->sanitizer.check_array (actions, depth, tuple_count))
  ------------------
  |  Branch (257:6): [True: 1.42M, False: 357k]
  ------------------
  258|  1.42M|	{
  259|  1.42M|	  depth = 0;
  260|  1.42M|	  return;
  261|  1.42M|	}
  262|       |
  263|   357k|	hb_mask_t kern_mask = c->plan->kern_mask;
  264|       |
  265|       |	/* From Apple 'kern' spec:
  266|       |	 * "Each pops one glyph from the kerning stack and applies the kerning value to it.
  267|       |	 * The end of the list is marked by an odd value... */
  268|   357k|	bool last = false;
  269|   765k|	while (!last && depth)
  ------------------
  |  Branch (269:9): [True: 524k, False: 241k]
  |  Branch (269:18): [True: 407k, False: 116k]
  ------------------
  270|   407k|	{
  271|   407k|	  unsigned int idx = stack[--depth];
  272|   407k|	  int v = *actions;
  273|   407k|	  actions += tuple_count;
  274|   407k|	  if (idx >= buffer->len) continue;
  ------------------
  |  Branch (274:8): [True: 80, False: 407k]
  ------------------
  275|       |
  276|       |	  /* "The end of the list is marked by an odd value..." */
  277|   407k|	  last = v & 1;
  278|   407k|	  v &= ~1;
  279|       |
  280|   407k|	  hb_glyph_position_t &o = buffer->pos[idx];
  281|       |
  282|   407k|	  if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
  ------------------
  |  |  271|   407k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 407k, False: 0]
  |  |  ------------------
  ------------------
  283|   407k|	  {
  284|   407k|	    if (crossStream)
  ------------------
  |  Branch (284:10): [True: 216k, False: 190k]
  ------------------
  285|   216k|	    {
  286|       |	      /* The following flag is undocumented in the spec, but described
  287|       |	       * in the 'kern' table example. */
  288|   216k|	      if (v == -0x8000)
  ------------------
  |  Branch (288:12): [True: 12.7k, False: 204k]
  ------------------
  289|  12.7k|	      {
  290|  12.7k|		o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  ------------------
  |  |   18|  12.7k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  291|  12.7k|		o.attach_chain() = 0;
  ------------------
  |  |   17|  12.7k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  292|  12.7k|		o.y_offset = 0;
  293|  12.7k|	      }
  294|   204k|	      else if (o.attach_type())
  ------------------
  |  |   18|   204k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  |  Branch (294:17): [True: 179k, False: 24.9k]
  ------------------
  295|   179k|	      {
  296|   179k|		o.y_offset += c->font->em_scale_y (v);
  297|   179k|		buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  298|   179k|	      }
  299|   216k|	    }
  300|   190k|	    else if (buffer->info[idx].mask & kern_mask)
  ------------------
  |  Branch (300:15): [True: 190k, False: 0]
  ------------------
  301|   190k|	    {
  302|   190k|	      o.x_advance += c->font->em_scale_x (v);
  303|   190k|	      o.x_offset += c->font->em_scale_x (v);
  304|   190k|	    }
  305|   407k|	  }
  306|      0|	  else
  307|      0|	  {
  308|      0|	    if (crossStream)
  ------------------
  |  Branch (308:10): [True: 0, False: 0]
  ------------------
  309|      0|	    {
  310|       |	      /* CoreText doesn't do crossStream kerning in vertical.  We do. */
  311|      0|	      if (v == -0x8000)
  ------------------
  |  Branch (311:12): [True: 0, False: 0]
  ------------------
  312|      0|	      {
  313|      0|		o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  ------------------
  |  |   18|      0|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  314|      0|		o.attach_chain() = 0;
  ------------------
  |  |   17|      0|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  315|      0|		o.x_offset = 0;
  316|      0|	      }
  317|      0|	      else if (o.attach_type())
  ------------------
  |  |   18|      0|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  |  Branch (317:17): [True: 0, False: 0]
  ------------------
  318|      0|	      {
  319|      0|		o.x_offset += c->font->em_scale_x (v);
  320|      0|		buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  321|      0|	      }
  322|      0|	    }
  323|      0|	    else if (buffer->info[idx].mask & kern_mask)
  ------------------
  |  Branch (323:15): [True: 0, False: 0]
  ------------------
  324|      0|	    {
  325|      0|	      o.y_advance += c->font->em_scale_y (v);
  326|      0|	      o.y_offset += c->font->em_scale_y (v);
  327|      0|	    }
  328|      0|	  }
  329|   407k|	}
  330|   357k|      }
  331|  3.22M|    }
_ZN3AAT12Format1EntryILb1EE15kernActionIndexERKNS_5EntryINS1_9EntryDataEEE:
  177|  1.77M|  { return entry.data.kernActionIndex; }
_ZNK3AAT19KerxSubTableFormat2INS_18KerxSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  397|  1.18k|  {
  398|  1.18k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.18k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  399|       |
  400|  1.18k|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (400:9): [True: 163, False: 1.02k]
  ------------------
  401|    163|      return false;
  402|       |
  403|  1.02k|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (403:9): [True: 104, False: 918]
  ------------------
  404|    104|      return false;
  405|       |
  406|    918|    accelerator_t accel (*this, c);
  407|    918|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  408|    918|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  409|       |
  410|    918|    return_trace (true);
  ------------------
  |  |  349|    918|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    918|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  411|  1.02k|  }
_ZN3AAT19KerxSubTableFormat2INS_18KerxSubTableHeaderEE13accelerator_tC2ERKS2_PNS_22hb_aat_apply_context_tE:
  420|    918|		     table (table_), c (c_) {}
_ZNK3AAT19KerxSubTableFormat2INS_18KerxSubTableHeaderEE13accelerator_t11get_kerningEjj:
  423|  4.85k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat2INS_18KerxSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
  382|  4.85k|  {
  383|  4.85k|    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
  384|  4.85k|    unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
  385|  4.85k|    unsigned int r = (this+rightClassTable).get_class (right, num_glyphs, 0);
  386|       |
  387|  4.85k|    const UnsizedArrayOf<FWORD> &arrayZ = this+array;
  388|  4.85k|    unsigned int kern_idx = l + r;
  389|  4.85k|    kern_idx = Types::offsetToIndex (kern_idx, this, arrayZ.arrayZ);
  390|  4.85k|    const FWORD *v = &arrayZ[kern_idx];
  391|  4.85k|    if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
  ------------------
  |  |  259|  4.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 363, False: 4.49k]
  |  |  ------------------
  ------------------
  392|       |
  393|  4.49k|    return kerxTupleKern (*v, header.tuple_count (), this, c);
  394|  4.85k|  }
_ZNK3AAT19KerxSubTableFormat4INS_18KerxSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  591|    682|  {
  592|    682|    TRACE_APPLY (this);
  ------------------
  |  |  410|    682|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  593|       |
  594|    682|    driver_context_t dc (this, c);
  595|       |
  596|    682|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
  597|    682|    driver.drive (&dc, c);
  598|       |
  599|    682|    return_trace (true);
  ------------------
  |  |  349|    682|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    682|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  600|    682|  }
_ZN3AAT19KerxSubTableFormat4INS_18KerxSubTableHeaderEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  490|    682|	mark (0) {}
_ZN3AAT19KerxSubTableFormat4INS_18KerxSubTableHeaderEE16driver_context_t13is_actionableEPNS_16StateTableDriverINS_13ExtendedTypesENS2_9EntryDataEEERKNS_5EntryIS6_EE:
  494|  6.76M|    { return entry.data.ankrActionIndex != 0xFFFF; }
_ZN3AAT19KerxSubTableFormat4INS_18KerxSubTableHeaderEE16driver_context_t10transitionEPNS_16StateTableDriverINS_13ExtendedTypesENS2_9EntryDataEEERKNS_5EntryIS6_EE:
  497|  4.23M|    {
  498|  4.23M|      hb_buffer_t *buffer = driver->buffer;
  499|       |
  500|  4.23M|      if (mark_set && entry.data.ankrActionIndex != 0xFFFF && buffer->idx < buffer->len)
  ------------------
  |  Branch (500:11): [True: 4.10M, False: 128k]
  |  Branch (500:23): [True: 2.10M, False: 2.00M]
  |  Branch (500:63): [True: 2.10M, False: 462]
  ------------------
  501|  2.10M|      {
  502|  2.10M|	hb_glyph_position_t &o = buffer->cur_pos();
  503|  2.10M|	switch (action_type)
  ------------------
  |  Branch (503:10): [True: 96.8k, False: 2.00M]
  ------------------
  504|  2.10M|	{
  505|   608k|	  case 0: /* Control Point Actions.*/
  ------------------
  |  Branch (505:4): [True: 608k, False: 1.49M]
  ------------------
  506|   608k|	  {
  507|       |	    /* Indexed into glyph outline. */
  508|       |	    /* Each action (record in ankrData) contains two 16-bit fields, so we must
  509|       |	       double the ankrActionIndex to get the correct offset here. */
  510|   608k|	    const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2];
  511|   608k|	    if (!c->sanitizer.check_array (data, 2)) return;
  ------------------
  |  Branch (511:10): [True: 414k, False: 193k]
  ------------------
  512|   193k|	    unsigned int markControlPoint = *data++;
  513|   193k|	    unsigned int currControlPoint = *data++;
  514|   193k|	    hb_position_t markX = 0;
  515|   193k|	    hb_position_t markY = 0;
  516|   193k|	    hb_position_t currX = 0;
  517|   193k|	    hb_position_t currY = 0;
  518|   193k|	    if (!c->font->get_glyph_contour_point_for_origin (c->buffer->info[mark].codepoint,
  ------------------
  |  Branch (518:10): [True: 193k, False: 0]
  ------------------
  519|   193k|							      markControlPoint,
  520|   193k|							      HB_DIRECTION_LTR /*XXX*/,
  521|   193k|							      &markX, &markY) ||
  522|   193k|		!c->font->get_glyph_contour_point_for_origin (c->buffer->cur ().codepoint,
  ------------------
  |  Branch (522:3): [True: 0, False: 0]
  ------------------
  523|      0|							      currControlPoint,
  524|      0|							      HB_DIRECTION_LTR /*XXX*/,
  525|      0|							      &currX, &currY))
  526|   193k|	      return;
  527|       |
  528|      0|	    o.x_offset = markX - currX;
  529|      0|	    o.y_offset = markY - currY;
  530|      0|	  }
  531|      0|	  break;
  532|       |
  533|  1.25M|	  case 1: /* Anchor Point Actions. */
  ------------------
  |  Branch (533:4): [True: 1.25M, False: 849k]
  ------------------
  534|  1.25M|	  {
  535|       |	    /* Indexed into 'ankr' table. */
  536|       |	    /* Each action (record in ankrData) contains two 16-bit fields, so we must
  537|       |	       double the ankrActionIndex to get the correct offset here. */
  538|  1.25M|	    const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2];
  539|  1.25M|	    if (!c->sanitizer.check_array (data, 2)) return;
  ------------------
  |  Branch (539:10): [True: 662k, False: 588k]
  ------------------
  540|   588k|	    unsigned int markAnchorPoint = *data++;
  541|   588k|	    unsigned int currAnchorPoint = *data++;
  542|   588k|	    const Anchor &markAnchor = c->ankr_table->get_anchor (c->buffer->info[mark].codepoint,
  543|   588k|								  markAnchorPoint,
  544|   588k|								  c->sanitizer.get_num_glyphs ());
  545|   588k|	    const Anchor &currAnchor = c->ankr_table->get_anchor (c->buffer->cur ().codepoint,
  546|   588k|								  currAnchorPoint,
  547|   588k|								  c->sanitizer.get_num_glyphs ());
  548|       |
  549|   588k|	    o.x_offset = c->font->em_scale_x (markAnchor.xCoordinate) - c->font->em_scale_x (currAnchor.xCoordinate);
  550|   588k|	    o.y_offset = c->font->em_scale_y (markAnchor.yCoordinate) - c->font->em_scale_y (currAnchor.yCoordinate);
  551|   588k|	  }
  552|      0|	  break;
  553|       |
  554|   144k|	  case 2: /* Control Point Coordinate Actions. */
  ------------------
  |  Branch (554:4): [True: 144k, False: 1.95M]
  ------------------
  555|   144k|	  {
  556|       |	    /* Each action contains four 16-bit fields, so we multiply the ankrActionIndex
  557|       |	       by 4 to get the correct offset for the given action. */
  558|   144k|	    const FWORD *data = (const FWORD *) &ankrData[entry.data.ankrActionIndex * 4];
  559|   144k|	    if (!c->sanitizer.check_array (data, 4)) return;
  ------------------
  |  Branch (559:10): [True: 88.8k, False: 55.8k]
  ------------------
  560|  55.8k|	    int markX = *data++;
  561|  55.8k|	    int markY = *data++;
  562|  55.8k|	    int currX = *data++;
  563|  55.8k|	    int currY = *data++;
  564|       |
  565|  55.8k|	    o.x_offset = c->font->em_scale_x (markX) - c->font->em_scale_x (currX);
  566|  55.8k|	    o.y_offset = c->font->em_scale_y (markY) - c->font->em_scale_y (currY);
  567|  55.8k|	  }
  568|      0|	  break;
  569|  2.10M|	}
  570|   740k|	o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_MARK;
  ------------------
  |  |   18|   740k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  571|   740k|	o.attach_chain() = (int) mark - (int) buffer->idx;
  ------------------
  |  |   17|   740k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  572|   740k|	buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  573|   740k|      }
  574|       |
  575|  2.87M|      if (entry.flags & Mark)
  ------------------
  |  Branch (575:11): [True: 2.67M, False: 204k]
  ------------------
  576|  2.67M|      {
  577|  2.67M|	mark_set = true;
  578|  2.67M|	mark = buffer->idx;
  579|  2.67M|      }
  580|  2.87M|    }
_ZNK3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  657|  4.58k|  {
  658|  4.58k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  4.58k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  659|       |
  660|  4.58k|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (660:9): [True: 417, False: 4.17k]
  ------------------
  661|    417|      return false;
  662|       |
  663|  4.17k|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (663:9): [True: 321, False: 3.85k]
  ------------------
  664|    321|      return false;
  665|       |
  666|  3.85k|    accelerator_t accel (*this, c);
  667|  3.85k|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  668|  3.85k|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  669|       |
  670|  3.85k|    return_trace (true);
  ------------------
  |  |  349|  3.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  671|  4.17k|  }
_ZN3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE13accelerator_tC2ERKS2_PNS_22hb_aat_apply_context_tE:
  698|  3.85k|		     table (table_), c (c_) {}
_ZNK3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE13accelerator_t11get_kerningEjj:
  701|  93.2k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat6INS_18KerxSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
  630|  93.2k|  {
  631|  93.2k|    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
  632|  93.2k|    if (is_long ())
  ------------------
  |  Branch (632:9): [True: 55.7k, False: 37.5k]
  ------------------
  633|  55.7k|    {
  634|  55.7k|      const typename U::Long &t = u.l;
  635|  55.7k|      unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
  636|  55.7k|      unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
  637|  55.7k|      unsigned int offset = l + r;
  638|  55.7k|      if (unlikely (offset < l)) return 0; /* Addition overflow. */
  ------------------
  |  |  259|  55.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.30k, False: 51.4k]
  |  |  ------------------
  ------------------
  639|  51.4k|      if (unlikely (hb_unsigned_mul_overflows (offset, sizeof (FWORD32)))) return 0;
  ------------------
  |  |  259|  51.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.16k, False: 48.3k]
  |  |  ------------------
  ------------------
  640|  48.3k|      const FWORD32 *v = &StructAtOffset<FWORD32> (&(this+t.array), offset * sizeof (FWORD32));
  641|  48.3k|      if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
  ------------------
  |  |  259|  48.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.7k, False: 36.5k]
  |  |  ------------------
  ------------------
  642|  36.5k|      return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c);
  643|  48.3k|    }
  644|  37.5k|    else
  645|  37.5k|    {
  646|  37.5k|      const typename U::Short &t = u.s;
  647|  37.5k|      unsigned int l = (this+t.rowIndexTable).get_value_or_null (left, num_glyphs);
  648|  37.5k|      unsigned int r = (this+t.columnIndexTable).get_value_or_null (right, num_glyphs);
  649|  37.5k|      unsigned int offset = l + r;
  650|  37.5k|      const FWORD *v = &StructAtOffset<FWORD> (&(this+t.array), offset * sizeof (FWORD));
  651|  37.5k|      if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
  ------------------
  |  |  259|  37.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.0k, False: 24.4k]
  |  |  ------------------
  ------------------
  652|  24.4k|      return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c);
  653|  37.5k|    }
  654|  93.2k|  }
_ZN3AAT12Format1EntryILb0EE13performActionERKNS_5EntryIvEE:
  196|  10.8M|  { return entry.flags & Offset; }
_ZN3AAT12Format1EntryILb0EE15kernActionIndexERKNS_5EntryIvEE:
  199|  1.34M|  { return entry.flags & Offset; }
_ZNK3AAT9KerxTableIN2OT6KernOTEE17has_state_machineEv:
  823|    297|  {
  824|    297|    typedef typename T::SubTable SubTable;
  825|       |
  826|    297|    const SubTable *st = &thiz()->firstSubTable;
  827|    297|    unsigned int count = thiz()->tableCount;
  828|  3.23k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (828:30): [True: 2.97k, False: 259]
  ------------------
  829|  2.97k|    {
  830|  2.97k|      if (st->get_type () == 1)
  ------------------
  |  Branch (830:11): [True: 38, False: 2.93k]
  ------------------
  831|     38|	return true;
  832|  2.93k|      st = &StructAfter<SubTable> (*st);
  833|  2.93k|    }
  834|    259|    return false;
  835|    297|  }
_ZNK3AAT9KerxTableIN2OT6KernOTEE4thizEv:
  820|  6.42k|  const T* thiz () const { return static_cast<const T *> (this); }
_ZNK3AAT9KerxTableIN2OT7KernAATEE17has_state_machineEv:
  823|    511|  {
  824|    511|    typedef typename T::SubTable SubTable;
  825|       |
  826|    511|    const SubTable *st = &thiz()->firstSubTable;
  827|    511|    unsigned int count = thiz()->tableCount;
  828|    904|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (828:30): [True: 609, False: 295]
  ------------------
  829|    609|    {
  830|    609|      if (st->get_type () == 1)
  ------------------
  |  Branch (830:11): [True: 216, False: 393]
  ------------------
  831|    216|	return true;
  832|    393|      st = &StructAfter<SubTable> (*st);
  833|    393|    }
  834|    295|    return false;
  835|    511|  }
_ZNK3AAT9KerxTableIN2OT7KernAATEE4thizEv:
  820|  9.12k|  const T* thiz () const { return static_cast<const T *> (this); }
_ZNK3AAT9KerxTableIN2OT6KernOTEE16has_cross_streamEv:
  838|    297|  {
  839|    297|    typedef typename T::SubTable SubTable;
  840|       |
  841|    297|    const SubTable *st = &thiz()->firstSubTable;
  842|    297|    unsigned int count = thiz()->tableCount;
  843|  1.11k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (843:30): [True: 998, False: 120]
  ------------------
  844|    998|    {
  845|    998|      if (st->u.header.coverage & st->u.header.CrossStream)
  ------------------
  |  Branch (845:11): [True: 177, False: 821]
  ------------------
  846|    177|	return true;
  847|    821|      st = &StructAfter<SubTable> (*st);
  848|    821|    }
  849|    120|    return false;
  850|    297|  }
_ZNK3AAT9KerxTableIN2OT7KernAATEE16has_cross_streamEv:
  838|    521|  {
  839|    521|    typedef typename T::SubTable SubTable;
  840|       |
  841|    521|    const SubTable *st = &thiz()->firstSubTable;
  842|    521|    unsigned int count = thiz()->tableCount;
  843|    776|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (843:30): [True: 585, False: 191]
  ------------------
  844|    585|    {
  845|    585|      if (st->u.header.coverage & st->u.header.CrossStream)
  ------------------
  |  Branch (845:11): [True: 330, False: 255]
  ------------------
  846|    330|	return true;
  847|    255|      st = &StructAfter<SubTable> (*st);
  848|    255|    }
  849|    191|    return false;
  850|    521|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
   97|   111k|  {
   98|   111k|    hb_glyph_pair_t pair = {left, right};
   99|   111k|    int v = pairs.bsearch (pair).get_kerning ();
  100|   111k|    return kerxTupleKern (v, header.tuple_count (), this, c);
  101|   111k|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
   97|  23.2k|  {
   98|  23.2k|    hb_glyph_pair_t pair = {left, right};
   99|  23.2k|    int v = pairs.bsearch (pair).get_kerning ();
  100|  23.2k|    return kerxTupleKern (v, header.tuple_count (), this, c);
  101|  23.2k|  }
_ZNK3AAT9KerxTableIN2OT6KernOTEE5applyEPNS_22hb_aat_apply_context_tE:
  871|  2.05k|  {
  872|  2.05k|    c->buffer->unsafe_to_concat ();
  873|       |
  874|  2.05k|    typedef typename T::SubTable SubTable;
  875|       |
  876|  2.05k|    bool ret = false;
  877|  2.05k|    bool seenCrossStream = false;
  878|  2.05k|    c->set_lookup_index (0);
  879|  2.05k|    const SubTable *st = &thiz()->firstSubTable;
  880|  2.05k|    unsigned int count = thiz()->tableCount;
  881|  37.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (881:30): [True: 35.5k, False: 2.05k]
  ------------------
  882|  35.5k|    {
  883|  35.5k|      bool reverse;
  884|       |
  885|  35.5k|      if (!T::Types::extended && (st->u.header.coverage & st->u.header.Variation))
  ------------------
  |  Branch (885:11): [Folded - Ignored]
  |  Branch (885:34): [True: 0, False: 35.5k]
  ------------------
  886|      0|	goto skip;
  887|       |
  888|  35.5k|      if (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) != st->u.header.is_horizontal ())
  ------------------
  |  |  271|  35.5k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  |  Branch (888:11): [True: 12.2k, False: 23.3k]
  ------------------
  889|  12.2k|	goto skip;
  890|       |
  891|  23.3k|      reverse = bool (st->u.header.coverage & st->u.header.Backwards) !=
  892|  23.3k|		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
  ------------------
  |  |  298|  23.3k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  893|       |
  894|  23.3k|      if (!c->buffer->message (c->font, "start subtable %u", c->lookup_index))
  ------------------
  |  Branch (894:11): [True: 0, False: 23.3k]
  ------------------
  895|      0|	goto skip;
  896|       |
  897|  23.3k|      if (!seenCrossStream &&
  ------------------
  |  Branch (897:11): [True: 2.21k, False: 21.1k]
  ------------------
  898|  23.3k|	  (st->u.header.coverage & st->u.header.CrossStream))
  ------------------
  |  Branch (898:4): [True: 1.14k, False: 1.07k]
  ------------------
  899|  1.14k|      {
  900|       |	/* Attach all glyphs into a chain. */
  901|  1.14k|	seenCrossStream = true;
  902|  1.14k|	hb_glyph_position_t *pos = c->buffer->pos;
  903|  1.14k|	unsigned int count = c->buffer->len;
  904|  86.4k|	for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (904:27): [True: 85.2k, False: 1.14k]
  ------------------
  905|  85.2k|	{
  906|  85.2k|	  pos[i].attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_CURSIVE;
  ------------------
  |  |   18|  85.2k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  907|  85.2k|	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |   17|  85.2k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
              	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |  289|  85.2k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 84.5k, False: 756]
  |  |  ------------------
  ------------------
  908|       |	  /* We intentionally don't set HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT,
  909|       |	   * since there needs to be a non-zero attachment for post-positioning to
  910|       |	   * be needed. */
  911|  85.2k|	}
  912|  1.14k|      }
  913|       |
  914|  23.3k|      if (reverse)
  ------------------
  |  Branch (914:11): [True: 58, False: 23.3k]
  ------------------
  915|     58|	c->buffer->reverse ();
  916|       |
  917|  23.3k|      {
  918|       |	/* See comment in sanitize() for conditional here. */
  919|  23.3k|	hb_sanitize_with_object_t with (&c->sanitizer, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (919:49): [True: 21.6k, False: 1.73k]
  ------------------
  920|  23.3k|	ret |= st->dispatch (c);
  921|  23.3k|      }
  922|       |
  923|  23.3k|      if (reverse)
  ------------------
  |  Branch (923:11): [True: 58, False: 23.3k]
  ------------------
  924|     58|	c->buffer->reverse ();
  925|       |
  926|  23.3k|      (void) c->buffer->message (c->font, "end subtable %u", c->lookup_index);
  927|       |
  928|  35.5k|    skip:
  929|  35.5k|      st = &StructAfter<SubTable> (*st);
  930|  35.5k|      c->set_lookup_index (c->lookup_index + 1);
  931|  35.5k|    }
  932|       |
  933|  2.05k|    return ret;
  934|  2.05k|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  104|    965|  {
  105|    965|    TRACE_APPLY (this);
  ------------------
  |  |  410|    965|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  106|       |
  107|    965|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (107:9): [True: 106, False: 859]
  ------------------
  108|    106|      return false;
  109|       |
  110|    859|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (110:9): [True: 0, False: 859]
  ------------------
  111|      0|      return false;
  112|       |
  113|    859|    accelerator_t accel (*this, c);
  114|    859|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  115|    859|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  116|       |
  117|    859|    return_trace (true);
  ------------------
  |  |  349|    859|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    859|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  118|    859|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEE13accelerator_t11get_kerningEjj:
  130|   111k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  397|    854|  {
  398|    854|    TRACE_APPLY (this);
  ------------------
  |  |  410|    854|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  399|       |
  400|    854|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (400:9): [True: 324, False: 530]
  ------------------
  401|    324|      return false;
  402|       |
  403|    530|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (403:9): [True: 0, False: 530]
  ------------------
  404|      0|      return false;
  405|       |
  406|    530|    accelerator_t accel (*this, c);
  407|    530|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  408|    530|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  409|       |
  410|    530|    return_trace (true);
  ------------------
  |  |  349|    530|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    530|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  411|    530|  }
_ZNK3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEE13accelerator_t11get_kerningEjj:
  423|  53.7k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
  382|  53.7k|  {
  383|  53.7k|    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
  384|  53.7k|    unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
  385|  53.7k|    unsigned int r = (this+rightClassTable).get_class (right, num_glyphs, 0);
  386|       |
  387|  53.7k|    const UnsizedArrayOf<FWORD> &arrayZ = this+array;
  388|  53.7k|    unsigned int kern_idx = l + r;
  389|  53.7k|    kern_idx = Types::offsetToIndex (kern_idx, this, arrayZ.arrayZ);
  390|  53.7k|    const FWORD *v = &arrayZ[kern_idx];
  391|  53.7k|    if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
  ------------------
  |  |  259|  53.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28.9k, False: 24.7k]
  |  |  ------------------
  ------------------
  392|       |
  393|  24.7k|    return kerxTupleKern (*v, header.tuple_count (), this, c);
  394|  53.7k|  }
_ZNK3AAT9KerxTableIN2OT7KernAATEE5applyEPNS_22hb_aat_apply_context_tE:
  871|  2.35k|  {
  872|  2.35k|    c->buffer->unsafe_to_concat ();
  873|       |
  874|  2.35k|    typedef typename T::SubTable SubTable;
  875|       |
  876|  2.35k|    bool ret = false;
  877|  2.35k|    bool seenCrossStream = false;
  878|  2.35k|    c->set_lookup_index (0);
  879|  2.35k|    const SubTable *st = &thiz()->firstSubTable;
  880|  2.35k|    unsigned int count = thiz()->tableCount;
  881|  5.24k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (881:30): [True: 2.89k, False: 2.35k]
  ------------------
  882|  2.89k|    {
  883|  2.89k|      bool reverse;
  884|       |
  885|  2.89k|      if (!T::Types::extended && (st->u.header.coverage & st->u.header.Variation))
  ------------------
  |  Branch (885:11): [Folded - Ignored]
  |  Branch (885:34): [True: 244, False: 2.65k]
  ------------------
  886|    244|	goto skip;
  887|       |
  888|  2.65k|      if (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) != st->u.header.is_horizontal ())
  ------------------
  |  |  271|  2.65k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  |  Branch (888:11): [True: 106, False: 2.54k]
  ------------------
  889|    106|	goto skip;
  890|       |
  891|  2.54k|      reverse = bool (st->u.header.coverage & st->u.header.Backwards) !=
  892|  2.54k|		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
  ------------------
  |  |  298|  2.54k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  893|       |
  894|  2.54k|      if (!c->buffer->message (c->font, "start subtable %u", c->lookup_index))
  ------------------
  |  Branch (894:11): [True: 0, False: 2.54k]
  ------------------
  895|      0|	goto skip;
  896|       |
  897|  2.54k|      if (!seenCrossStream &&
  ------------------
  |  Branch (897:11): [True: 2.40k, False: 147]
  ------------------
  898|  2.54k|	  (st->u.header.coverage & st->u.header.CrossStream))
  ------------------
  |  Branch (898:4): [True: 1.26k, False: 1.13k]
  ------------------
  899|  1.26k|      {
  900|       |	/* Attach all glyphs into a chain. */
  901|  1.26k|	seenCrossStream = true;
  902|  1.26k|	hb_glyph_position_t *pos = c->buffer->pos;
  903|  1.26k|	unsigned int count = c->buffer->len;
  904|   990k|	for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (904:27): [True: 989k, False: 1.26k]
  ------------------
  905|   989k|	{
  906|   989k|	  pos[i].attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_CURSIVE;
  ------------------
  |  |   18|   989k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  907|   989k|	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |   17|   989k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
              	  pos[i].attach_chain() = HB_DIRECTION_IS_FORWARD (c->buffer->props.direction) ? -1 : +1;
  ------------------
  |  |  289|   989k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 968k, False: 21.0k]
  |  |  ------------------
  ------------------
  908|       |	  /* We intentionally don't set HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT,
  909|       |	   * since there needs to be a non-zero attachment for post-positioning to
  910|       |	   * be needed. */
  911|   989k|	}
  912|  1.26k|      }
  913|       |
  914|  2.54k|      if (reverse)
  ------------------
  |  Branch (914:11): [True: 62, False: 2.48k]
  ------------------
  915|     62|	c->buffer->reverse ();
  916|       |
  917|  2.54k|      {
  918|       |	/* See comment in sanitize() for conditional here. */
  919|  2.54k|	hb_sanitize_with_object_t with (&c->sanitizer, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (919:49): [True: 373, False: 2.17k]
  ------------------
  920|  2.54k|	ret |= st->dispatch (c);
  921|  2.54k|      }
  922|       |
  923|  2.54k|      if (reverse)
  ------------------
  |  Branch (923:11): [True: 62, False: 2.48k]
  ------------------
  924|     62|	c->buffer->reverse ();
  925|       |
  926|  2.54k|      (void) c->buffer->message (c->font, "end subtable %u", c->lookup_index);
  927|       |
  928|  2.89k|    skip:
  929|  2.89k|      st = &StructAfter<SubTable> (*st);
  930|  2.89k|      c->set_lookup_index (c->lookup_index + 1);
  931|  2.89k|    }
  932|       |
  933|  2.35k|    return ret;
  934|  2.35k|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  104|    607|  {
  105|    607|    TRACE_APPLY (this);
  ------------------
  |  |  410|    607|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  106|       |
  107|    607|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (107:9): [True: 132, False: 475]
  ------------------
  108|    132|      return false;
  109|       |
  110|    475|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (110:9): [True: 0, False: 475]
  ------------------
  111|      0|      return false;
  112|       |
  113|    475|    accelerator_t accel (*this, c);
  114|    475|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  115|    475|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  116|       |
  117|    475|    return_trace (true);
  ------------------
  |  |  349|    475|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    475|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  118|    475|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEE13accelerator_t11get_kerningEjj:
  130|  23.2k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  343|    732|  {
  344|    732|    TRACE_APPLY (this);
  ------------------
  |  |  410|    732|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  345|       |
  346|    732|    if (!c->plan->requested_kerning &&
  ------------------
  |  Branch (346:9): [True: 148, False: 584]
  ------------------
  347|    732|	!(header.coverage & header.CrossStream))
  ------------------
  |  Branch (347:2): [True: 99, False: 49]
  ------------------
  348|     99|      return false;
  349|       |
  350|    633|    driver_context_t dc (this, c);
  351|       |
  352|    633|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->font->face);
  353|    633|    driver.drive (&dc, c);
  354|       |
  355|    633|    return_trace (true);
  ------------------
  |  |  349|    633|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    633|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  356|    732|  }
_ZN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE16driver_context_t13is_actionableEPNS_16StateTableDriverINS_13ObsoleteTypesEvEERKNS_5EntryIvEE:
  232|  6.65M|    { return Format1EntryT::performAction (entry); }
_ZN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE16driver_context_t10transitionEPNS_16StateTableDriverINS_13ObsoleteTypesEvEERKNS_5EntryIvEE:
  235|  4.15M|    {
  236|  4.15M|      hb_buffer_t *buffer = driver->buffer;
  237|  4.15M|      unsigned int flags = entry.flags;
  238|       |
  239|  4.15M|      if (flags & Format1EntryT::Reset)
  ------------------
  |  Branch (239:11): [True: 0, False: 4.15M]
  ------------------
  240|      0|	depth = 0;
  241|       |
  242|  4.15M|      if (flags & Format1EntryT::Push)
  ------------------
  |  Branch (242:11): [True: 2.56M, False: 1.58M]
  ------------------
  243|  2.56M|      {
  244|  2.56M|	if (likely (depth < ARRAY_LENGTH (stack)))
  ------------------
  |  |  258|  2.56M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.50M, False: 61.5k]
  |  |  ------------------
  ------------------
  245|  2.50M|	  stack[depth++] = buffer->idx;
  246|  61.5k|	else
  247|  61.5k|	  depth = 0; /* Probably not what CoreText does, but better? */
  248|  2.56M|      }
  249|       |
  250|  4.15M|      if (Format1EntryT::performAction (entry) && depth)
  ------------------
  |  Branch (250:11): [True: 1.91M, False: 2.23M]
  |  Branch (250:51): [True: 1.34M, False: 568k]
  ------------------
  251|  1.34M|      {
  252|  1.34M|	unsigned int tuple_count = hb_max (1u, table->header.tuple_count ());
  253|       |
  254|  1.34M|	unsigned int kern_idx = Format1EntryT::kernActionIndex (entry);
  255|  1.34M|	kern_idx = Types::byteOffsetToIndex (kern_idx, &table->machine, kernAction.arrayZ);
  256|  1.34M|	const FWORD *actions = &kernAction[kern_idx];
  257|  1.34M|	if (!c->sanitizer.check_array (actions, depth, tuple_count))
  ------------------
  |  Branch (257:6): [True: 477k, False: 869k]
  ------------------
  258|   477k|	{
  259|   477k|	  depth = 0;
  260|   477k|	  return;
  261|   477k|	}
  262|       |
  263|   869k|	hb_mask_t kern_mask = c->plan->kern_mask;
  264|       |
  265|       |	/* From Apple 'kern' spec:
  266|       |	 * "Each pops one glyph from the kerning stack and applies the kerning value to it.
  267|       |	 * The end of the list is marked by an odd value... */
  268|   869k|	bool last = false;
  269|  2.10M|	while (!last && depth)
  ------------------
  |  Branch (269:9): [True: 1.65M, False: 446k]
  |  Branch (269:18): [True: 1.23M, False: 423k]
  ------------------
  270|  1.23M|	{
  271|  1.23M|	  unsigned int idx = stack[--depth];
  272|  1.23M|	  int v = *actions;
  273|  1.23M|	  actions += tuple_count;
  274|  1.23M|	  if (idx >= buffer->len) continue;
  ------------------
  |  Branch (274:8): [True: 14, False: 1.23M]
  ------------------
  275|       |
  276|       |	  /* "The end of the list is marked by an odd value..." */
  277|  1.23M|	  last = v & 1;
  278|  1.23M|	  v &= ~1;
  279|       |
  280|  1.23M|	  hb_glyph_position_t &o = buffer->pos[idx];
  281|       |
  282|  1.23M|	  if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
  ------------------
  |  |  271|  1.23M|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 1.23M, False: 0]
  |  |  ------------------
  ------------------
  283|  1.23M|	  {
  284|  1.23M|	    if (crossStream)
  ------------------
  |  Branch (284:10): [True: 1.08M, False: 141k]
  ------------------
  285|  1.08M|	    {
  286|       |	      /* The following flag is undocumented in the spec, but described
  287|       |	       * in the 'kern' table example. */
  288|  1.08M|	      if (v == -0x8000)
  ------------------
  |  Branch (288:12): [True: 255k, False: 834k]
  ------------------
  289|   255k|	      {
  290|   255k|		o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  ------------------
  |  |   18|   255k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  291|   255k|		o.attach_chain() = 0;
  ------------------
  |  |   17|   255k|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  292|   255k|		o.y_offset = 0;
  293|   255k|	      }
  294|   834k|	      else if (o.attach_type())
  ------------------
  |  |   18|   834k|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  |  Branch (294:17): [True: 634k, False: 199k]
  ------------------
  295|   634k|	      {
  296|   634k|		o.y_offset += c->font->em_scale_y (v);
  297|   634k|		buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  298|   634k|	      }
  299|  1.08M|	    }
  300|   141k|	    else if (buffer->info[idx].mask & kern_mask)
  ------------------
  |  Branch (300:15): [True: 141k, False: 0]
  ------------------
  301|   141k|	    {
  302|   141k|	      o.x_advance += c->font->em_scale_x (v);
  303|   141k|	      o.x_offset += c->font->em_scale_x (v);
  304|   141k|	    }
  305|  1.23M|	  }
  306|      0|	  else
  307|      0|	  {
  308|      0|	    if (crossStream)
  ------------------
  |  Branch (308:10): [True: 0, False: 0]
  ------------------
  309|      0|	    {
  310|       |	      /* CoreText doesn't do crossStream kerning in vertical.  We do. */
  311|      0|	      if (v == -0x8000)
  ------------------
  |  Branch (311:12): [True: 0, False: 0]
  ------------------
  312|      0|	      {
  313|      0|		o.attach_type() = OT::Layout::GPOS_impl::ATTACH_TYPE_NONE;
  ------------------
  |  |   18|      0|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  314|      0|		o.attach_chain() = 0;
  ------------------
  |  |   17|      0|#define attach_chain() var.i16[0] /* glyph to which this attaches to, relative to current glyphs; negative for going back, positive for forward. */
  ------------------
  315|      0|		o.x_offset = 0;
  316|      0|	      }
  317|      0|	      else if (o.attach_type())
  ------------------
  |  |   18|      0|#define attach_type() var.u8[2] /* attachment type */
  ------------------
  |  Branch (317:17): [True: 0, False: 0]
  ------------------
  318|      0|	      {
  319|      0|		o.x_offset += c->font->em_scale_x (v);
  320|      0|		buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  321|      0|	      }
  322|      0|	    }
  323|      0|	    else if (buffer->info[idx].mask & kern_mask)
  ------------------
  |  Branch (323:15): [True: 0, False: 0]
  ------------------
  324|      0|	    {
  325|      0|	      o.y_advance += c->font->em_scale_y (v);
  326|      0|	      o.y_offset += c->font->em_scale_y (v);
  327|      0|	    }
  328|      0|	  }
  329|  1.23M|	}
  330|   869k|      }
  331|  4.15M|    }
_ZNK3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEE5applyEPNS_22hb_aat_apply_context_tE:
  397|    455|  {
  398|    455|    TRACE_APPLY (this);
  ------------------
  |  |  410|    455|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  399|       |
  400|    455|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (400:9): [True: 53, False: 402]
  ------------------
  401|     53|      return false;
  402|       |
  403|    402|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (403:9): [True: 0, False: 402]
  ------------------
  404|      0|      return false;
  405|       |
  406|    402|    accelerator_t accel (*this, c);
  407|    402|    hb_kern_machine_t<accelerator_t> machine (accel, header.coverage & header.CrossStream);
  408|    402|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
  409|       |
  410|    402|    return_trace (true);
  ------------------
  |  |  349|    402|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    402|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  411|    402|  }
_ZNK3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEE13accelerator_t11get_kerningEjj:
  423|   292k|    { return table.get_kerning (left, right, c); }
_ZNK3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEE11get_kerningEjjPNS_22hb_aat_apply_context_tE:
  382|   292k|  {
  383|   292k|    unsigned int num_glyphs = c->sanitizer.get_num_glyphs ();
  384|   292k|    unsigned int l = (this+leftClassTable).get_class (left, num_glyphs, 0);
  385|   292k|    unsigned int r = (this+rightClassTable).get_class (right, num_glyphs, 0);
  386|       |
  387|   292k|    const UnsizedArrayOf<FWORD> &arrayZ = this+array;
  388|   292k|    unsigned int kern_idx = l + r;
  389|   292k|    kern_idx = Types::offsetToIndex (kern_idx, this, arrayZ.arrayZ);
  390|   292k|    const FWORD *v = &arrayZ[kern_idx];
  391|   292k|    if (unlikely (!v->sanitize (&c->sanitizer))) return 0;
  ------------------
  |  |  259|   292k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 196k, False: 96.2k]
  |  |  ------------------
  ------------------
  392|       |
  393|  96.2k|    return kerxTupleKern (*v, header.tuple_count (), this, c);
  394|   292k|  }
_ZNK3AAT9KerxTableIN2OT6KernOTEE8sanitizeEP21hb_sanitize_context_t:
  937|    225|  {
  938|    225|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    225|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  939|    225|    if (unlikely (!thiz()->version.sanitize (c) ||
  ------------------
  |  |  259|    900|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 225]
  |  |  |  Branch (259:47): [True: 0, False: 225]
  |  |  |  Branch (259:47): [True: 0, False: 225]
  |  |  |  Branch (259:47): [True: 0, False: 225]
  |  |  ------------------
  ------------------
  940|    225|		  (unsigned) thiz()->version < (unsigned) T::minVersion ||
  941|    225|		  !thiz()->tableCount.sanitize (c)))
  942|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  943|       |
  944|    225|    typedef typename T::SubTable SubTable;
  945|       |
  946|    225|    const SubTable *st = &thiz()->firstSubTable;
  947|    225|    unsigned int count = thiz()->tableCount;
  948|  2.37k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (948:30): [True: 2.18k, False: 188]
  ------------------
  949|  2.18k|    {
  950|  2.18k|      if (unlikely (!st->u.header.sanitize (c)))
  ------------------
  |  |  259|  2.18k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 2.17k]
  |  |  ------------------
  ------------------
  951|      6|	return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  952|       |      /* OpenType kern table has 2-byte subtable lengths.  That's limiting.
  953|       |       * MS implementation also only supports one subtable, of format 0,
  954|       |       * anyway.  Certain versions of some fonts, like Calibry, contain
  955|       |       * kern subtable that exceeds 64kb.  Looks like, the subtable length
  956|       |       * is simply ignored.  Which makes sense.  It's only needed if you
  957|       |       * have multiple subtables.  To handle such fonts, we just ignore
  958|       |       * the length for the last subtable. */
  959|  2.17k|      hb_sanitize_with_object_t with (c, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (959:42): [True: 1.98k, False: 195]
  ------------------
  960|       |
  961|  2.17k|      if (unlikely (!st->sanitize (c)))
  ------------------
  |  |  259|  2.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 2.14k]
  |  |  ------------------
  ------------------
  962|     31|	return_trace (false);
  ------------------
  |  |  349|     31|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     31|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  963|       |
  964|  2.14k|      st = &StructAfter<SubTable> (*st);
  965|  2.14k|    }
  966|       |
  967|    188|    return_trace (true);
  ------------------
  |  |  349|    188|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    188|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  968|    225|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  135|    219|  {
  136|    219|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    219|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  137|    219|    return_trace (likely (pairs.sanitize (c)));
  ------------------
  |  |  349|    219|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    219|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  138|    219|  }
_ZNK3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  427|     93|  {
  428|     93|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     93|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  429|     93|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    543|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     93|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 92, False: 1]
  |  |  |  Branch (349:45): [True: 88, False: 4]
  |  |  |  Branch (349:45): [True: 84, False: 4]
  |  |  |  Branch (349:45): [True: 83, False: 1]
  |  |  ------------------
  ------------------
  430|     93|			  leftClassTable.sanitize (c, this) &&
  431|     93|			  rightClassTable.sanitize (c, this) &&
  432|     93|			  c->check_range (this, array)));
  433|     93|  }
_ZNK3AAT9KerxTableIN2OT7KernAATEE8sanitizeEP21hb_sanitize_context_t:
  937|    473|  {
  938|    473|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    473|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  939|    473|    if (unlikely (!thiz()->version.sanitize (c) ||
  ------------------
  |  |  259|  1.89k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 472]
  |  |  |  Branch (259:47): [True: 0, False: 473]
  |  |  |  Branch (259:47): [True: 0, False: 473]
  |  |  |  Branch (259:47): [True: 1, False: 472]
  |  |  ------------------
  ------------------
  940|    473|		  (unsigned) thiz()->version < (unsigned) T::minVersion ||
  941|    473|		  !thiz()->tableCount.sanitize (c)))
  942|      1|      return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  943|       |
  944|    472|    typedef typename T::SubTable SubTable;
  945|       |
  946|    472|    const SubTable *st = &thiz()->firstSubTable;
  947|    472|    unsigned int count = thiz()->tableCount;
  948|    964|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (948:30): [True: 615, False: 349]
  ------------------
  949|    615|    {
  950|    615|      if (unlikely (!st->u.header.sanitize (c)))
  ------------------
  |  |  259|    615|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 601]
  |  |  ------------------
  ------------------
  951|     14|	return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  952|       |      /* OpenType kern table has 2-byte subtable lengths.  That's limiting.
  953|       |       * MS implementation also only supports one subtable, of format 0,
  954|       |       * anyway.  Certain versions of some fonts, like Calibry, contain
  955|       |       * kern subtable that exceeds 64kb.  Looks like, the subtable length
  956|       |       * is simply ignored.  Which makes sense.  It's only needed if you
  957|       |       * have multiple subtables.  To handle such fonts, we just ignore
  958|       |       * the length for the last subtable. */
  959|    601|      hb_sanitize_with_object_t with (c, i < count - 1 ? st : (const SubTable *) nullptr);
  ------------------
  |  Branch (959:42): [True: 225, False: 376]
  ------------------
  960|       |
  961|    601|      if (unlikely (!st->sanitize (c)))
  ------------------
  |  |  259|    601|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 109, False: 492]
  |  |  ------------------
  ------------------
  962|    109|	return_trace (false);
  ------------------
  |  |  349|    109|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    109|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  963|       |
  964|    492|      st = &StructAfter<SubTable> (*st);
  965|    492|    }
  966|       |
  967|    349|    return_trace (true);
  ------------------
  |  |  349|    349|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    349|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  968|    472|  }
_ZNK3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  135|    117|  {
  136|    117|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    117|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  137|    117|    return_trace (likely (pairs.sanitize (c)));
  ------------------
  |  |  349|    117|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    117|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  138|    117|  }
_ZNK3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  359|    206|  {
  360|    206|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    206|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  361|       |    /* The rest of array sanitizations are done at run-time. */
  362|    206|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    410|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    206|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 204, False: 2]
  |  |  |  Branch (349:45): [True: 171, False: 33]
  |  |  ------------------
  ------------------
  363|    206|			  machine.sanitize (c)));
  364|    206|  }
_ZNK3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  427|     65|  {
  428|     65|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     65|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  429|     65|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    382|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64, False: 1]
  |  |  |  Branch (349:45): [True: 62, False: 2]
  |  |  |  Branch (349:45): [True: 61, False: 1]
  |  |  |  Branch (349:45): [True: 60, False: 1]
  |  |  ------------------
  ------------------
  430|     65|			  leftClassTable.sanitize (c, this) &&
  431|     65|			  rightClassTable.sanitize (c, this) &&
  432|     65|			  c->check_range (this, array)));
  433|     65|  }
_ZN3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEE13accelerator_tC2ERKS3_PNS_22hb_aat_apply_context_tE:
  127|    859|		     table (table_), c (c_) {}
hb-ot-layout.cc:_ZN3AATL13kerxTupleKernEijPKvPNS_22hb_aat_apply_context_tE:
   51|   255k|{
   52|   255k|  if (likely (!tupleCount || !c)) return value;
  ------------------
  |  |  258|   255k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 255k, False: 0]
  |  |  |  Branch (258:45): [True: 255k, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   53|       |
   54|      0|  unsigned int offset = value;
   55|      0|  const FWORD *pv = &StructAtOffset<FWORD> (base, offset);
   56|      0|  if (unlikely (!c->sanitizer.check_array (pv, tupleCount))) return 0;
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   57|      0|  return *pv;
   58|      0|}
_ZN3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEE13accelerator_tC2ERKS3_PNS_22hb_aat_apply_context_tE:
  420|    530|		     table (table_), c (c_) {}
_ZN3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEE13accelerator_tC2ERKS3_PNS_22hb_aat_apply_context_tE:
  127|    475|		     table (table_), c (c_) {}
_ZN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEE16driver_context_tC2EPKS3_PNS_22hb_aat_apply_context_tE:
  228|    633|	crossStream (table->header.coverage & table->header.CrossStream) {}
_ZN3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEE13accelerator_tC2ERKS3_PNS_22hb_aat_apply_context_tE:
  420|    402|		     table (table_), c (c_) {}

_ZNK3AAT8mortmorxINS_13ExtendedTypesELj1836020344EE8sanitizeEP21hb_sanitize_context_t:
 1174|  1.31k|  {
 1175|  1.31k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.31k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1176|  1.31k|    if (!version.sanitize (c) || !version || !chainCount.sanitize (c))
  ------------------
  |  Branch (1176:9): [True: 2, False: 1.30k]
  |  Branch (1176:34): [True: 6, False: 1.30k]
  |  Branch (1176:46): [True: 2, False: 1.30k]
  ------------------
 1177|     10|      return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1178|       |
 1179|  1.30k|    const Chain<Types> *chain = &firstChain;
 1180|  1.30k|    unsigned int count = chainCount;
 1181|  2.25k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1181:30): [True: 1.36k, False: 890]
  ------------------
 1182|  1.36k|    {
 1183|  1.36k|      if (!chain->sanitize (c, version))
  ------------------
  |  Branch (1183:11): [True: 410, False: 955]
  ------------------
 1184|    410|	return_trace (false);
  ------------------
  |  |  349|    410|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    410|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1185|    955|      chain = &StructAfter<Chain<Types>> (*chain);
 1186|    955|    }
 1187|       |
 1188|    890|    return_trace (true);
  ------------------
  |  |  349|    890|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    890|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1189|  1.30k|  }
_ZNK3AAT5ChainINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_tj:
 1090|  1.36k|  {
 1091|  1.36k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.36k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1092|  1.36k|    if (!length.sanitize (c) ||
  ------------------
  |  Branch (1092:9): [True: 6, False: 1.35k]
  ------------------
 1093|  1.36k|	length < min_size ||
  ------------------
  |  Branch (1093:2): [True: 4, False: 1.35k]
  ------------------
 1094|  1.36k|	!c->check_range (this, length))
  ------------------
  |  Branch (1094:2): [True: 65, False: 1.29k]
  ------------------
 1095|     75|      return_trace (false);
  ------------------
  |  |  349|     75|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     75|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1096|       |
 1097|  1.29k|    if (!c->check_array (featureZ.arrayZ, featureCount))
  ------------------
  |  Branch (1097:9): [True: 5, False: 1.28k]
  ------------------
 1098|      5|      return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1099|       |
 1100|  1.28k|    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
 1101|  1.28k|    unsigned int count = subtableCount;
 1102|  2.61k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1102:30): [True: 1.66k, False: 955]
  ------------------
 1103|  1.66k|    {
 1104|  1.66k|      if (!subtable->sanitize (c))
  ------------------
  |  Branch (1104:11): [True: 330, False: 1.33k]
  ------------------
 1105|    330|	return_trace (false);
  ------------------
  |  |  349|    330|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    330|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1106|  1.33k|      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
 1107|  1.33k|    }
 1108|       |
 1109|    955|    return_trace (true);
  ------------------
  |  |  349|    955|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    955|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1110|  1.28k|  }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  945|  1.66k|  {
  946|  1.66k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.66k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  947|  1.66k|    if (!length.sanitize (c) ||
  ------------------
  |  Branch (947:9): [True: 10, False: 1.65k]
  ------------------
  948|  1.66k|	length <= min_size ||
  ------------------
  |  Branch (948:2): [True: 4, False: 1.64k]
  ------------------
  949|  1.66k|	!c->check_range (this, length))
  ------------------
  |  Branch (949:2): [True: 51, False: 1.59k]
  ------------------
  950|     65|      return_trace (false);
  ------------------
  |  |  349|     65|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  951|       |
  952|  1.59k|    hb_sanitize_with_object_t with (c, this);
  953|  1.59k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  1.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  954|  1.66k|  }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE8get_sizeEv:
  894|  16.8k|  unsigned int get_size () const     { return length; }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
  924|  1.59k|  {
  925|  1.59k|    unsigned int subtable_type = get_type ();
  926|  1.59k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  1.59k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  927|  1.59k|    switch (subtable_type) {
  928|    224|    case Rearrangement:		return_trace (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    224|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    224|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (928:5): [True: 224, False: 1.37k]
  ------------------
  929|    391|    case Contextual:		return_trace (c->dispatch (u.contextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    391|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    391|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (929:5): [True: 391, False: 1.20k]
  ------------------
  930|    219|    case Ligature:		return_trace (c->dispatch (u.ligature, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    219|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    219|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (930:5): [True: 219, False: 1.37k]
  ------------------
  931|    145|    case Noncontextual:		return_trace (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    145|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    145|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (931:5): [True: 145, False: 1.45k]
  ------------------
  932|    474|    case Insertion:		return_trace (c->dispatch (u.insertion, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    474|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    474|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (932:5): [True: 474, False: 1.12k]
  ------------------
  933|    143|    default:			return_trace (c->default_return_value ());
  ------------------
  |  |  349|    143|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    143|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (933:5): [True: 143, False: 1.45k]
  ------------------
  934|  1.59k|    }
  935|  1.59k|  }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE8get_typeEv:
  895|  7.73k|  unsigned int get_type () const     { return coverage & 0xFF; }
_ZNK3AAT21RearrangementSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  178|    224|  {
  179|    224|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    224|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  180|    224|    return_trace (machine.sanitize (c));
  ------------------
  |  |  349|    224|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    224|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  181|    224|  }
_ZNK3AAT18ContextualSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  334|    391|  {
  335|    391|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    391|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  336|       |
  337|    391|    unsigned int num_entries = 0;
  338|    391|    if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false);
  ------------------
  |  |  259|    391|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 38, False: 353]
  |  |  ------------------
  ------------------
                  if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false);
  ------------------
  |  |  349|     38|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     38|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  339|       |
  340|    353|    if (!Types::extended)
  ------------------
  |  Branch (340:9): [Folded - Ignored]
  ------------------
  341|      0|      return_trace (substitutionTables.sanitize (c, this, 0));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  342|       |
  343|    353|    unsigned int num_lookups = 0;
  344|       |
  345|    353|    const Entry<EntryData> *entries = machine.get_entries ();
  346|  3.60M|    for (unsigned int i = 0; i < num_entries; i++)
  ------------------
  |  Branch (346:30): [True: 3.60M, False: 353]
  ------------------
  347|  3.60M|    {
  348|  3.60M|      const EntryData &data = entries[i].data;
  349|       |
  350|  3.60M|      if (data.markIndex != 0xFFFF)
  ------------------
  |  Branch (350:11): [True: 3.50M, False: 98.3k]
  ------------------
  351|  3.50M|	num_lookups = hb_max (num_lookups, 1u + data.markIndex);
  352|  3.60M|      if (data.currentIndex != 0xFFFF)
  ------------------
  |  Branch (352:11): [True: 3.50M, False: 98.5k]
  ------------------
  353|  3.50M|	num_lookups = hb_max (num_lookups, 1u + data.currentIndex);
  354|  3.60M|    }
  355|       |
  356|    353|    return_trace (substitutionTables.sanitize (c, this, num_lookups));
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  357|    353|  }
_ZNK3AAT16LigatureSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  586|    219|  {
  587|    219|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    219|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  588|       |    /* The rest of array sanitizations are done at run-time. */
  589|    219|    return_trace (c->check_struct (this) && machine.sanitize (c) &&
  ------------------
  |  |  349|  1.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    219|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 218, False: 1]
  |  |  |  Branch (349:45): [True: 177, False: 41]
  |  |  |  Branch (349:45): [True: 176, False: 1]
  |  |  |  Branch (349:45): [True: 174, False: 2]
  |  |  |  Branch (349:45): [True: 174, False: 0]
  |  |  ------------------
  ------------------
  590|    219|		  ligAction && component && ligature);
  591|    219|  }
_ZNK3AAT21NoncontextualSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  657|    145|  {
  658|    145|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    145|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  659|    145|    return_trace (substitute.sanitize (c));
  ------------------
  |  |  349|    145|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    145|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  660|    145|  }
_ZNK3AAT17InsertionSubtableINS_13ExtendedTypesEE8sanitizeEP21hb_sanitize_context_t:
  848|    474|  {
  849|    474|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    474|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  850|       |    /* The rest of array sanitizations are done at run-time. */
  851|    474|    return_trace (c->check_struct (this) && machine.sanitize (c) &&
  ------------------
  |  |  349|  1.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    474|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 472, False: 2]
  |  |  |  Branch (349:45): [True: 418, False: 54]
  |  |  |  Branch (349:45): [True: 418, False: 0]
  |  |  ------------------
  ------------------
  852|    474|		  insertionAction);
  853|    474|  }
_ZNK3AAT5ChainINS_13ExtendedTypesEE8get_sizeEv:
 1087|  11.9k|  unsigned int get_size () const { return length; }
_ZNK3AAT8mortmorxINS_13ExtendedTypesELj1836020344EE8has_dataEv:
 1136|  71.0k|  bool has_data () const { return version != 0; }
_ZNK3AAT8mortmorxINS_13ExtendedTypesELj1836020344EE13compile_flagsEPK20hb_aat_map_builder_tP12hb_aat_map_t:
 1140|  5.42k|  {
 1141|  5.42k|    const Chain<Types> *chain = &firstChain;
 1142|  5.42k|    unsigned int count = chainCount;
 1143|  5.42k|    if (unlikely (!map->chain_flags.resize (count)))
  ------------------
  |  |  259|  5.42k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 265, False: 5.15k]
  |  |  ------------------
  ------------------
 1144|    265|      return;
 1145|  10.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1145:30): [True: 5.27k, False: 5.15k]
  ------------------
 1146|  5.27k|    {
 1147|  5.27k|      map->chain_flags[i].push (hb_aat_map_t::range_flags_t {chain->compile_flags (mapper),
 1148|  5.27k|							     mapper->range_first,
 1149|  5.27k|							     mapper->range_last});
 1150|  5.27k|      chain = &StructAfter<Chain<Types>> (*chain);
 1151|  5.27k|    }
 1152|  5.15k|  }
_ZNK3AAT5ChainINS_13ExtendedTypesEE13compile_flagsEPK20hb_aat_map_builder_t:
  977|  5.27k|  {
  978|  5.27k|    hb_mask_t flags = defaultFlags;
  979|  5.27k|    {
  980|  5.27k|      unsigned int count = featureCount;
  981|   243k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (981:28): [True: 238k, False: 5.27k]
  ------------------
  982|   238k|      {
  983|   238k|	const Feature &feature = featureZ[i];
  984|   238k|	hb_aat_layout_feature_type_t type = (hb_aat_layout_feature_type_t) (unsigned int) feature.featureType;
  985|   238k|	hb_aat_layout_feature_selector_t setting = (hb_aat_layout_feature_selector_t) (unsigned int) feature.featureSetting;
  986|   239k|      retry:
  987|       |	// Check whether this type/setting pair was requested in the map, and if so, apply its flags.
  988|       |	// (The search here only looks at the type and setting fields of feature_info_t.)
  989|   239k|	hb_aat_map_builder_t::feature_info_t info = { type, setting, false, 0 };
  990|   239k|	if (map->current_features.bsearch (info))
  ------------------
  |  Branch (990:6): [True: 0, False: 239k]
  ------------------
  991|      0|	{
  992|      0|	  flags &= feature.disableFlags;
  993|      0|	  flags |= feature.enableFlags;
  994|      0|	}
  995|   239k|	else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE && setting == HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS)
  ------------------
  |  Branch (995:11): [True: 4.86k, False: 234k]
  |  Branch (995:61): [True: 495, False: 4.37k]
  ------------------
  996|    495|	{
  997|       |	  /* Deprecated. https://github.com/harfbuzz/harfbuzz/issues/1342 */
  998|    495|	  type = HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE;
  999|    495|	  setting = HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS;
 1000|    495|	  goto retry;
 1001|    495|	}
 1002|   238k|#ifndef HB_NO_AAT
 1003|   238k|	else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE && setting &&
  ------------------
  |  Branch (1003:11): [True: 498, False: 238k]
  |  Branch (1003:67): [True: 254, False: 244]
  ------------------
 1004|       |		 /* TODO: Rudimentary language matching. */
 1005|   238k|		 hb_language_matches (map->face->table.ltag->get_language (setting - 1), map->props.language))
  ------------------
  |  Branch (1005:4): [True: 0, False: 254]
  ------------------
 1006|      0|	{
 1007|      0|	  flags &= feature.disableFlags;
 1008|      0|	  flags |= feature.enableFlags;
 1009|      0|	}
 1010|   239k|#endif
 1011|   239k|      }
 1012|  5.27k|    }
 1013|  5.27k|    return flags;
 1014|  5.27k|  }
_ZNK3AAT8mortmorxINS_13ObsoleteTypesELj1836020340EE8sanitizeEP21hb_sanitize_context_t:
 1174|  1.12k|  {
 1175|  1.12k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.12k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1176|  1.12k|    if (!version.sanitize (c) || !version || !chainCount.sanitize (c))
  ------------------
  |  Branch (1176:9): [True: 1, False: 1.12k]
  |  Branch (1176:34): [True: 1, False: 1.12k]
  |  Branch (1176:46): [True: 2, False: 1.12k]
  ------------------
 1177|      4|      return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1178|       |
 1179|  1.12k|    const Chain<Types> *chain = &firstChain;
 1180|  1.12k|    unsigned int count = chainCount;
 1181|  2.90k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1181:30): [True: 2.02k, False: 877]
  ------------------
 1182|  2.02k|    {
 1183|  2.02k|      if (!chain->sanitize (c, version))
  ------------------
  |  Branch (1183:11): [True: 243, False: 1.78k]
  ------------------
 1184|    243|	return_trace (false);
  ------------------
  |  |  349|    243|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    243|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1185|  1.78k|      chain = &StructAfter<Chain<Types>> (*chain);
 1186|  1.78k|    }
 1187|       |
 1188|    877|    return_trace (true);
  ------------------
  |  |  349|    877|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    877|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1189|  1.12k|  }
_ZNK3AAT5ChainINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_tj:
 1090|  2.02k|  {
 1091|  2.02k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.02k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1092|  2.02k|    if (!length.sanitize (c) ||
  ------------------
  |  Branch (1092:9): [True: 18, False: 2.01k]
  ------------------
 1093|  2.02k|	length < min_size ||
  ------------------
  |  Branch (1093:2): [True: 5, False: 2.00k]
  ------------------
 1094|  2.02k|	!c->check_range (this, length))
  ------------------
  |  Branch (1094:2): [True: 53, False: 1.95k]
  ------------------
 1095|     76|      return_trace (false);
  ------------------
  |  |  349|     76|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     76|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1096|       |
 1097|  1.95k|    if (!c->check_array (featureZ.arrayZ, featureCount))
  ------------------
  |  Branch (1097:9): [True: 11, False: 1.94k]
  ------------------
 1098|     11|      return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1099|       |
 1100|  1.94k|    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
 1101|  1.94k|    unsigned int count = subtableCount;
 1102|  4.81k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1102:30): [True: 3.03k, False: 1.78k]
  ------------------
 1103|  3.03k|    {
 1104|  3.03k|      if (!subtable->sanitize (c))
  ------------------
  |  Branch (1104:11): [True: 156, False: 2.87k]
  ------------------
 1105|    156|	return_trace (false);
  ------------------
  |  |  349|    156|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    156|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1106|  2.87k|      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
 1107|  2.87k|    }
 1108|       |
 1109|  1.78k|    return_trace (true);
  ------------------
  |  |  349|  1.78k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.78k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1110|  1.94k|  }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  945|  3.03k|  {
  946|  3.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  947|  3.03k|    if (!length.sanitize (c) ||
  ------------------
  |  Branch (947:9): [True: 9, False: 3.02k]
  ------------------
  948|  3.03k|	length <= min_size ||
  ------------------
  |  Branch (948:2): [True: 4, False: 3.02k]
  ------------------
  949|  3.03k|	!c->check_range (this, length))
  ------------------
  |  Branch (949:2): [True: 17, False: 3.00k]
  ------------------
  950|     30|      return_trace (false);
  ------------------
  |  |  349|     30|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     30|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  951|       |
  952|  3.00k|    hb_sanitize_with_object_t with (c, this);
  953|  3.00k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  3.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  954|  3.03k|  }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE8get_sizeEv:
  894|  46.5k|  unsigned int get_size () const     { return length; }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
  924|  3.00k|  {
  925|  3.00k|    unsigned int subtable_type = get_type ();
  926|  3.00k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  3.00k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  927|  3.00k|    switch (subtable_type) {
  928|    180|    case Rearrangement:		return_trace (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    180|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    180|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (928:5): [True: 180, False: 2.82k]
  ------------------
  929|    340|    case Contextual:		return_trace (c->dispatch (u.contextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    340|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    340|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (929:5): [True: 340, False: 2.66k]
  ------------------
  930|    179|    case Ligature:		return_trace (c->dispatch (u.ligature, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    179|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    179|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (930:5): [True: 179, False: 2.82k]
  ------------------
  931|    484|    case Noncontextual:		return_trace (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    484|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    484|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (931:5): [True: 484, False: 2.51k]
  ------------------
  932|    566|    case Insertion:		return_trace (c->dispatch (u.insertion, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    566|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    566|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (932:5): [True: 566, False: 2.43k]
  ------------------
  933|  1.25k|    default:			return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.25k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.25k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (933:5): [True: 1.25k, False: 1.74k]
  ------------------
  934|  3.00k|    }
  935|  3.00k|  }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE8get_typeEv:
  895|  22.0k|  unsigned int get_type () const     { return coverage & 0xFF; }
_ZNK3AAT21RearrangementSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  178|    180|  {
  179|    180|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    180|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  180|    180|    return_trace (machine.sanitize (c));
  ------------------
  |  |  349|    180|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    180|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  181|    180|  }
_ZNK3AAT18ContextualSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  334|    340|  {
  335|    340|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    340|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  336|       |
  337|    340|    unsigned int num_entries = 0;
  338|    340|    if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false);
  ------------------
  |  |  259|    340|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36, False: 304]
  |  |  ------------------
  ------------------
                  if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false);
  ------------------
  |  |  349|     36|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  339|       |
  340|    304|    if (!Types::extended)
  ------------------
  |  Branch (340:9): [Folded - Ignored]
  ------------------
  341|    304|      return_trace (substitutionTables.sanitize (c, this, 0));
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  342|       |
  343|      0|    unsigned int num_lookups = 0;
  344|       |
  345|      0|    const Entry<EntryData> *entries = machine.get_entries ();
  346|      0|    for (unsigned int i = 0; i < num_entries; i++)
  ------------------
  |  Branch (346:30): [True: 0, False: 0]
  ------------------
  347|      0|    {
  348|      0|      const EntryData &data = entries[i].data;
  349|       |
  350|      0|      if (data.markIndex != 0xFFFF)
  ------------------
  |  Branch (350:11): [True: 0, False: 0]
  ------------------
  351|      0|	num_lookups = hb_max (num_lookups, 1u + data.markIndex);
  352|      0|      if (data.currentIndex != 0xFFFF)
  ------------------
  |  Branch (352:11): [True: 0, False: 0]
  ------------------
  353|      0|	num_lookups = hb_max (num_lookups, 1u + data.currentIndex);
  354|      0|    }
  355|       |
  356|      0|    return_trace (substitutionTables.sanitize (c, this, num_lookups));
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  357|    304|  }
_ZNK3AAT16LigatureSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  586|    179|  {
  587|    179|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    179|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  588|       |    /* The rest of array sanitizations are done at run-time. */
  589|    179|    return_trace (c->check_struct (this) && machine.sanitize (c) &&
  ------------------
  |  |  349|  1.41k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    179|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 178, False: 1]
  |  |  |  Branch (349:45): [True: 175, False: 3]
  |  |  |  Branch (349:45): [True: 174, False: 1]
  |  |  |  Branch (349:45): [True: 173, False: 1]
  |  |  |  Branch (349:45): [True: 173, False: 0]
  |  |  ------------------
  ------------------
  590|    179|		  ligAction && component && ligature);
  591|    179|  }
_ZNK3AAT21NoncontextualSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  657|    484|  {
  658|    484|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    484|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  659|    484|    return_trace (substitute.sanitize (c));
  ------------------
  |  |  349|    484|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    484|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  660|    484|  }
_ZNK3AAT17InsertionSubtableINS_13ObsoleteTypesEE8sanitizeEP21hb_sanitize_context_t:
  848|    566|  {
  849|    566|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    566|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  850|       |    /* The rest of array sanitizations are done at run-time. */
  851|    566|    return_trace (c->check_struct (this) && machine.sanitize (c) &&
  ------------------
  |  |  349|  2.23k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    566|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 565, False: 1]
  |  |  |  Branch (349:45): [True: 535, False: 30]
  |  |  |  Branch (349:45): [True: 534, False: 1]
  |  |  ------------------
  ------------------
  852|    566|		  insertionAction);
  853|    566|  }
_ZNK3AAT5ChainINS_13ObsoleteTypesEE8get_sizeEv:
 1087|  21.4k|  unsigned int get_size () const { return length; }
_ZNK3AAT8mortmorxINS_13ObsoleteTypesELj1836020340EE8has_dataEv:
 1136|  58.7k|  bool has_data () const { return version != 0; }
_ZNK3AAT8mortmorxINS_13ObsoleteTypesELj1836020340EE13compile_flagsEPK20hb_aat_map_builder_tP12hb_aat_map_t:
 1140|  5.13k|  {
 1141|  5.13k|    const Chain<Types> *chain = &firstChain;
 1142|  5.13k|    unsigned int count = chainCount;
 1143|  5.13k|    if (unlikely (!map->chain_flags.resize (count)))
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 261, False: 4.87k]
  |  |  ------------------
  ------------------
 1144|    261|      return;
 1145|  14.1k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1145:30): [True: 9.32k, False: 4.87k]
  ------------------
 1146|  9.32k|    {
 1147|  9.32k|      map->chain_flags[i].push (hb_aat_map_t::range_flags_t {chain->compile_flags (mapper),
 1148|  9.32k|							     mapper->range_first,
 1149|  9.32k|							     mapper->range_last});
 1150|  9.32k|      chain = &StructAfter<Chain<Types>> (*chain);
 1151|  9.32k|    }
 1152|  4.87k|  }
_ZNK3AAT5ChainINS_13ObsoleteTypesEE13compile_flagsEPK20hb_aat_map_builder_t:
  977|  9.32k|  {
  978|  9.32k|    hb_mask_t flags = defaultFlags;
  979|  9.32k|    {
  980|  9.32k|      unsigned int count = featureCount;
  981|   553k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (981:28): [True: 544k, False: 9.32k]
  ------------------
  982|   544k|      {
  983|   544k|	const Feature &feature = featureZ[i];
  984|   544k|	hb_aat_layout_feature_type_t type = (hb_aat_layout_feature_type_t) (unsigned int) feature.featureType;
  985|   544k|	hb_aat_layout_feature_selector_t setting = (hb_aat_layout_feature_selector_t) (unsigned int) feature.featureSetting;
  986|   545k|      retry:
  987|       |	// Check whether this type/setting pair was requested in the map, and if so, apply its flags.
  988|       |	// (The search here only looks at the type and setting fields of feature_info_t.)
  989|   545k|	hb_aat_map_builder_t::feature_info_t info = { type, setting, false, 0 };
  990|   545k|	if (map->current_features.bsearch (info))
  ------------------
  |  Branch (990:6): [True: 0, False: 545k]
  ------------------
  991|      0|	{
  992|      0|	  flags &= feature.disableFlags;
  993|      0|	  flags |= feature.enableFlags;
  994|      0|	}
  995|   545k|	else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE && setting == HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS)
  ------------------
  |  Branch (995:11): [True: 4.98k, False: 540k]
  |  Branch (995:61): [True: 709, False: 4.27k]
  ------------------
  996|    709|	{
  997|       |	  /* Deprecated. https://github.com/harfbuzz/harfbuzz/issues/1342 */
  998|    709|	  type = HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE;
  999|    709|	  setting = HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS;
 1000|    709|	  goto retry;
 1001|    709|	}
 1002|   544k|#ifndef HB_NO_AAT
 1003|   544k|	else if (type == HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE && setting &&
  ------------------
  |  Branch (1003:11): [True: 707, False: 543k]
  |  Branch (1003:67): [True: 440, False: 267]
  ------------------
 1004|       |		 /* TODO: Rudimentary language matching. */
 1005|   544k|		 hb_language_matches (map->face->table.ltag->get_language (setting - 1), map->props.language))
  ------------------
  |  Branch (1005:4): [True: 0, False: 440]
  ------------------
 1006|      0|	{
 1007|      0|	  flags &= feature.disableFlags;
 1008|      0|	  flags |= feature.enableFlags;
 1009|      0|	}
 1010|   545k|#endif
 1011|   545k|      }
 1012|  9.32k|    }
 1013|  9.32k|    return flags;
 1014|  9.32k|  }
_ZNK3AAT8mortmorxINS_13ExtendedTypesELj1836020344EE5applyEPNS_22hb_aat_apply_context_tERK12hb_aat_map_t:
 1156|  5.72k|  {
 1157|  5.72k|    if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  5.72k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.72k]
  |  |  ------------------
  ------------------
 1158|       |
 1159|  5.72k|    c->buffer->unsafe_to_concat ();
 1160|       |
 1161|  5.72k|    c->set_lookup_index (0);
 1162|  5.72k|    const Chain<Types> *chain = &firstChain;
 1163|  5.72k|    unsigned int count = chainCount;
 1164|  11.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1164:30): [True: 5.91k, False: 5.52k]
  ------------------
 1165|  5.91k|    {
 1166|  5.91k|      c->range_flags = &map.chain_flags[i];
 1167|  5.91k|      chain->apply (c);
 1168|  5.91k|      if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  5.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 199, False: 5.71k]
  |  |  ------------------
  ------------------
 1169|  5.71k|      chain = &StructAfter<Chain<Types>> (*chain);
 1170|  5.71k|    }
 1171|  5.72k|  }
_ZNK3AAT5ChainINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
 1017|  5.91k|  {
 1018|  5.91k|    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
 1019|  5.91k|    unsigned int count = subtableCount;
 1020|  13.7k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1020:30): [True: 7.99k, False: 5.71k]
  ------------------
 1021|  7.99k|    {
 1022|  7.99k|      bool reverse;
 1023|       |
 1024|  7.99k|      if (hb_none (hb_iter (c->range_flags) |
  ------------------
  |  Branch (1024:11): [True: 1.59k, False: 6.40k]
  ------------------
 1025|  7.99k|		   hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
 1026|  1.59k|	goto skip;
 1027|  6.40k|      c->subtable_flags = subtable->subFeatureFlags;
 1028|       |
 1029|  6.40k|      if (!(subtable->get_coverage() & ChainSubtable<Types>::AllDirections) &&
  ------------------
  |  Branch (1029:11): [True: 1.88k, False: 4.52k]
  ------------------
 1030|  6.40k|	  HB_DIRECTION_IS_VERTICAL (c->buffer->props.direction) !=
  ------------------
  |  |  280|  1.88k|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  ------------------
  |  Branch (1030:4): [True: 268, False: 1.61k]
  ------------------
 1031|  1.88k|	  bool (subtable->get_coverage() & ChainSubtable<Types>::Vertical))
 1032|    268|	goto skip;
 1033|       |
 1034|       |      /* Buffer contents is always in logical direction.  Determine if
 1035|       |       * we need to reverse before applying this subtable.  We reverse
 1036|       |       * back after if we did reverse indeed.
 1037|       |       *
 1038|       |       * Quoting the spac:
 1039|       |       * """
 1040|       |       * Bits 28 and 30 of the coverage field control the order in which
 1041|       |       * glyphs are processed when the subtable is run by the layout engine.
 1042|       |       * Bit 28 is used to indicate if the glyph processing direction is
 1043|       |       * the same as logical order or layout order. Bit 30 is used to
 1044|       |       * indicate whether glyphs are processed forwards or backwards within
 1045|       |       * that order.
 1046|       |
 1047|       |		Bit 30	Bit 28	Interpretation for Horizontal Text
 1048|       |		0	0	The subtable is processed in layout order
 1049|       |				(the same order as the glyphs, which is
 1050|       |				always left-to-right).
 1051|       |		1	0	The subtable is processed in reverse layout order
 1052|       |				(the order opposite that of the glyphs, which is
 1053|       |				always right-to-left).
 1054|       |		0	1	The subtable is processed in logical order
 1055|       |				(the same order as the characters, which may be
 1056|       |				left-to-right or right-to-left).
 1057|       |		1	1	The subtable is processed in reverse logical order
 1058|       |				(the order opposite that of the characters, which
 1059|       |				may be right-to-left or left-to-right).
 1060|       |       */
 1061|  6.13k|      reverse = subtable->get_coverage () & ChainSubtable<Types>::Logical ?
  ------------------
  |  Branch (1061:17): [True: 1.62k, False: 4.51k]
  ------------------
 1062|  1.62k|		bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) :
 1063|  6.13k|		bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) !=
 1064|  4.51k|		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
  ------------------
  |  |  298|  10.6k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
 1065|       |
 1066|  6.13k|      if (!c->buffer->message (c->font, "start chainsubtable %u", c->lookup_index))
  ------------------
  |  Branch (1066:11): [True: 0, False: 6.13k]
  ------------------
 1067|      0|	goto skip;
 1068|       |
 1069|  6.13k|      if (reverse)
  ------------------
  |  Branch (1069:11): [True: 1.66k, False: 4.47k]
  ------------------
 1070|  1.66k|	c->buffer->reverse ();
 1071|       |
 1072|  6.13k|      subtable->apply (c);
 1073|       |
 1074|  6.13k|      if (reverse)
  ------------------
  |  Branch (1074:11): [True: 1.66k, False: 4.47k]
  ------------------
 1075|  1.66k|	c->buffer->reverse ();
 1076|       |
 1077|  6.13k|      (void) c->buffer->message (c->font, "end chainsubtable %u", c->lookup_index);
 1078|       |
 1079|  6.13k|      if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  6.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 199, False: 5.93k]
  |  |  ------------------
  ------------------
 1080|       |
 1081|  7.79k|    skip:
 1082|  7.79k|      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
 1083|  7.79k|      c->set_lookup_index (c->lookup_index + 1);
 1084|  7.79k|    }
 1085|  5.91k|  }
_ZZNK3AAT5ChainINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tEENKUlN12hb_aat_map_t13range_flags_tEE_clES6_:
 1025|  6.69k|		   hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE12get_coverageEv:
  896|  20.5k|  unsigned int get_coverage () const { return coverage >> (sizeof (HBUINT) * 8 - 8); }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  938|  6.13k|  {
  939|  6.13k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  6.13k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  940|  6.13k|    hb_sanitize_with_object_t with (&c->sanitizer, this);
  941|  6.13k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  6.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  942|  6.13k|  }
_ZNK3AAT13ChainSubtableINS_13ExtendedTypesEE8dispatchINS_22hb_aat_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
  924|  6.13k|  {
  925|  6.13k|    unsigned int subtable_type = get_type ();
  926|  6.13k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  6.13k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  927|  6.13k|    switch (subtable_type) {
  928|    895|    case Rearrangement:		return_trace (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    895|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    895|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (928:5): [True: 895, False: 5.24k]
  ------------------
  929|  1.34k|    case Contextual:		return_trace (c->dispatch (u.contextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (929:5): [True: 1.34k, False: 4.79k]
  ------------------
  930|    935|    case Ligature:		return_trace (c->dispatch (u.ligature, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    935|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    935|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (930:5): [True: 935, False: 5.20k]
  ------------------
  931|    713|    case Noncontextual:		return_trace (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    713|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    713|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (931:5): [True: 713, False: 5.42k]
  ------------------
  932|  1.66k|    case Insertion:		return_trace (c->dispatch (u.insertion, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (932:5): [True: 1.66k, False: 4.47k]
  ------------------
  933|    593|    default:			return_trace (c->default_return_value ());
  ------------------
  |  |  349|    593|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    593|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (933:5): [True: 593, False: 5.54k]
  ------------------
  934|  6.13k|    }
  935|  6.13k|  }
_ZNK3AAT21RearrangementSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  166|    895|  {
  167|    895|    TRACE_APPLY (this);
  ------------------
  |  |  410|    895|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  168|       |
  169|    895|    driver_context_t dc (this);
  170|       |
  171|    895|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  172|    895|    driver.drive (&dc, c);
  173|       |
  174|    895|    return_trace (dc.ret);
  ------------------
  |  |  349|    895|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    895|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  175|    895|  }
_ZN3AAT21RearrangementSubtableINS_13ExtendedTypesEE16driver_context_tC2EPKS2_:
   75|    895|	start (0), end (0) {}
_ZN3AAT21RearrangementSubtableINS_13ExtendedTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
   79|  8.12M|    {
   80|  8.12M|      return (entry.flags & Verb) && start < end;
  ------------------
  |  Branch (80:14): [True: 4.52M, False: 3.59M]
  |  Branch (80:38): [True: 3.12M, False: 1.40M]
  ------------------
   81|  8.12M|    }
_ZN3AAT21RearrangementSubtableINS_13ExtendedTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
   84|  4.80M|    {
   85|  4.80M|      hb_buffer_t *buffer = driver->buffer;
   86|  4.80M|      unsigned int flags = entry.flags;
   87|       |
   88|  4.80M|      if (flags & MarkFirst)
  ------------------
  |  Branch (88:11): [True: 2.47M, False: 2.33M]
  ------------------
   89|  2.47M|	start = buffer->idx;
   90|       |
   91|  4.80M|      if (flags & MarkLast)
  ------------------
  |  Branch (91:11): [True: 2.79M, False: 2.01M]
  ------------------
   92|  2.79M|	end = hb_min (buffer->idx + 1, buffer->len);
   93|       |
   94|  4.80M|      if ((flags & Verb) && start < end)
  ------------------
  |  Branch (94:11): [True: 2.38M, False: 2.41M]
  |  Branch (94:29): [True: 1.79M, False: 593k]
  ------------------
   95|  1.79M|      {
   96|       |	/* The following map has two nibbles, for start-side
   97|       |	 * and end-side. Values of 0,1,2 mean move that many
   98|       |	 * to the other side. Value of 3 means move 2 and
   99|       |	 * flip them. */
  100|  1.79M|	const unsigned char map[16] =
  101|  1.79M|	{
  102|  1.79M|	  0x00,	/* 0	no change */
  103|  1.79M|	  0x10,	/* 1	Ax => xA */
  104|  1.79M|	  0x01,	/* 2	xD => Dx */
  105|  1.79M|	  0x11,	/* 3	AxD => DxA */
  106|  1.79M|	  0x20,	/* 4	ABx => xAB */
  107|  1.79M|	  0x30,	/* 5	ABx => xBA */
  108|  1.79M|	  0x02,	/* 6	xCD => CDx */
  109|  1.79M|	  0x03,	/* 7	xCD => DCx */
  110|  1.79M|	  0x12,	/* 8	AxCD => CDxA */
  111|  1.79M|	  0x13,	/* 9	AxCD => DCxA */
  112|  1.79M|	  0x21,	/* 10	ABxD => DxAB */
  113|  1.79M|	  0x31,	/* 11	ABxD => DxBA */
  114|  1.79M|	  0x22,	/* 12	ABxCD => CDxAB */
  115|  1.79M|	  0x32,	/* 13	ABxCD => CDxBA */
  116|  1.79M|	  0x23,	/* 14	ABxCD => DCxAB */
  117|  1.79M|	  0x33,	/* 15	ABxCD => DCxBA */
  118|  1.79M|	};
  119|       |
  120|  1.79M|	unsigned int m = map[flags & Verb];
  121|  1.79M|	unsigned int l = hb_min (2u, m >> 4);
  122|  1.79M|	unsigned int r = hb_min (2u, m & 0x0F);
  123|  1.79M|	bool reverse_l = 3 == (m >> 4);
  124|  1.79M|	bool reverse_r = 3 == (m & 0x0F);
  125|       |
  126|  1.79M|	if (end - start >= l + r && end-start <= HB_MAX_CONTEXT_LENGTH)
  ------------------
  |  |   58|   595k|#define HB_MAX_CONTEXT_LENGTH 64
  ------------------
  |  Branch (126:6): [True: 595k, False: 1.19M]
  |  Branch (126:30): [True: 541k, False: 54.0k]
  ------------------
  127|   541k|	{
  128|   541k|	  buffer->merge_clusters (start, hb_min (buffer->idx + 1, buffer->len));
  129|   541k|	  buffer->merge_clusters (start, end);
  130|       |
  131|   541k|	  hb_glyph_info_t *info = buffer->info;
  132|   541k|	  hb_glyph_info_t buf[4];
  133|       |
  134|   541k|	  hb_memcpy (buf, info + start, l * sizeof (buf[0]));
  135|   541k|	  hb_memcpy (buf + 2, info + end - r, r * sizeof (buf[0]));
  136|       |
  137|   541k|	  if (l != r)
  ------------------
  |  Branch (137:8): [True: 540k, False: 1.19k]
  ------------------
  138|   540k|	    memmove (info + start + r, info + start + l, (end - start - l - r) * sizeof (buf[0]));
  139|       |
  140|   541k|	  hb_memcpy (info + start, buf + 2, r * sizeof (buf[0]));
  141|   541k|	  hb_memcpy (info + end - l, buf, l * sizeof (buf[0]));
  142|   541k|	  if (reverse_l)
  ------------------
  |  Branch (142:8): [True: 1.11k, False: 540k]
  ------------------
  143|  1.11k|	  {
  144|  1.11k|	    buf[0] = info[end - 1];
  145|  1.11k|	    info[end - 1] = info[end - 2];
  146|  1.11k|	    info[end - 2] = buf[0];
  147|  1.11k|	  }
  148|   541k|	  if (reverse_r)
  ------------------
  |  Branch (148:8): [True: 1.11k, False: 540k]
  ------------------
  149|  1.11k|	  {
  150|  1.11k|	    buf[0] = info[start];
  151|  1.11k|	    info[start] = info[start + 1];
  152|  1.11k|	    info[start + 1] = buf[0];
  153|  1.11k|	  }
  154|   541k|	}
  155|  1.79M|      }
  156|  4.80M|    }
_ZNK3AAT18ContextualSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  322|  1.34k|  {
  323|  1.34k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.34k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  324|       |
  325|  1.34k|    driver_context_t dc (this, c);
  326|       |
  327|  1.34k|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  328|  1.34k|    driver.drive (&dc, c);
  329|       |
  330|  1.34k|    return_trace (dc.ret);
  ------------------
  |  |  349|  1.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  331|  1.34k|  }
_ZN3AAT18ContextualSubtableINS_13ExtendedTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  224|  1.34k|	subs (table+table->substitutionTables) {}
_ZN3AAT18ContextualSubtableINS_13ExtendedTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  228|  10.9M|    {
  229|  10.9M|      hb_buffer_t *buffer = driver->buffer;
  230|       |
  231|  10.9M|      if (buffer->idx == buffer->len && !mark_set)
  ------------------
  |  Branch (231:11): [True: 2.66k, False: 10.9M]
  |  Branch (231:41): [True: 1.90k, False: 762]
  ------------------
  232|  1.90k|	return false;
  233|       |
  234|  10.9M|      return entry.data.markIndex != 0xFFFF || entry.data.currentIndex != 0xFFFF;
  ------------------
  |  Branch (234:14): [True: 4.03M, False: 6.90M]
  |  Branch (234:48): [True: 202k, False: 6.69M]
  ------------------
  235|  10.9M|    }
_ZN3AAT18ContextualSubtableINS_13ExtendedTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  238|  6.53M|    {
  239|  6.53M|      hb_buffer_t *buffer = driver->buffer;
  240|       |
  241|       |      /* Looks like CoreText applies neither mark nor current substitution for
  242|       |       * end-of-text if mark was not explicitly set. */
  243|  6.53M|      if (buffer->idx == buffer->len && !mark_set)
  ------------------
  |  Branch (243:11): [True: 1.34k, False: 6.53M]
  |  Branch (243:41): [True: 852, False: 489]
  ------------------
  244|    852|	return;
  245|       |
  246|  6.53M|      const HBGlyphID16 *replacement;
  247|       |
  248|  6.53M|      replacement = nullptr;
  249|  6.53M|      if (Types::extended)
  ------------------
  |  Branch (249:11): [Folded - Ignored]
  ------------------
  250|  6.53M|      {
  251|  6.53M|	if (entry.data.markIndex != 0xFFFF)
  ------------------
  |  Branch (251:6): [True: 3.07M, False: 3.45M]
  ------------------
  252|  3.07M|	{
  253|  3.07M|	  const Lookup<HBGlyphID16> &lookup = subs[entry.data.markIndex];
  254|  3.07M|	  replacement = lookup.get_value (buffer->info[mark].codepoint, driver->num_glyphs);
  255|  3.07M|	}
  256|  6.53M|      }
  257|      0|      else
  258|      0|      {
  259|      0|	unsigned int offset = entry.data.markIndex + buffer->info[mark].codepoint;
  260|      0|	const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
  261|      0|	replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
  262|      0|	if (!replacement->sanitize (&c->sanitizer) || !*replacement)
  ------------------
  |  Branch (262:6): [True: 0, False: 0]
  |  Branch (262:48): [True: 0, False: 0]
  ------------------
  263|      0|	  replacement = nullptr;
  264|      0|      }
  265|  6.53M|      if (replacement)
  ------------------
  |  Branch (265:11): [True: 259k, False: 6.27M]
  ------------------
  266|   259k|      {
  267|   259k|	buffer->unsafe_to_break (mark, hb_min (buffer->idx + 1, buffer->len));
  268|   259k|	buffer->info[mark].codepoint = *replacement;
  269|   259k|	if (has_glyph_classes)
  ------------------
  |  Branch (269:6): [True: 5, False: 259k]
  ------------------
  270|      5|	  _hb_glyph_info_set_glyph_props (&buffer->info[mark],
  271|      5|					  gdef.get_glyph_props (*replacement));
  272|   259k|	ret = true;
  273|   259k|      }
  274|       |
  275|  6.53M|      replacement = nullptr;
  276|  6.53M|      unsigned int idx = hb_min (buffer->idx, buffer->len - 1);
  277|  6.53M|      if (Types::extended)
  ------------------
  |  Branch (277:11): [Folded - Ignored]
  ------------------
  278|  6.53M|      {
  279|  6.53M|	if (entry.data.currentIndex != 0xFFFF)
  ------------------
  |  Branch (279:6): [True: 3.05M, False: 3.47M]
  ------------------
  280|  3.05M|	{
  281|  3.05M|	  const Lookup<HBGlyphID16> &lookup = subs[entry.data.currentIndex];
  282|  3.05M|	  replacement = lookup.get_value (buffer->info[idx].codepoint, driver->num_glyphs);
  283|  3.05M|	}
  284|  6.53M|      }
  285|      0|      else
  286|      0|      {
  287|      0|	unsigned int offset = entry.data.currentIndex + buffer->info[idx].codepoint;
  288|      0|	const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
  289|      0|	replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
  290|      0|	if (!replacement->sanitize (&c->sanitizer) || !*replacement)
  ------------------
  |  Branch (290:6): [True: 0, False: 0]
  |  Branch (290:48): [True: 0, False: 0]
  ------------------
  291|      0|	  replacement = nullptr;
  292|      0|      }
  293|  6.53M|      if (replacement)
  ------------------
  |  Branch (293:11): [True: 315k, False: 6.21M]
  ------------------
  294|   315k|      {
  295|   315k|	buffer->info[idx].codepoint = *replacement;
  296|   315k|	if (has_glyph_classes)
  ------------------
  |  Branch (296:6): [True: 9, False: 315k]
  ------------------
  297|      9|	  _hb_glyph_info_set_glyph_props (&buffer->info[idx],
  298|      9|					  gdef.get_glyph_props (*replacement));
  299|   315k|	ret = true;
  300|   315k|      }
  301|       |
  302|  6.53M|      if (entry.flags & SetMark)
  ------------------
  |  Branch (302:11): [True: 3.85M, False: 2.68M]
  ------------------
  303|  3.85M|      {
  304|  3.85M|	mark_set = true;
  305|  3.85M|	mark = buffer->idx;
  306|  3.85M|      }
  307|  6.53M|    }
_ZNK3AAT16LigatureSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  574|    935|  {
  575|    935|    TRACE_APPLY (this);
  ------------------
  |  |  410|    935|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  576|       |
  577|    935|    driver_context_t dc (this, c);
  578|       |
  579|    935|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  580|    935|    driver.drive (&dc, c);
  581|       |
  582|    935|    return_trace (dc.ret);
  ------------------
  |  |  349|    935|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    935|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  583|    935|  }
_ZN3AAT16LigatureSubtableINS_13ExtendedTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  460|    935|	match_length (0) {}
_ZN3AAT16LigatureSubtableINS_13ExtendedTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_NS_13LigatureEntryILb1EE9EntryDataEEERKNS_5EntryIS7_EE:
  464|  7.71M|    {
  465|  7.71M|      return LigatureEntryT::performAction (entry);
  466|  7.71M|    }
_ZN3AAT13LigatureEntryILb1EE13performActionERKNS_5EntryINS1_9EntryDataEEE:
  396|  12.6M|  { return entry.flags & PerformAction; }
_ZN3AAT16LigatureSubtableINS_13ExtendedTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_NS_13LigatureEntryILb1EE9EntryDataEEERKNS_5EntryIS7_EE:
  469|  4.96M|    {
  470|  4.96M|      hb_buffer_t *buffer = driver->buffer;
  471|       |
  472|  4.96M|      DEBUG_MSG (APPLY, nullptr, "Ligature transition at %u", buffer->idx);
  ------------------
  |  |  232|  4.96M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  473|  4.96M|      if (entry.flags & LigatureEntryT::SetComponent)
  ------------------
  |  Branch (473:11): [True: 3.21M, False: 1.75M]
  ------------------
  474|  3.21M|      {
  475|       |	/* Never mark same index twice, in case DontAdvance was used... */
  476|  3.21M|	if (match_length && match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] == buffer->out_len)
  ------------------
  |  Branch (476:6): [True: 2.45M, False: 758k]
  |  Branch (476:22): [True: 2.45M, False: 3.05k]
  ------------------
  477|  2.45M|	  match_length--;
  478|       |
  479|  3.21M|	match_positions[match_length++ % ARRAY_LENGTH (match_positions)] = buffer->out_len;
  480|  3.21M|	DEBUG_MSG (APPLY, nullptr, "Set component at %u", buffer->out_len);
  ------------------
  |  |  232|  3.21M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  481|  3.21M|      }
  482|       |
  483|  4.96M|      if (LigatureEntryT::performAction (entry))
  ------------------
  |  Branch (483:11): [True: 2.55M, False: 2.41M]
  ------------------
  484|  2.55M|      {
  485|  2.55M|	DEBUG_MSG (APPLY, nullptr, "Perform action with %u", match_length);
  ------------------
  |  |  232|  2.55M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  486|  2.55M|	unsigned int end = buffer->out_len;
  487|       |
  488|  2.55M|	if (unlikely (!match_length))
  ------------------
  |  |  259|  2.55M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 112k, False: 2.44M]
  |  |  ------------------
  ------------------
  489|   112k|	  return;
  490|       |
  491|  2.44M|	if (buffer->idx >= buffer->len)
  ------------------
  |  Branch (491:6): [True: 248, False: 2.44M]
  ------------------
  492|    248|	  return; /* TODO Work on previous instead? */
  493|       |
  494|  2.44M|	unsigned int cursor = match_length;
  495|       |
  496|  2.44M|	unsigned int action_idx = LigatureEntryT::ligActionIndex (entry);
  497|  2.44M|	action_idx = Types::offsetToIndex (action_idx, table, ligAction.arrayZ);
  498|  2.44M|	const HBUINT32 *actionData = &ligAction[action_idx];
  499|       |
  500|  2.44M|	unsigned int ligature_idx = 0;
  501|  2.44M|	unsigned int action;
  502|  2.44M|	do
  503|  3.20M|	{
  504|  3.20M|	  if (unlikely (!cursor))
  ------------------
  |  |  259|  3.20M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 758k, False: 2.44M]
  |  |  ------------------
  ------------------
  505|   758k|	  {
  506|       |	    /* Stack underflow.  Clear the stack. */
  507|   758k|	    DEBUG_MSG (APPLY, nullptr, "Stack underflow");
  ------------------
  |  |  232|   758k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  508|   758k|	    match_length = 0;
  509|   758k|	    break;
  510|   758k|	  }
  511|       |
  512|  2.44M|	  DEBUG_MSG (APPLY, nullptr, "Moving to stack position %u", cursor - 1);
  ------------------
  |  |  232|  2.44M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  513|  2.44M|	  if (unlikely (!buffer->move_to (match_positions[--cursor % ARRAY_LENGTH (match_positions)]))) return;
  ------------------
  |  |  259|  2.44M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.44M]
  |  |  ------------------
  ------------------
  514|       |
  515|  2.44M|	  if (unlikely (!actionData->sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|  2.44M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 695k, False: 1.74M]
  |  |  ------------------
  ------------------
  516|  1.74M|	  action = *actionData;
  517|       |
  518|  1.74M|	  uint32_t uoffset = action & LigActionOffset;
  519|  1.74M|	  if (uoffset & 0x20000000)
  ------------------
  |  Branch (519:8): [True: 94.8k, False: 1.65M]
  ------------------
  520|  94.8k|	    uoffset |= 0xC0000000; /* Sign-extend. */
  521|  1.74M|	  int32_t offset = (int32_t) uoffset;
  522|  1.74M|	  unsigned int component_idx = buffer->cur().codepoint + offset;
  523|  1.74M|	  component_idx = Types::wordOffsetToIndex (component_idx, table, component.arrayZ);
  524|  1.74M|	  const HBUINT16 &componentData = component[component_idx];
  525|  1.74M|	  if (unlikely (!componentData.sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|  1.74M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 408k, False: 1.34M]
  |  |  ------------------
  ------------------
  526|  1.34M|	  ligature_idx += componentData;
  527|       |
  528|  1.34M|	  DEBUG_MSG (APPLY, nullptr, "Action store %d last %d",
  ------------------
  |  |  232|  1.34M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  529|  1.34M|		     bool (action & LigActionStore),
  530|  1.34M|		     bool (action & LigActionLast));
  531|  1.34M|	  if (action & (LigActionStore | LigActionLast))
  ------------------
  |  Branch (531:8): [True: 709k, False: 631k]
  ------------------
  532|   709k|	  {
  533|   709k|	    ligature_idx = Types::offsetToIndex (ligature_idx, table, ligature.arrayZ);
  534|   709k|	    const HBGlyphID16 &ligatureData = ligature[ligature_idx];
  535|   709k|	    if (unlikely (!ligatureData.sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|   709k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 543k, False: 166k]
  |  |  ------------------
  ------------------
  536|   166k|	    hb_codepoint_t lig = ligatureData;
  537|       |
  538|   166k|	    DEBUG_MSG (APPLY, nullptr, "Produced ligature %u", lig);
  ------------------
  |  |  232|   166k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  539|   166k|	    if (unlikely (!buffer->replace_glyph (lig))) return;
  ------------------
  |  |  259|   166k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 166k]
  |  |  ------------------
  ------------------
  540|       |
  541|   166k|	    unsigned int lig_end = match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] + 1u;
  542|       |	    /* Now go and delete all subsequent components. */
  543|   166k|	    while (match_length - 1u > cursor)
  ------------------
  |  Branch (543:13): [True: 251, False: 166k]
  ------------------
  544|    251|	    {
  545|    251|	      DEBUG_MSG (APPLY, nullptr, "Skipping ligature component");
  ------------------
  |  |  232|    251|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  546|    251|	      if (unlikely (!buffer->move_to (match_positions[--match_length % ARRAY_LENGTH (match_positions)]))) return;
  ------------------
  |  |  259|    251|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 251]
  |  |  ------------------
  ------------------
  547|    251|	      if (unlikely (!buffer->replace_glyph (DELETED_GLYPH))) return;
  ------------------
  |  |  259|    251|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 251]
  |  |  ------------------
  ------------------
  548|    251|	    }
  549|       |
  550|   166k|	    if (unlikely (!buffer->move_to (lig_end))) return;
  ------------------
  |  |  259|   166k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 166k]
  |  |  ------------------
  ------------------
  551|   166k|	    buffer->merge_out_clusters (match_positions[cursor % ARRAY_LENGTH (match_positions)], buffer->out_len);
  552|   166k|	  }
  553|       |
  554|   798k|	  actionData++;
  555|   798k|	}
  556|  2.44M|	while (!(action & LigActionLast));
  ------------------
  |  Branch (556:9): [True: 759k, False: 38.9k]
  ------------------
  557|  2.44M|	if (unlikely (!buffer->move_to (end))) return;
  ------------------
  |  |  259|  2.44M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.44M]
  |  |  ------------------
  ------------------
  558|  2.44M|      }
  559|  4.96M|    }
_ZN3AAT13LigatureEntryILb1EE14ligActionIndexERKNS_5EntryINS1_9EntryDataEEE:
  399|  2.44M|  { return entry.data.ligActionIndex; }
_ZNK3AAT21NoncontextualSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  610|    713|  {
  611|    713|    TRACE_APPLY (this);
  ------------------
  |  |  410|    713|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  612|       |
  613|    713|    const OT::GDEF &gdef (*c->gdef_table);
  614|    713|    bool has_glyph_classes = gdef.has_glyph_classes ();
  615|       |
  616|    713|    bool ret = false;
  617|    713|    unsigned int num_glyphs = c->face->get_num_glyphs ();
  618|       |
  619|    713|    hb_glyph_info_t *info = c->buffer->info;
  620|    713|    unsigned int count = c->buffer->len;
  621|       |    // If there's only one range, we already checked the flag.
  622|    713|    auto *last_range = c->range_flags && (c->range_flags->length > 1) ? &(*c->range_flags)[0] : nullptr;
  ------------------
  |  Branch (622:24): [True: 713, False: 0]
  |  Branch (622:42): [True: 0, False: 713]
  ------------------
  623|   159k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (623:30): [True: 158k, False: 713]
  ------------------
  624|   158k|    {
  625|       |      /* This block copied from StateTableDriver::drive. Keep in sync. */
  626|   158k|      if (last_range)
  ------------------
  |  Branch (626:11): [True: 0, False: 158k]
  ------------------
  627|      0|      {
  628|      0|	auto *range = last_range;
  629|      0|	{
  630|      0|	  unsigned cluster = info[i].cluster;
  631|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (631:11): [True: 0, False: 0]
  ------------------
  632|      0|	    range--;
  633|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (633:11): [True: 0, False: 0]
  ------------------
  634|      0|	    range++;
  635|       |
  636|      0|	  last_range = range;
  637|      0|	}
  638|      0|	if (!(range->flags & c->subtable_flags))
  ------------------
  |  Branch (638:6): [True: 0, False: 0]
  ------------------
  639|      0|	  continue;
  640|      0|      }
  641|       |
  642|   158k|      const HBGlyphID16 *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
  643|   158k|      if (replacement)
  ------------------
  |  Branch (643:11): [True: 4.76k, False: 153k]
  ------------------
  644|  4.76k|      {
  645|  4.76k|	info[i].codepoint = *replacement;
  646|  4.76k|	if (has_glyph_classes)
  ------------------
  |  Branch (646:6): [True: 696, False: 4.06k]
  ------------------
  647|    696|	  _hb_glyph_info_set_glyph_props (&info[i],
  648|    696|					  gdef.get_glyph_props (*replacement));
  649|  4.76k|	ret = true;
  650|  4.76k|      }
  651|   158k|    }
  652|       |
  653|    713|    return_trace (ret);
  ------------------
  |  |  349|    713|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    713|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  654|    713|  }
_ZNK3AAT17InsertionSubtableINS_13ExtendedTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  836|  1.66k|  {
  837|  1.66k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.66k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  838|       |
  839|  1.66k|    driver_context_t dc (this, c);
  840|       |
  841|  1.66k|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  842|  1.66k|    driver.drive (&dc, c);
  843|       |
  844|  1.66k|    return_trace (dc.ret);
  ------------------
  |  |  349|  1.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  845|  1.66k|  }
_ZN3AAT17InsertionSubtableINS_13ExtendedTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  745|  1.66k|	insertionAction (table+table->insertionAction) {}
_ZN3AAT17InsertionSubtableINS_13ExtendedTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  749|  5.94M|    {
  750|  5.94M|      return (entry.flags & (CurrentInsertCount | MarkedInsertCount)) &&
  ------------------
  |  Branch (750:14): [True: 3.42M, False: 2.51M]
  ------------------
  751|  5.94M|	     (entry.data.currentInsertIndex != 0xFFFF ||entry.data.markedInsertIndex != 0xFFFF);
  ------------------
  |  Branch (751:8): [True: 2.11M, False: 1.30M]
  |  Branch (751:50): [True: 143k, False: 1.16M]
  ------------------
  752|  5.94M|    }
_ZN3AAT17InsertionSubtableINS_13ExtendedTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  755|  3.28M|    {
  756|  3.28M|      hb_buffer_t *buffer = driver->buffer;
  757|  3.28M|      unsigned int flags = entry.flags;
  758|       |
  759|  3.28M|      unsigned mark_loc = buffer->out_len;
  760|       |
  761|  3.28M|      if (entry.data.markedInsertIndex != 0xFFFF)
  ------------------
  |  Branch (761:11): [True: 2.55M, False: 728k]
  ------------------
  762|  2.55M|      {
  763|  2.55M|	unsigned int count = (flags & MarkedInsertCount);
  764|  2.55M|	if (unlikely ((buffer->max_ops -= count) <= 0)) return;
  ------------------
  |  |  259|  2.55M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 835k, False: 1.71M]
  |  |  ------------------
  ------------------
  765|  1.71M|	unsigned int start = entry.data.markedInsertIndex;
  766|  1.71M|	const HBGlyphID16 *glyphs = &insertionAction[start];
  767|  1.71M|	if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
  ------------------
  |  |  259|  1.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 84.5k, False: 1.63M]
  |  |  ------------------
  ------------------
  768|       |
  769|  1.71M|	bool before = flags & MarkedInsertBefore;
  770|       |
  771|  1.71M|	unsigned int end = buffer->out_len;
  772|  1.71M|	if (unlikely (!buffer->move_to (mark))) return;
  ------------------
  |  |  259|  1.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 75, False: 1.71M]
  |  |  ------------------
  ------------------
  773|       |
  774|  1.71M|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (774:6): [True: 1.71M, False: 0]
  |  Branch (774:35): [True: 1.22M, False: 487k]
  ------------------
  775|  1.22M|	  if (unlikely (!buffer->copy_glyph ())) return;
  ------------------
  |  |  259|  1.22M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.22M]
  |  |  ------------------
  ------------------
  776|       |	/* TODO We ignore KashidaLike setting. */
  777|  1.71M|	if (unlikely (!buffer->replace_glyphs (0, count, glyphs))) return;
  ------------------
  |  |  259|  1.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 1.71M]
  |  |  ------------------
  ------------------
  778|  1.71M|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (778:6): [True: 1.71M, False: 0]
  |  Branch (778:35): [True: 1.22M, False: 487k]
  ------------------
  779|  1.22M|	  buffer->skip_glyph ();
  780|       |
  781|  1.71M|	if (unlikely (!buffer->move_to (end + count))) return;
  ------------------
  |  |  259|  1.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 1.71M]
  |  |  ------------------
  ------------------
  782|       |
  783|  1.71M|	buffer->unsafe_to_break_from_outbuffer (mark, hb_min (buffer->idx + 1, buffer->len));
  784|  1.71M|      }
  785|       |
  786|  2.44M|      if (flags & SetMark)
  ------------------
  |  Branch (786:11): [True: 1.05M, False: 1.38M]
  ------------------
  787|  1.05M|	mark = mark_loc;
  788|       |
  789|  2.44M|      if (entry.data.currentInsertIndex != 0xFFFF)
  ------------------
  |  Branch (789:11): [True: 1.94M, False: 503k]
  ------------------
  790|  1.94M|      {
  791|  1.94M|	unsigned int count = (flags & CurrentInsertCount) >> 5;
  792|  1.94M|	if (unlikely ((buffer->max_ops -= count) <= 0)) return;
  ------------------
  |  |  259|  1.94M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 133k, False: 1.80M]
  |  |  ------------------
  ------------------
  793|  1.80M|	unsigned int start = entry.data.currentInsertIndex;
  794|  1.80M|	const HBGlyphID16 *glyphs = &insertionAction[start];
  795|  1.80M|	if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
  ------------------
  |  |  259|  1.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 257k, False: 1.54M]
  |  |  ------------------
  ------------------
  796|       |
  797|  1.80M|	bool before = flags & CurrentInsertBefore;
  798|       |
  799|  1.80M|	unsigned int end = buffer->out_len;
  800|       |
  801|  1.80M|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (801:6): [True: 1.77M, False: 35.0k]
  |  Branch (801:35): [True: 1.48M, False: 288k]
  ------------------
  802|  1.48M|	  if (unlikely (!buffer->copy_glyph ())) return;
  ------------------
  |  |  259|  1.48M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 1.48M]
  |  |  ------------------
  ------------------
  803|       |	/* TODO We ignore KashidaLike setting. */
  804|  1.80M|	if (unlikely (!buffer->replace_glyphs (0, count, glyphs))) return;
  ------------------
  |  |  259|  1.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37, False: 1.80M]
  |  |  ------------------
  ------------------
  805|  1.80M|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (805:6): [True: 1.77M, False: 35.0k]
  |  Branch (805:35): [True: 1.48M, False: 288k]
  ------------------
  806|  1.48M|	  buffer->skip_glyph ();
  807|       |
  808|       |	/* Humm. Not sure where to move to.  There's this wording under
  809|       |	 * DontAdvance flag:
  810|       |	 *
  811|       |	 * "If set, don't update the glyph index before going to the new state.
  812|       |	 * This does not mean that the glyph pointed to is the same one as
  813|       |	 * before. If you've made insertions immediately downstream of the
  814|       |	 * current glyph, the next glyph processed would in fact be the first
  815|       |	 * one inserted."
  816|       |	 *
  817|       |	 * This suggests that if DontAdvance is NOT set, we should move to
  818|       |	 * end+count.  If it *was*, then move to end, such that newly inserted
  819|       |	 * glyphs are now visible.
  820|       |	 *
  821|       |	 * https://github.com/harfbuzz/harfbuzz/issues/1224#issuecomment-427691417
  822|       |	 */
  823|  1.80M|	if (unlikely (!buffer->move_to ((flags & DontAdvance) ? end : end + count))) return;
  ------------------
  |  |  259|  3.61M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 1.80M]
  |  |  |  Branch (259:47): [True: 1.46M, False: 341k]
  |  |  ------------------
  ------------------
  824|  1.80M|      }
  825|  2.44M|    }
_ZNK3AAT8mortmorxINS_13ObsoleteTypesELj1836020340EE5applyEPNS_22hb_aat_apply_context_tERK12hb_aat_map_t:
 1156|  5.46k|  {
 1157|  5.46k|    if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  5.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.46k]
  |  |  ------------------
  ------------------
 1158|       |
 1159|  5.46k|    c->buffer->unsafe_to_concat ();
 1160|       |
 1161|  5.46k|    c->set_lookup_index (0);
 1162|  5.46k|    const Chain<Types> *chain = &firstChain;
 1163|  5.46k|    unsigned int count = chainCount;
 1164|  15.7k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1164:30): [True: 10.4k, False: 5.35k]
  ------------------
 1165|  10.4k|    {
 1166|  10.4k|      c->range_flags = &map.chain_flags[i];
 1167|  10.4k|      chain->apply (c);
 1168|  10.4k|      if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  10.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 109, False: 10.3k]
  |  |  ------------------
  ------------------
 1169|  10.3k|      chain = &StructAfter<Chain<Types>> (*chain);
 1170|  10.3k|    }
 1171|  5.46k|  }
_ZNK3AAT5ChainINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
 1017|  10.4k|  {
 1018|  10.4k|    const ChainSubtable<Types> *subtable = &StructAfter<ChainSubtable<Types>> (featureZ.as_array (featureCount));
 1019|  10.4k|    unsigned int count = subtableCount;
 1020|  32.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1020:30): [True: 21.6k, False: 10.3k]
  ------------------
 1021|  21.6k|    {
 1022|  21.6k|      bool reverse;
 1023|       |
 1024|  21.6k|      if (hb_none (hb_iter (c->range_flags) |
  ------------------
  |  Branch (1024:11): [True: 2.42k, False: 19.2k]
  ------------------
 1025|  21.6k|		   hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
 1026|  2.42k|	goto skip;
 1027|  19.2k|      c->subtable_flags = subtable->subFeatureFlags;
 1028|       |
 1029|  19.2k|      if (!(subtable->get_coverage() & ChainSubtable<Types>::AllDirections) &&
  ------------------
  |  Branch (1029:11): [True: 13.9k, False: 5.29k]
  ------------------
 1030|  19.2k|	  HB_DIRECTION_IS_VERTICAL (c->buffer->props.direction) !=
  ------------------
  |  |  280|  13.9k|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  ------------------
  |  Branch (1030:4): [True: 186, False: 13.7k]
  ------------------
 1031|  13.9k|	  bool (subtable->get_coverage() & ChainSubtable<Types>::Vertical))
 1032|    186|	goto skip;
 1033|       |
 1034|       |      /* Buffer contents is always in logical direction.  Determine if
 1035|       |       * we need to reverse before applying this subtable.  We reverse
 1036|       |       * back after if we did reverse indeed.
 1037|       |       *
 1038|       |       * Quoting the spac:
 1039|       |       * """
 1040|       |       * Bits 28 and 30 of the coverage field control the order in which
 1041|       |       * glyphs are processed when the subtable is run by the layout engine.
 1042|       |       * Bit 28 is used to indicate if the glyph processing direction is
 1043|       |       * the same as logical order or layout order. Bit 30 is used to
 1044|       |       * indicate whether glyphs are processed forwards or backwards within
 1045|       |       * that order.
 1046|       |
 1047|       |		Bit 30	Bit 28	Interpretation for Horizontal Text
 1048|       |		0	0	The subtable is processed in layout order
 1049|       |				(the same order as the glyphs, which is
 1050|       |				always left-to-right).
 1051|       |		1	0	The subtable is processed in reverse layout order
 1052|       |				(the order opposite that of the glyphs, which is
 1053|       |				always right-to-left).
 1054|       |		0	1	The subtable is processed in logical order
 1055|       |				(the same order as the characters, which may be
 1056|       |				left-to-right or right-to-left).
 1057|       |		1	1	The subtable is processed in reverse logical order
 1058|       |				(the order opposite that of the characters, which
 1059|       |				may be right-to-left or left-to-right).
 1060|       |       */
 1061|  19.0k|      reverse = subtable->get_coverage () & ChainSubtable<Types>::Logical ?
  ------------------
  |  Branch (1061:17): [True: 2.73k, False: 16.3k]
  ------------------
 1062|  2.73k|		bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) :
 1063|  19.0k|		bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) !=
 1064|  16.3k|		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
  ------------------
  |  |  298|  35.4k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
 1065|       |
 1066|  19.0k|      if (!c->buffer->message (c->font, "start chainsubtable %u", c->lookup_index))
  ------------------
  |  Branch (1066:11): [True: 0, False: 19.0k]
  ------------------
 1067|      0|	goto skip;
 1068|       |
 1069|  19.0k|      if (reverse)
  ------------------
  |  Branch (1069:11): [True: 4.93k, False: 14.1k]
  ------------------
 1070|  4.93k|	c->buffer->reverse ();
 1071|       |
 1072|  19.0k|      subtable->apply (c);
 1073|       |
 1074|  19.0k|      if (reverse)
  ------------------
  |  Branch (1074:11): [True: 4.93k, False: 14.1k]
  ------------------
 1075|  4.93k|	c->buffer->reverse ();
 1076|       |
 1077|  19.0k|      (void) c->buffer->message (c->font, "end chainsubtable %u", c->lookup_index);
 1078|       |
 1079|  19.0k|      if (unlikely (!c->buffer->successful)) return;
  ------------------
  |  |  259|  19.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 109, False: 18.9k]
  |  |  ------------------
  ------------------
 1080|       |
 1081|  21.5k|    skip:
 1082|  21.5k|      subtable = &StructAfter<ChainSubtable<Types>> (*subtable);
 1083|  21.5k|      c->set_lookup_index (c->lookup_index + 1);
 1084|  21.5k|    }
 1085|  10.4k|  }
_ZZNK3AAT5ChainINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tEENKUlN12hb_aat_map_t13range_flags_tEE_clES6_:
 1025|  19.5k|		   hb_map ([&subtable] (const hb_aat_map_t::range_flags_t _) -> bool { return subtable->subFeatureFlags & (_.flags); })))
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE12get_coverageEv:
  896|  71.4k|  unsigned int get_coverage () const { return coverage >> (sizeof (HBUINT) * 8 - 8); }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  938|  19.0k|  {
  939|  19.0k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  19.0k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  940|  19.0k|    hb_sanitize_with_object_t with (&c->sanitizer, this);
  941|  19.0k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  19.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  942|  19.0k|  }
_ZNK3AAT13ChainSubtableINS_13ObsoleteTypesEE8dispatchINS_22hb_aat_apply_context_tEJEEENT_8return_tEPS5_DpOT0_:
  924|  19.0k|  {
  925|  19.0k|    unsigned int subtable_type = get_type ();
  926|  19.0k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  19.0k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  927|  19.0k|    switch (subtable_type) {
  928|    943|    case Rearrangement:		return_trace (c->dispatch (u.rearrangement, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    943|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    943|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (928:5): [True: 943, False: 18.1k]
  ------------------
  929|  1.48k|    case Contextual:		return_trace (c->dispatch (u.contextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (929:5): [True: 1.48k, False: 17.6k]
  ------------------
  930|    654|    case Ligature:		return_trace (c->dispatch (u.ligature, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    654|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    654|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (930:5): [True: 654, False: 18.4k]
  ------------------
  931|  2.84k|    case Noncontextual:		return_trace (c->dispatch (u.noncontextual, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (931:5): [True: 2.84k, False: 16.2k]
  ------------------
  932|  2.02k|    case Insertion:		return_trace (c->dispatch (u.insertion, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (932:5): [True: 2.02k, False: 17.0k]
  ------------------
  933|  11.1k|    default:			return_trace (c->default_return_value ());
  ------------------
  |  |  349|  11.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (933:5): [True: 11.1k, False: 7.94k]
  ------------------
  934|  19.0k|    }
  935|  19.0k|  }
_ZNK3AAT21RearrangementSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  166|    943|  {
  167|    943|    TRACE_APPLY (this);
  ------------------
  |  |  410|    943|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  168|       |
  169|    943|    driver_context_t dc (this);
  170|       |
  171|    943|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  172|    943|    driver.drive (&dc, c);
  173|       |
  174|    943|    return_trace (dc.ret);
  ------------------
  |  |  349|    943|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    943|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  175|    943|  }
_ZN3AAT21RearrangementSubtableINS_13ObsoleteTypesEE16driver_context_tC2EPKS2_:
   75|    943|	start (0), end (0) {}
_ZN3AAT21RearrangementSubtableINS_13ObsoleteTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
   79|  5.52M|    {
   80|  5.52M|      return (entry.flags & Verb) && start < end;
  ------------------
  |  Branch (80:14): [True: 3.42M, False: 2.10M]
  |  Branch (80:38): [True: 2.71M, False: 703k]
  ------------------
   81|  5.52M|    }
_ZN3AAT21RearrangementSubtableINS_13ObsoleteTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
   84|  3.88M|    {
   85|  3.88M|      hb_buffer_t *buffer = driver->buffer;
   86|  3.88M|      unsigned int flags = entry.flags;
   87|       |
   88|  3.88M|      if (flags & MarkFirst)
  ------------------
  |  Branch (88:11): [True: 2.12M, False: 1.76M]
  ------------------
   89|  2.12M|	start = buffer->idx;
   90|       |
   91|  3.88M|      if (flags & MarkLast)
  ------------------
  |  Branch (91:11): [True: 2.76M, False: 1.12M]
  ------------------
   92|  2.76M|	end = hb_min (buffer->idx + 1, buffer->len);
   93|       |
   94|  3.88M|      if ((flags & Verb) && start < end)
  ------------------
  |  Branch (94:11): [True: 2.76M, False: 1.12M]
  |  Branch (94:29): [True: 2.56M, False: 198k]
  ------------------
   95|  2.56M|      {
   96|       |	/* The following map has two nibbles, for start-side
   97|       |	 * and end-side. Values of 0,1,2 mean move that many
   98|       |	 * to the other side. Value of 3 means move 2 and
   99|       |	 * flip them. */
  100|  2.56M|	const unsigned char map[16] =
  101|  2.56M|	{
  102|  2.56M|	  0x00,	/* 0	no change */
  103|  2.56M|	  0x10,	/* 1	Ax => xA */
  104|  2.56M|	  0x01,	/* 2	xD => Dx */
  105|  2.56M|	  0x11,	/* 3	AxD => DxA */
  106|  2.56M|	  0x20,	/* 4	ABx => xAB */
  107|  2.56M|	  0x30,	/* 5	ABx => xBA */
  108|  2.56M|	  0x02,	/* 6	xCD => CDx */
  109|  2.56M|	  0x03,	/* 7	xCD => DCx */
  110|  2.56M|	  0x12,	/* 8	AxCD => CDxA */
  111|  2.56M|	  0x13,	/* 9	AxCD => DCxA */
  112|  2.56M|	  0x21,	/* 10	ABxD => DxAB */
  113|  2.56M|	  0x31,	/* 11	ABxD => DxBA */
  114|  2.56M|	  0x22,	/* 12	ABxCD => CDxAB */
  115|  2.56M|	  0x32,	/* 13	ABxCD => CDxBA */
  116|  2.56M|	  0x23,	/* 14	ABxCD => DCxAB */
  117|  2.56M|	  0x33,	/* 15	ABxCD => DCxBA */
  118|  2.56M|	};
  119|       |
  120|  2.56M|	unsigned int m = map[flags & Verb];
  121|  2.56M|	unsigned int l = hb_min (2u, m >> 4);
  122|  2.56M|	unsigned int r = hb_min (2u, m & 0x0F);
  123|  2.56M|	bool reverse_l = 3 == (m >> 4);
  124|  2.56M|	bool reverse_r = 3 == (m & 0x0F);
  125|       |
  126|  2.56M|	if (end - start >= l + r && end-start <= HB_MAX_CONTEXT_LENGTH)
  ------------------
  |  |   58|   447k|#define HB_MAX_CONTEXT_LENGTH 64
  ------------------
  |  Branch (126:6): [True: 447k, False: 2.11M]
  |  Branch (126:30): [True: 395k, False: 51.8k]
  ------------------
  127|   395k|	{
  128|   395k|	  buffer->merge_clusters (start, hb_min (buffer->idx + 1, buffer->len));
  129|   395k|	  buffer->merge_clusters (start, end);
  130|       |
  131|   395k|	  hb_glyph_info_t *info = buffer->info;
  132|   395k|	  hb_glyph_info_t buf[4];
  133|       |
  134|   395k|	  hb_memcpy (buf, info + start, l * sizeof (buf[0]));
  135|   395k|	  hb_memcpy (buf + 2, info + end - r, r * sizeof (buf[0]));
  136|       |
  137|   395k|	  if (l != r)
  ------------------
  |  Branch (137:8): [True: 393k, False: 2.30k]
  ------------------
  138|   393k|	    memmove (info + start + r, info + start + l, (end - start - l - r) * sizeof (buf[0]));
  139|       |
  140|   395k|	  hb_memcpy (info + start, buf + 2, r * sizeof (buf[0]));
  141|   395k|	  hb_memcpy (info + end - l, buf, l * sizeof (buf[0]));
  142|   395k|	  if (reverse_l)
  ------------------
  |  Branch (142:8): [True: 1.72k, False: 393k]
  ------------------
  143|  1.72k|	  {
  144|  1.72k|	    buf[0] = info[end - 1];
  145|  1.72k|	    info[end - 1] = info[end - 2];
  146|  1.72k|	    info[end - 2] = buf[0];
  147|  1.72k|	  }
  148|   395k|	  if (reverse_r)
  ------------------
  |  Branch (148:8): [True: 1.47k, False: 393k]
  ------------------
  149|  1.47k|	  {
  150|  1.47k|	    buf[0] = info[start];
  151|  1.47k|	    info[start] = info[start + 1];
  152|  1.47k|	    info[start + 1] = buf[0];
  153|  1.47k|	  }
  154|   395k|	}
  155|  2.56M|      }
  156|  3.88M|    }
_ZNK3AAT18ContextualSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  322|  1.48k|  {
  323|  1.48k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.48k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  324|       |
  325|  1.48k|    driver_context_t dc (this, c);
  326|       |
  327|  1.48k|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  328|  1.48k|    driver.drive (&dc, c);
  329|       |
  330|  1.48k|    return_trace (dc.ret);
  ------------------
  |  |  349|  1.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  331|  1.48k|  }
_ZN3AAT18ContextualSubtableINS_13ObsoleteTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  224|  1.48k|	subs (table+table->substitutionTables) {}
_ZN3AAT18ContextualSubtableINS_13ObsoleteTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  228|  9.82M|    {
  229|  9.82M|      hb_buffer_t *buffer = driver->buffer;
  230|       |
  231|  9.82M|      if (buffer->idx == buffer->len && !mark_set)
  ------------------
  |  Branch (231:11): [True: 2.49k, False: 9.82M]
  |  Branch (231:41): [True: 1.62k, False: 868]
  ------------------
  232|  1.62k|	return false;
  233|       |
  234|  9.82M|      return entry.data.markIndex != 0xFFFF || entry.data.currentIndex != 0xFFFF;
  ------------------
  |  Branch (234:14): [True: 4.58M, False: 5.24M]
  |  Branch (234:48): [True: 1.77M, False: 3.46M]
  ------------------
  235|  9.82M|    }
_ZN3AAT18ContextualSubtableINS_13ObsoleteTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  238|  7.43M|    {
  239|  7.43M|      hb_buffer_t *buffer = driver->buffer;
  240|       |
  241|       |      /* Looks like CoreText applies neither mark nor current substitution for
  242|       |       * end-of-text if mark was not explicitly set. */
  243|  7.43M|      if (buffer->idx == buffer->len && !mark_set)
  ------------------
  |  Branch (243:11): [True: 1.48k, False: 7.43M]
  |  Branch (243:41): [True: 738, False: 744]
  ------------------
  244|    738|	return;
  245|       |
  246|  7.43M|      const HBGlyphID16 *replacement;
  247|       |
  248|  7.43M|      replacement = nullptr;
  249|  7.43M|      if (Types::extended)
  ------------------
  |  Branch (249:11): [Folded - Ignored]
  ------------------
  250|      0|      {
  251|      0|	if (entry.data.markIndex != 0xFFFF)
  ------------------
  |  Branch (251:6): [True: 0, False: 0]
  ------------------
  252|      0|	{
  253|      0|	  const Lookup<HBGlyphID16> &lookup = subs[entry.data.markIndex];
  254|      0|	  replacement = lookup.get_value (buffer->info[mark].codepoint, driver->num_glyphs);
  255|      0|	}
  256|      0|      }
  257|  7.43M|      else
  258|  7.43M|      {
  259|  7.43M|	unsigned int offset = entry.data.markIndex + buffer->info[mark].codepoint;
  260|  7.43M|	const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
  261|  7.43M|	replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
  262|  7.43M|	if (!replacement->sanitize (&c->sanitizer) || !*replacement)
  ------------------
  |  Branch (262:6): [True: 7.05M, False: 383k]
  |  Branch (262:48): [True: 303k, False: 80.6k]
  ------------------
  263|  7.35M|	  replacement = nullptr;
  264|  7.43M|      }
  265|  7.43M|      if (replacement)
  ------------------
  |  Branch (265:11): [True: 80.6k, False: 7.35M]
  ------------------
  266|  80.6k|      {
  267|  80.6k|	buffer->unsafe_to_break (mark, hb_min (buffer->idx + 1, buffer->len));
  268|  80.6k|	buffer->info[mark].codepoint = *replacement;
  269|  80.6k|	if (has_glyph_classes)
  ------------------
  |  Branch (269:6): [True: 1.17k, False: 79.4k]
  ------------------
  270|  1.17k|	  _hb_glyph_info_set_glyph_props (&buffer->info[mark],
  271|  1.17k|					  gdef.get_glyph_props (*replacement));
  272|  80.6k|	ret = true;
  273|  80.6k|      }
  274|       |
  275|  7.43M|      replacement = nullptr;
  276|  7.43M|      unsigned int idx = hb_min (buffer->idx, buffer->len - 1);
  277|  7.43M|      if (Types::extended)
  ------------------
  |  Branch (277:11): [Folded - Ignored]
  ------------------
  278|      0|      {
  279|      0|	if (entry.data.currentIndex != 0xFFFF)
  ------------------
  |  Branch (279:6): [True: 0, False: 0]
  ------------------
  280|      0|	{
  281|      0|	  const Lookup<HBGlyphID16> &lookup = subs[entry.data.currentIndex];
  282|      0|	  replacement = lookup.get_value (buffer->info[idx].codepoint, driver->num_glyphs);
  283|      0|	}
  284|      0|      }
  285|  7.43M|      else
  286|  7.43M|      {
  287|  7.43M|	unsigned int offset = entry.data.currentIndex + buffer->info[idx].codepoint;
  288|  7.43M|	const UnsizedArrayOf<HBGlyphID16> &subs_old = (const UnsizedArrayOf<HBGlyphID16> &) subs;
  289|  7.43M|	replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)];
  290|  7.43M|	if (!replacement->sanitize (&c->sanitizer) || !*replacement)
  ------------------
  |  Branch (290:6): [True: 6.87M, False: 560k]
  |  Branch (290:48): [True: 421k, False: 139k]
  ------------------
  291|  7.29M|	  replacement = nullptr;
  292|  7.43M|      }
  293|  7.43M|      if (replacement)
  ------------------
  |  Branch (293:11): [True: 139k, False: 7.29M]
  ------------------
  294|   139k|      {
  295|   139k|	buffer->info[idx].codepoint = *replacement;
  296|   139k|	if (has_glyph_classes)
  ------------------
  |  Branch (296:6): [True: 58.7k, False: 80.3k]
  ------------------
  297|  58.7k|	  _hb_glyph_info_set_glyph_props (&buffer->info[idx],
  298|  58.7k|					  gdef.get_glyph_props (*replacement));
  299|   139k|	ret = true;
  300|   139k|      }
  301|       |
  302|  7.43M|      if (entry.flags & SetMark)
  ------------------
  |  Branch (302:11): [True: 6.63M, False: 801k]
  ------------------
  303|  6.63M|      {
  304|  6.63M|	mark_set = true;
  305|  6.63M|	mark = buffer->idx;
  306|  6.63M|      }
  307|  7.43M|    }
_ZNK3AAT16LigatureSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  574|    654|  {
  575|    654|    TRACE_APPLY (this);
  ------------------
  |  |  410|    654|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  576|       |
  577|    654|    driver_context_t dc (this, c);
  578|       |
  579|    654|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  580|    654|    driver.drive (&dc, c);
  581|       |
  582|    654|    return_trace (dc.ret);
  ------------------
  |  |  349|    654|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    654|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  583|    654|  }
_ZN3AAT16LigatureSubtableINS_13ObsoleteTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  460|    654|	match_length (0) {}
_ZN3AAT16LigatureSubtableINS_13ObsoleteTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
  464|  2.18M|    {
  465|  2.18M|      return LigatureEntryT::performAction (entry);
  466|  2.18M|    }
_ZN3AAT13LigatureEntryILb0EE13performActionERKNS_5EntryIvEE:
  418|  3.77M|  { return entry.flags & Offset; }
_ZN3AAT16LigatureSubtableINS_13ObsoleteTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_vEERKNS_5EntryIvEE:
  469|  1.58M|    {
  470|  1.58M|      hb_buffer_t *buffer = driver->buffer;
  471|       |
  472|  1.58M|      DEBUG_MSG (APPLY, nullptr, "Ligature transition at %u", buffer->idx);
  ------------------
  |  |  232|  1.58M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  473|  1.58M|      if (entry.flags & LigatureEntryT::SetComponent)
  ------------------
  |  Branch (473:11): [True: 853k, False: 731k]
  ------------------
  474|   853k|      {
  475|       |	/* Never mark same index twice, in case DontAdvance was used... */
  476|   853k|	if (match_length && match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] == buffer->out_len)
  ------------------
  |  Branch (476:6): [True: 850k, False: 3.09k]
  |  Branch (476:22): [True: 531k, False: 319k]
  ------------------
  477|   531k|	  match_length--;
  478|       |
  479|   853k|	match_positions[match_length++ % ARRAY_LENGTH (match_positions)] = buffer->out_len;
  480|   853k|	DEBUG_MSG (APPLY, nullptr, "Set component at %u", buffer->out_len);
  ------------------
  |  |  232|   853k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  481|   853k|      }
  482|       |
  483|  1.58M|      if (LigatureEntryT::performAction (entry))
  ------------------
  |  Branch (483:11): [True: 994k, False: 590k]
  ------------------
  484|   994k|      {
  485|   994k|	DEBUG_MSG (APPLY, nullptr, "Perform action with %u", match_length);
  ------------------
  |  |  232|   994k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  486|   994k|	unsigned int end = buffer->out_len;
  487|       |
  488|   994k|	if (unlikely (!match_length))
  ------------------
  |  |  259|   994k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 134k, False: 860k]
  |  |  ------------------
  ------------------
  489|   134k|	  return;
  490|       |
  491|   860k|	if (buffer->idx >= buffer->len)
  ------------------
  |  Branch (491:6): [True: 169, False: 860k]
  ------------------
  492|    169|	  return; /* TODO Work on previous instead? */
  493|       |
  494|   860k|	unsigned int cursor = match_length;
  495|       |
  496|   860k|	unsigned int action_idx = LigatureEntryT::ligActionIndex (entry);
  497|   860k|	action_idx = Types::offsetToIndex (action_idx, table, ligAction.arrayZ);
  498|   860k|	const HBUINT32 *actionData = &ligAction[action_idx];
  499|       |
  500|   860k|	unsigned int ligature_idx = 0;
  501|   860k|	unsigned int action;
  502|   860k|	do
  503|   948k|	{
  504|   948k|	  if (unlikely (!cursor))
  ------------------
  |  |  259|   948k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.61k, False: 945k]
  |  |  ------------------
  ------------------
  505|  2.61k|	  {
  506|       |	    /* Stack underflow.  Clear the stack. */
  507|  2.61k|	    DEBUG_MSG (APPLY, nullptr, "Stack underflow");
  ------------------
  |  |  232|  2.61k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  508|  2.61k|	    match_length = 0;
  509|  2.61k|	    break;
  510|  2.61k|	  }
  511|       |
  512|   945k|	  DEBUG_MSG (APPLY, nullptr, "Moving to stack position %u", cursor - 1);
  ------------------
  |  |  232|   945k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  513|   945k|	  if (unlikely (!buffer->move_to (match_positions[--cursor % ARRAY_LENGTH (match_positions)]))) return;
  ------------------
  |  |  259|   945k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 945k]
  |  |  ------------------
  ------------------
  514|       |
  515|   945k|	  if (unlikely (!actionData->sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|   945k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 564k, False: 381k]
  |  |  ------------------
  ------------------
  516|   381k|	  action = *actionData;
  517|       |
  518|   381k|	  uint32_t uoffset = action & LigActionOffset;
  519|   381k|	  if (uoffset & 0x20000000)
  ------------------
  |  Branch (519:8): [True: 116k, False: 265k]
  ------------------
  520|   116k|	    uoffset |= 0xC0000000; /* Sign-extend. */
  521|   381k|	  int32_t offset = (int32_t) uoffset;
  522|   381k|	  unsigned int component_idx = buffer->cur().codepoint + offset;
  523|   381k|	  component_idx = Types::wordOffsetToIndex (component_idx, table, component.arrayZ);
  524|   381k|	  const HBUINT16 &componentData = component[component_idx];
  525|   381k|	  if (unlikely (!componentData.sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|   381k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 263k, False: 118k]
  |  |  ------------------
  ------------------
  526|   118k|	  ligature_idx += componentData;
  527|       |
  528|   118k|	  DEBUG_MSG (APPLY, nullptr, "Action store %d last %d",
  ------------------
  |  |  232|   118k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  529|   118k|		     bool (action & LigActionStore),
  530|   118k|		     bool (action & LigActionLast));
  531|   118k|	  if (action & (LigActionStore | LigActionLast))
  ------------------
  |  Branch (531:8): [True: 30.4k, False: 87.7k]
  ------------------
  532|  30.4k|	  {
  533|  30.4k|	    ligature_idx = Types::offsetToIndex (ligature_idx, table, ligature.arrayZ);
  534|  30.4k|	    const HBGlyphID16 &ligatureData = ligature[ligature_idx];
  535|  30.4k|	    if (unlikely (!ligatureData.sanitize (&c->sanitizer))) break;
  ------------------
  |  |  259|  30.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22.3k, False: 8.10k]
  |  |  ------------------
  ------------------
  536|  8.10k|	    hb_codepoint_t lig = ligatureData;
  537|       |
  538|  8.10k|	    DEBUG_MSG (APPLY, nullptr, "Produced ligature %u", lig);
  ------------------
  |  |  232|  8.10k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  539|  8.10k|	    if (unlikely (!buffer->replace_glyph (lig))) return;
  ------------------
  |  |  259|  8.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.10k]
  |  |  ------------------
  ------------------
  540|       |
  541|  8.10k|	    unsigned int lig_end = match_positions[(match_length - 1u) % ARRAY_LENGTH (match_positions)] + 1u;
  542|       |	    /* Now go and delete all subsequent components. */
  543|  13.5k|	    while (match_length - 1u > cursor)
  ------------------
  |  Branch (543:13): [True: 5.47k, False: 8.10k]
  ------------------
  544|  5.47k|	    {
  545|  5.47k|	      DEBUG_MSG (APPLY, nullptr, "Skipping ligature component");
  ------------------
  |  |  232|  5.47k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  546|  5.47k|	      if (unlikely (!buffer->move_to (match_positions[--match_length % ARRAY_LENGTH (match_positions)]))) return;
  ------------------
  |  |  259|  5.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.47k]
  |  |  ------------------
  ------------------
  547|  5.47k|	      if (unlikely (!buffer->replace_glyph (DELETED_GLYPH))) return;
  ------------------
  |  |  259|  5.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.47k]
  |  |  ------------------
  ------------------
  548|  5.47k|	    }
  549|       |
  550|  8.10k|	    if (unlikely (!buffer->move_to (lig_end))) return;
  ------------------
  |  |  259|  8.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.10k]
  |  |  ------------------
  ------------------
  551|  8.10k|	    buffer->merge_out_clusters (match_positions[cursor % ARRAY_LENGTH (match_positions)], buffer->out_len);
  552|  8.10k|	  }
  553|       |
  554|  95.8k|	  actionData++;
  555|  95.8k|	}
  556|   860k|	while (!(action & LigActionLast));
  ------------------
  |  Branch (556:9): [True: 87.8k, False: 7.99k]
  ------------------
  557|   860k|	if (unlikely (!buffer->move_to (end))) return;
  ------------------
  |  |  259|   860k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 860k]
  |  |  ------------------
  ------------------
  558|   860k|      }
  559|  1.58M|    }
_ZN3AAT13LigatureEntryILb0EE14ligActionIndexERKNS_5EntryIvEE:
  421|   860k|  { return entry.flags & Offset; }
_ZNK3AAT21NoncontextualSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  610|  2.84k|  {
  611|  2.84k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.84k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  612|       |
  613|  2.84k|    const OT::GDEF &gdef (*c->gdef_table);
  614|  2.84k|    bool has_glyph_classes = gdef.has_glyph_classes ();
  615|       |
  616|  2.84k|    bool ret = false;
  617|  2.84k|    unsigned int num_glyphs = c->face->get_num_glyphs ();
  618|       |
  619|  2.84k|    hb_glyph_info_t *info = c->buffer->info;
  620|  2.84k|    unsigned int count = c->buffer->len;
  621|       |    // If there's only one range, we already checked the flag.
  622|  2.84k|    auto *last_range = c->range_flags && (c->range_flags->length > 1) ? &(*c->range_flags)[0] : nullptr;
  ------------------
  |  Branch (622:24): [True: 2.84k, False: 0]
  |  Branch (622:42): [True: 0, False: 2.84k]
  ------------------
  623|   137k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (623:30): [True: 134k, False: 2.84k]
  ------------------
  624|   134k|    {
  625|       |      /* This block copied from StateTableDriver::drive. Keep in sync. */
  626|   134k|      if (last_range)
  ------------------
  |  Branch (626:11): [True: 0, False: 134k]
  ------------------
  627|      0|      {
  628|      0|	auto *range = last_range;
  629|      0|	{
  630|      0|	  unsigned cluster = info[i].cluster;
  631|      0|	  while (cluster < range->cluster_first)
  ------------------
  |  Branch (631:11): [True: 0, False: 0]
  ------------------
  632|      0|	    range--;
  633|      0|	  while (cluster > range->cluster_last)
  ------------------
  |  Branch (633:11): [True: 0, False: 0]
  ------------------
  634|      0|	    range++;
  635|       |
  636|      0|	  last_range = range;
  637|      0|	}
  638|      0|	if (!(range->flags & c->subtable_flags))
  ------------------
  |  Branch (638:6): [True: 0, False: 0]
  ------------------
  639|      0|	  continue;
  640|      0|      }
  641|       |
  642|   134k|      const HBGlyphID16 *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
  643|   134k|      if (replacement)
  ------------------
  |  Branch (643:11): [True: 6.62k, False: 127k]
  ------------------
  644|  6.62k|      {
  645|  6.62k|	info[i].codepoint = *replacement;
  646|  6.62k|	if (has_glyph_classes)
  ------------------
  |  Branch (646:6): [True: 2.18k, False: 4.44k]
  ------------------
  647|  2.18k|	  _hb_glyph_info_set_glyph_props (&info[i],
  648|  2.18k|					  gdef.get_glyph_props (*replacement));
  649|  6.62k|	ret = true;
  650|  6.62k|      }
  651|   134k|    }
  652|       |
  653|  2.84k|    return_trace (ret);
  ------------------
  |  |  349|  2.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  654|  2.84k|  }
_ZNK3AAT17InsertionSubtableINS_13ObsoleteTypesEE5applyEPNS_22hb_aat_apply_context_tE:
  836|  2.02k|  {
  837|  2.02k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  2.02k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  838|       |
  839|  2.02k|    driver_context_t dc (this, c);
  840|       |
  841|  2.02k|    StateTableDriver<Types, EntryData> driver (machine, c->buffer, c->face);
  842|  2.02k|    driver.drive (&dc, c);
  843|       |
  844|  2.02k|    return_trace (dc.ret);
  ------------------
  |  |  349|  2.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  845|  2.02k|  }
_ZN3AAT17InsertionSubtableINS_13ObsoleteTypesEE16driver_context_tC2EPKS2_PNS_22hb_aat_apply_context_tE:
  745|  2.02k|	insertionAction (table+table->insertionAction) {}
_ZN3AAT17InsertionSubtableINS_13ObsoleteTypesEE16driver_context_t13is_actionableEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  749|  2.32M|    {
  750|  2.32M|      return (entry.flags & (CurrentInsertCount | MarkedInsertCount)) &&
  ------------------
  |  Branch (750:14): [True: 1.69M, False: 628k]
  ------------------
  751|  2.32M|	     (entry.data.currentInsertIndex != 0xFFFF ||entry.data.markedInsertIndex != 0xFFFF);
  ------------------
  |  Branch (751:8): [True: 1.51M, False: 184k]
  |  Branch (751:50): [True: 61.9k, False: 123k]
  ------------------
  752|  2.32M|    }
_ZN3AAT17InsertionSubtableINS_13ObsoleteTypesEE16driver_context_t10transitionEPNS_16StateTableDriverIS1_NS2_9EntryDataEEERKNS_5EntryIS5_EE:
  755|  1.76M|    {
  756|  1.76M|      hb_buffer_t *buffer = driver->buffer;
  757|  1.76M|      unsigned int flags = entry.flags;
  758|       |
  759|  1.76M|      unsigned mark_loc = buffer->out_len;
  760|       |
  761|  1.76M|      if (entry.data.markedInsertIndex != 0xFFFF)
  ------------------
  |  Branch (761:11): [True: 1.59M, False: 169k]
  ------------------
  762|  1.59M|      {
  763|  1.59M|	unsigned int count = (flags & MarkedInsertCount);
  764|  1.59M|	if (unlikely ((buffer->max_ops -= count) <= 0)) return;
  ------------------
  |  |  259|  1.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.04M, False: 554k]
  |  |  ------------------
  ------------------
  765|   554k|	unsigned int start = entry.data.markedInsertIndex;
  766|   554k|	const HBGlyphID16 *glyphs = &insertionAction[start];
  767|   554k|	if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
  ------------------
  |  |  259|   554k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 184k, False: 369k]
  |  |  ------------------
  ------------------
  768|       |
  769|   554k|	bool before = flags & MarkedInsertBefore;
  770|       |
  771|   554k|	unsigned int end = buffer->out_len;
  772|   554k|	if (unlikely (!buffer->move_to (mark))) return;
  ------------------
  |  |  259|   554k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 554k]
  |  |  ------------------
  ------------------
  773|       |
  774|   554k|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (774:6): [True: 554k, False: 0]
  |  Branch (774:35): [True: 353k, False: 200k]
  ------------------
  775|   353k|	  if (unlikely (!buffer->copy_glyph ())) return;
  ------------------
  |  |  259|   353k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 353k]
  |  |  ------------------
  ------------------
  776|       |	/* TODO We ignore KashidaLike setting. */
  777|   554k|	if (unlikely (!buffer->replace_glyphs (0, count, glyphs))) return;
  ------------------
  |  |  259|   554k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 554k]
  |  |  ------------------
  ------------------
  778|   554k|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (778:6): [True: 554k, False: 0]
  |  Branch (778:35): [True: 353k, False: 200k]
  ------------------
  779|   353k|	  buffer->skip_glyph ();
  780|       |
  781|   554k|	if (unlikely (!buffer->move_to (end + count))) return;
  ------------------
  |  |  259|   554k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 554k]
  |  |  ------------------
  ------------------
  782|       |
  783|   554k|	buffer->unsafe_to_break_from_outbuffer (mark, hb_min (buffer->idx + 1, buffer->len));
  784|   554k|      }
  785|       |
  786|   724k|      if (flags & SetMark)
  ------------------
  |  Branch (786:11): [True: 269k, False: 454k]
  ------------------
  787|   269k|	mark = mark_loc;
  788|       |
  789|   724k|      if (entry.data.currentInsertIndex != 0xFFFF)
  ------------------
  |  Branch (789:11): [True: 617k, False: 106k]
  ------------------
  790|   617k|      {
  791|   617k|	unsigned int count = (flags & CurrentInsertCount) >> 5;
  792|   617k|	if (unlikely ((buffer->max_ops -= count) <= 0)) return;
  ------------------
  |  |  259|   617k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36.5k, False: 581k]
  |  |  ------------------
  ------------------
  793|   581k|	unsigned int start = entry.data.currentInsertIndex;
  794|   581k|	const HBGlyphID16 *glyphs = &insertionAction[start];
  795|   581k|	if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0;
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 133k, False: 447k]
  |  |  ------------------
  ------------------
  796|       |
  797|   581k|	bool before = flags & CurrentInsertBefore;
  798|       |
  799|   581k|	unsigned int end = buffer->out_len;
  800|       |
  801|   581k|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (801:6): [True: 502k, False: 78.4k]
  |  Branch (801:35): [True: 356k, False: 145k]
  ------------------
  802|   356k|	  if (unlikely (!buffer->copy_glyph ())) return;
  ------------------
  |  |  259|   356k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 356k]
  |  |  ------------------
  ------------------
  803|       |	/* TODO We ignore KashidaLike setting. */
  804|   581k|	if (unlikely (!buffer->replace_glyphs (0, count, glyphs))) return;
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 581k]
  |  |  ------------------
  ------------------
  805|   581k|	if (buffer->idx < buffer->len && !before)
  ------------------
  |  Branch (805:6): [True: 502k, False: 78.3k]
  |  Branch (805:35): [True: 356k, False: 145k]
  ------------------
  806|   356k|	  buffer->skip_glyph ();
  807|       |
  808|       |	/* Humm. Not sure where to move to.  There's this wording under
  809|       |	 * DontAdvance flag:
  810|       |	 *
  811|       |	 * "If set, don't update the glyph index before going to the new state.
  812|       |	 * This does not mean that the glyph pointed to is the same one as
  813|       |	 * before. If you've made insertions immediately downstream of the
  814|       |	 * current glyph, the next glyph processed would in fact be the first
  815|       |	 * one inserted."
  816|       |	 *
  817|       |	 * This suggests that if DontAdvance is NOT set, we should move to
  818|       |	 * end+count.  If it *was*, then move to end, such that newly inserted
  819|       |	 * glyphs are now visible.
  820|       |	 *
  821|       |	 * https://github.com/harfbuzz/harfbuzz/issues/1224#issuecomment-427691417
  822|       |	 */
  823|   581k|	if (unlikely (!buffer->move_to ((flags & DontAdvance) ? end : end + count))) return;
  ------------------
  |  |  259|  1.16M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 581k]
  |  |  |  Branch (259:47): [True: 339k, False: 241k]
  |  |  ------------------
  ------------------
  824|   581k|      }
  825|   724k|    }

_ZNK3AAT4trak8has_dataEv:
  158|  48.0k|  bool has_data () const { return version.to_int (); }
_ZNK3AAT4trak5applyEPNS_22hb_aat_apply_context_tE:
  161|  1.08k|  {
  162|  1.08k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.08k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
  163|       |
  164|  1.08k|    hb_mask_t trak_mask = c->plan->trak_mask;
  165|       |
  166|  1.08k|    const float ptem = c->font->ptem;
  167|  1.08k|    if (unlikely (ptem <= 0.f))
  ------------------
  |  |  259|  1.08k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.08k, False: 0]
  |  |  ------------------
  ------------------
  168|  1.08k|      return_trace (false);
  ------------------
  |  |  349|  1.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  169|       |
  170|      0|    hb_buffer_t *buffer = c->buffer;
  171|      0|    if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
  ------------------
  |  |  271|      0|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  172|      0|    {
  173|      0|      const TrackData &trackData = this+horizData;
  174|      0|      int tracking = trackData.get_tracking (this, ptem);
  175|      0|      hb_position_t offset_to_add = c->font->em_scalef_x (tracking / 2);
  176|      0|      hb_position_t advance_to_add = c->font->em_scalef_x (tracking);
  177|      0|      foreach_grapheme (buffer, start, end)
  ------------------
  |  |  349|      0|	foreach_group (buffer, start, end, _hb_grapheme_group_func)
  |  |  ------------------
  |  |  |  |  656|      0|  for (unsigned int \
  |  |  |  |  657|      0|       _count = buffer->len, \
  |  |  |  |  658|      0|       start = 0, end = _count ? buffer->group_end (0, group_func) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (658:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  659|      0|       start < _count; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (659:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  660|      0|       start = end, end = buffer->group_end (start, group_func))
  |  |  ------------------
  ------------------
  178|      0|      {
  179|      0|	if (!(buffer->info[start].mask & trak_mask)) continue;
  ------------------
  |  Branch (179:6): [True: 0, False: 0]
  ------------------
  180|      0|	buffer->pos[start].x_advance += advance_to_add;
  181|      0|	buffer->pos[start].x_offset += offset_to_add;
  182|      0|      }
  183|      0|    }
  184|      0|    else
  185|      0|    {
  186|      0|      const TrackData &trackData = this+vertData;
  187|      0|      int tracking = trackData.get_tracking (this, ptem);
  188|      0|      hb_position_t offset_to_add = c->font->em_scalef_y (tracking / 2);
  189|      0|      hb_position_t advance_to_add = c->font->em_scalef_y (tracking);
  190|      0|      foreach_grapheme (buffer, start, end)
  ------------------
  |  |  349|      0|	foreach_group (buffer, start, end, _hb_grapheme_group_func)
  |  |  ------------------
  |  |  |  |  656|      0|  for (unsigned int \
  |  |  |  |  657|      0|       _count = buffer->len, \
  |  |  |  |  658|      0|       start = 0, end = _count ? buffer->group_end (0, group_func) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (658:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  659|      0|       start < _count; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (659:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  660|      0|       start = end, end = buffer->group_end (start, group_func))
  |  |  ------------------
  ------------------
  191|      0|      {
  192|      0|	if (!(buffer->info[start].mask & trak_mask)) continue;
  ------------------
  |  Branch (192:6): [True: 0, False: 0]
  ------------------
  193|      0|	buffer->pos[start].y_advance += advance_to_add;
  194|      0|	buffer->pos[start].y_offset += offset_to_add;
  195|      0|      }
  196|      0|    }
  197|       |
  198|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  199|  1.08k|  }
_ZNK3AAT4trak8sanitizeEP21hb_sanitize_context_t:
  202|    208|  {
  203|    208|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    208|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  204|       |
  205|    208|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  1.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    208|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 201, False: 7]
  |  |  |  Branch (349:45): [True: 200, False: 1]
  |  |  |  Branch (349:45): [True: 148, False: 52]
  |  |  |  Branch (349:45): [True: 131, False: 17]
  |  |  ------------------
  ------------------
  206|    208|			  version.major == 1 &&
  207|    208|			  horizData.sanitize (c, this, this) &&
  208|    208|			  vertData.sanitize (c, this, this)));
  209|    208|  }
_ZNK3AAT9TrackData8sanitizeEP21hb_sanitize_context_tPKv:
  134|    242|  {
  135|    242|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    242|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  136|    242|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    788|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    242|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 179, False: 63]
  |  |  |  Branch (349:45): [True: 125, False: 54]
  |  |  |  Branch (349:45): [True: 71, False: 54]
  |  |  ------------------
  ------------------
  137|    242|			  sizeTable.sanitize (c, base, nSizes) &&
  138|    242|			  trackTable.sanitize (c, nTracks, base, nSizes)));
  139|    242|  }
_ZNK3AAT15TrackTableEntry8sanitizeEP21hb_sanitize_context_tPKvj:
   58|  11.8k|  {
   59|  11.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   60|  11.8k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  23.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.8k, False: 3]
  |  |  |  Branch (349:45): [True: 11.8k, False: 34]
  |  |  ------------------
  ------------------
   61|  11.8k|			  (valuesZ.sanitize (c, base, table_size))));
   62|  11.8k|  }

_ZN3AAT22hb_aat_apply_context_tC2EPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tP9hb_blob_t:
   66|  28.2k|{
   67|  28.2k|  sanitizer.init (blob);
   68|  28.2k|  sanitizer.set_num_glyphs (face->get_num_glyphs ());
   69|  28.2k|  sanitizer.start_processing ();
   70|  28.2k|  sanitizer.set_max_ops (HB_SANITIZE_MAX_OPS_MAX);
  ------------------
  |  |  114|  28.2k|#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF
  ------------------
   71|  28.2k|}
_ZN3AAT22hb_aat_apply_context_tD2Ev:
   74|  28.2k|{ sanitizer.end_processing (); }
_ZN3AAT22hb_aat_apply_context_t14set_ankr_tableEPKNS_4ankrE:
   78|  10.9k|{ ankr_table = ankr_table_; }
_Z25hb_aat_layout_compile_mapPK20hb_aat_map_builder_tP12hb_aat_map_t:
  213|  10.5k|{
  214|  10.5k|  const AAT::morx& morx = *mapper->face->table.morx;
  215|  10.5k|  if (morx.has_data ())
  ------------------
  |  Branch (215:7): [True: 5.42k, False: 5.13k]
  ------------------
  216|  5.42k|  {
  217|  5.42k|    morx.compile_flags (mapper, map);
  218|  5.42k|    return;
  219|  5.42k|  }
  220|       |
  221|  5.13k|  const AAT::mort& mort = *mapper->face->table.mort;
  222|  5.13k|  if (mort.has_data ())
  ------------------
  |  Branch (222:7): [True: 5.13k, False: 0]
  ------------------
  223|  5.13k|  {
  224|  5.13k|    mort.compile_flags (mapper, map);
  225|  5.13k|    return;
  226|  5.13k|  }
  227|  5.13k|}
hb_aat_layout_has_substitution:
  245|  49.3k|{
  246|  49.3k|  return face->table.morx->has_data () ||
  ------------------
  |  Branch (246:10): [True: 1.18k, False: 48.1k]
  ------------------
  247|  49.3k|	 face->table.mort->has_data ();
  ------------------
  |  Branch (247:3): [True: 1.27k, False: 46.8k]
  ------------------
  248|  49.3k|}
_Z24hb_aat_layout_substitutePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tPK12hb_feature_tj:
  256|  11.1k|{
  257|  11.1k|  hb_aat_map_builder_t builder (font->face, plan->props);
  258|  11.1k|  for (unsigned i = 0; i < num_features; i++)
  ------------------
  |  Branch (258:24): [True: 0, False: 11.1k]
  ------------------
  259|      0|    builder.add_feature (features[i]);
  260|  11.1k|  hb_aat_map_t map;
  261|  11.1k|  builder.compile (map);
  262|       |
  263|  11.1k|  hb_blob_t *morx_blob = font->face->table.morx.get_blob ();
  264|  11.1k|  const AAT::morx& morx = *morx_blob->as<AAT::morx> ();
  265|  11.1k|  if (morx.has_data ())
  ------------------
  |  Branch (265:7): [True: 5.72k, False: 5.46k]
  ------------------
  266|  5.72k|  {
  267|  5.72k|    AAT::hb_aat_apply_context_t c (plan, font, buffer, morx_blob);
  268|  5.72k|    if (!buffer->message (font, "start table morx")) return;
  ------------------
  |  Branch (268:9): [True: 0, False: 5.72k]
  ------------------
  269|  5.72k|    morx.apply (&c, map);
  270|  5.72k|    (void) buffer->message (font, "end table morx");
  271|  5.72k|    return;
  272|  5.72k|  }
  273|       |
  274|  5.46k|  hb_blob_t *mort_blob = font->face->table.mort.get_blob ();
  275|  5.46k|  const AAT::mort& mort = *mort_blob->as<AAT::mort> ();
  276|  5.46k|  if (mort.has_data ())
  ------------------
  |  Branch (276:7): [True: 5.46k, False: 0]
  ------------------
  277|  5.46k|  {
  278|  5.46k|    AAT::hb_aat_apply_context_t c (plan, font, buffer, mort_blob);
  279|  5.46k|    if (!buffer->message (font, "start table mort")) return;
  ------------------
  |  Branch (279:9): [True: 0, False: 5.46k]
  ------------------
  280|  5.46k|    mort.apply (&c, map);
  281|  5.46k|    (void) buffer->message (font, "end table mort");
  282|  5.46k|    return;
  283|  5.46k|  }
  284|  5.46k|}
_Z39hb_aat_layout_zero_width_deleted_glyphsP11hb_buffer_t:
  288|  11.1k|{
  289|  11.1k|  unsigned int count = buffer->len;
  290|  11.1k|  hb_glyph_info_t *info = buffer->info;
  291|  11.1k|  hb_glyph_position_t *pos = buffer->pos;
  292|  5.62M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (292:28): [True: 5.61M, False: 11.1k]
  ------------------
  293|  5.61M|    if (unlikely (info[i].codepoint == AAT::DELETED_GLYPH))
  ------------------
  |  |  259|  5.61M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 235k, False: 5.37M]
  |  |  ------------------
  ------------------
  294|   235k|      pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
  295|  11.1k|}
_Z35hb_aat_layout_remove_deleted_glyphsP11hb_buffer_t:
  305|  11.1k|{
  306|  11.1k|  buffer->delete_glyphs_inplace (is_deleted_glyph);
  307|  11.1k|}
hb_aat_layout_has_positioning:
  324|  49.3k|{
  325|  49.3k|  return face->table.kerx->has_data ();
  326|  49.3k|}
_Z22hb_aat_layout_positionPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  332|  10.9k|{
  333|  10.9k|  hb_blob_t *kerx_blob = font->face->table.kerx.get_blob ();
  334|  10.9k|  const AAT::kerx& kerx = *kerx_blob->as<AAT::kerx> ();
  335|       |
  336|  10.9k|  AAT::hb_aat_apply_context_t c (plan, font, buffer, kerx_blob);
  337|  10.9k|  if (!buffer->message (font, "start table kerx")) return;
  ------------------
  |  Branch (337:7): [True: 0, False: 10.9k]
  ------------------
  338|  10.9k|  c.set_ankr_table (font->face->table.ankr.get ());
  339|  10.9k|  kerx.apply (&c);
  340|  10.9k|  (void) buffer->message (font, "end table kerx");
  341|  10.9k|}
hb_aat_layout_has_tracking:
  357|  48.0k|{
  358|  48.0k|  return face->table.trak->has_data ();
  359|  48.0k|}
_Z19hb_aat_layout_trackPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  365|  1.08k|{
  366|  1.08k|  const AAT::trak& trak = *font->face->table.trak;
  367|       |
  368|  1.08k|  AAT::hb_aat_apply_context_t c (plan, font, buffer);
  369|  1.08k|  trak.apply (&c);
  370|  1.08k|}
hb_aat_layout_get_feature_types:
  391|  33.3k|{
  392|  33.3k|  return face->table.feat->get_feature_types (start_offset, feature_count, features);
  393|  33.3k|}
hb_aat_layout_feature_type_get_name_id:
  409|  33.3k|{
  410|  33.3k|  return face->table.feat->get_feature_name_id (feature_type);
  411|  33.3k|}
hb_aat_layout_feature_type_get_selector_infos:
  441|  33.3k|{
  442|  33.3k|  return face->table.feat->get_selector_infos (feature_type, start_offset, selector_count, selectors, default_index);
  443|  33.3k|}
hb-aat-layout.cc:_ZL16is_deleted_glyphPK15hb_glyph_info_t:
  299|  5.61M|{
  300|  5.61M|  return info->codepoint == AAT::DELETED_GLYPH;
  301|  5.61M|}

_ZNK3AAT4ltag8sanitizeEP21hb_sanitize_context_t:
   73|    166|  {
   74|    166|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    166|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   75|    166|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    661|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    166|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 165, False: 1]
  |  |  |  Branch (349:45): [True: 164, False: 1]
  |  |  |  Branch (349:45): [True: 117, False: 47]
  |  |  ------------------
  ------------------
   76|    166|			  version >= 1 &&
   77|    166|			  tagRanges.sanitize (c, this)));
   78|    166|  }
_ZNK3AAT13FTStringRange8sanitizeEP21hb_sanitize_context_tPKv:
   47|  16.7k|  {
   48|  16.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   49|  16.7k|    return_trace (c->check_struct (this) && (base+tag).sanitize (c, length));
  ------------------
  |  |  349|  33.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 16.7k, False: 1]
  |  |  |  Branch (349:45): [True: 16.6k, False: 29]
  |  |  ------------------
  ------------------
   50|  16.7k|  }
_ZNK3AAT4ltag12get_languageEj:
   66|   507k|  {
   67|   507k|    const FTStringRange &range = tagRanges[i];
   68|   507k|    return hb_language_from_string ((const char *) (this+range.tag).arrayZ,
   69|   507k|				    range.length);
   70|   507k|  }

_ZN20hb_aat_map_builder_t7compileER12hb_aat_map_t:
   86|  11.1k|{
   87|       |  /* Compute active features per range, and compile each. */
   88|       |
   89|       |  /* Sort features by start/end events. */
   90|  11.1k|  hb_vector_t<feature_event_t> feature_events;
   91|  11.1k|  for (unsigned int i = 0; i < features.length; i++)
  ------------------
  |  Branch (91:28): [True: 0, False: 11.1k]
  ------------------
   92|      0|  {
   93|      0|    auto &feature = features[i];
   94|       |
   95|      0|    if (features[i].start == features[i].end)
  ------------------
  |  Branch (95:9): [True: 0, False: 0]
  ------------------
   96|      0|      continue;
   97|       |
   98|      0|    feature_event_t *event;
   99|       |
  100|      0|    event = feature_events.push ();
  101|      0|    event->index = features[i].start;
  102|      0|    event->start = true;
  103|      0|    event->feature = feature.info;
  104|       |
  105|      0|    event = feature_events.push ();
  106|      0|    event->index = features[i].end;
  107|      0|    event->start = false;
  108|      0|    event->feature = feature.info;
  109|      0|  }
  110|  11.1k|  feature_events.qsort ();
  111|       |  /* Add a strategic final event. */
  112|  11.1k|  {
  113|  11.1k|    feature_info_t feature;
  114|  11.1k|    feature.seq = features.length + 1;
  115|       |
  116|  11.1k|    feature_event_t *event = feature_events.push ();
  117|  11.1k|    event->index = -1; /* This value does magic. */
  118|  11.1k|    event->start = false;
  119|  11.1k|    event->feature = feature;
  120|  11.1k|  }
  121|       |
  122|       |  /* Scan events and save features for each range. */
  123|  11.1k|  hb_sorted_vector_t<feature_info_t> active_features;
  124|  11.1k|  unsigned int last_index = 0;
  125|  21.7k|  for (unsigned int i = 0; i < feature_events.length; i++)
  ------------------
  |  Branch (125:28): [True: 10.5k, False: 11.1k]
  ------------------
  126|  10.5k|  {
  127|  10.5k|    feature_event_t *event = &feature_events[i];
  128|       |
  129|  10.5k|    if (event->index != last_index)
  ------------------
  |  Branch (129:9): [True: 10.5k, False: 0]
  ------------------
  130|  10.5k|    {
  131|       |      /* Save a snapshot of active features and the range. */
  132|       |
  133|       |      /* Sort features and merge duplicates */
  134|  10.5k|      current_features = active_features;
  135|  10.5k|      range_first = last_index;
  136|  10.5k|      range_last = event->index - 1;
  137|  10.5k|      if (current_features.length)
  ------------------
  |  Branch (137:11): [True: 0, False: 10.5k]
  ------------------
  138|      0|      {
  139|      0|	current_features.qsort ();
  140|      0|	unsigned int j = 0;
  141|      0|	for (unsigned int i = 1; i < current_features.length; i++)
  ------------------
  |  Branch (141:27): [True: 0, False: 0]
  ------------------
  142|      0|	  if (current_features[i].type != current_features[j].type ||
  ------------------
  |  Branch (142:8): [True: 0, False: 0]
  ------------------
  143|       |	      /* Nonexclusive feature selectors come in even/odd pairs to turn a setting on/off
  144|       |	       * respectively, so we mask out the low-order bit when checking for "duplicates"
  145|       |	       * (selectors referring to the same feature setting) here. */
  146|      0|	      (!current_features[i].is_exclusive && ((current_features[i].setting & ~1) != (current_features[j].setting & ~1))))
  ------------------
  |  Branch (146:9): [True: 0, False: 0]
  |  Branch (146:46): [True: 0, False: 0]
  ------------------
  147|      0|	    current_features[++j] = current_features[i];
  148|      0|	current_features.shrink (j + 1);
  149|      0|      }
  150|       |
  151|  10.5k|      hb_aat_layout_compile_map (this, &m);
  152|       |
  153|  10.5k|      last_index = event->index;
  154|  10.5k|    }
  155|       |
  156|  10.5k|    if (event->start)
  ------------------
  |  Branch (156:9): [True: 0, False: 10.5k]
  ------------------
  157|      0|    {
  158|      0|      active_features.push (event->feature);
  159|  10.5k|    } else {
  160|  10.5k|      feature_info_t *feature = active_features.lsearch (event->feature);
  161|  10.5k|      if (feature)
  ------------------
  |  Branch (161:11): [True: 0, False: 10.5k]
  ------------------
  162|      0|	active_features.remove_ordered (feature - active_features.arrayZ);
  163|  10.5k|    }
  164|  10.5k|  }
  165|       |
  166|  11.1k|  for (auto &chain_flags : m.chain_flags)
  ------------------
  |  Branch (166:26): [True: 14.5k, False: 11.1k]
  ------------------
  167|       |    // With our above setup this value is one less than desired; adjust it.
  168|  14.5k|    chain_flags.tail().cluster_last = HB_FEATURE_GLOBAL_END;
  ------------------
  |  |  815|  14.5k|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  169|  11.1k|}

_ZN20hb_aat_map_builder_tC2EP9hb_face_t23hb_segment_properties_t:
   56|  11.1k|				      props (props_) {}

hb-aat-layout.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  15.3M|{
 1007|  15.3M|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  15.3M|  unsigned stack_result;
 1009|  15.3M|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 84.7k, False: 15.2M]
  ------------------
 1010|  84.7k|    result = &stack_result;
 1011|  15.3M|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  15.3M|}
_ZNK5BEIntItLi2EEcvtEv:
  134|  2.13G|  constexpr operator Type () const {
  135|  2.13G|#if HB_FAST_INT_ACCESS
  136|  2.13G|#if __BYTE_ORDER == __LITTLE_ENDIAN
  137|  2.13G|    return __builtin_bswap16 (((packed_uint16_t *) v)->v);
  138|       |#else /* __BYTE_ORDER == __BIG_ENDIAN */
  139|       |    return ((packed_uint16_t *) v)->v;
  140|       |#endif
  141|       |#else
  142|       |    return (v[0] <<  8)
  143|       |	 + (v[1]      );
  144|       |#endif
  145|  2.13G|  }
_ZNK5BEIntIsLi2EEcvsEv:
  134|  20.9M|  constexpr operator Type () const {
  135|  20.9M|#if HB_FAST_INT_ACCESS
  136|  20.9M|#if __BYTE_ORDER == __LITTLE_ENDIAN
  137|  20.9M|    return __builtin_bswap16 (((packed_uint16_t *) v)->v);
  138|       |#else /* __BYTE_ORDER == __BIG_ENDIAN */
  139|       |    return ((packed_uint16_t *) v)->v;
  140|       |#endif
  141|       |#else
  142|       |    return (v[0] <<  8)
  143|       |	 + (v[1]      );
  144|       |#endif
  145|  20.9M|  }
_ZNK5BEIntIjLi4EEcvjEv:
  185|   280M|  constexpr operator Type () const {
  186|   280M|#if HB_FAST_INT_ACCESS
  187|   280M|#if __BYTE_ORDER == __LITTLE_ENDIAN
  188|   280M|    return __builtin_bswap32 (((packed_uint32_t *) v)->v);
  189|       |#else /* __BYTE_ORDER == __BIG_ENDIAN */
  190|       |    return ((packed_uint32_t *) v)->v;
  191|       |#endif
  192|       |#else
  193|       |    return (v[0] << 24)
  194|       |	 + (v[1] << 16)
  195|       |	 + (v[2] <<  8)
  196|       |	 + (v[3]      );
  197|       |#endif
  198|   280M|  }
_ZNK5BEIntIiLi4EEcviEv:
  185|   235k|  constexpr operator Type () const {
  186|   235k|#if HB_FAST_INT_ACCESS
  187|   235k|#if __BYTE_ORDER == __LITTLE_ENDIAN
  188|   235k|    return __builtin_bswap32 (((packed_uint32_t *) v)->v);
  189|       |#else /* __BYTE_ORDER == __BIG_ENDIAN */
  190|       |    return ((packed_uint32_t *) v)->v;
  191|       |#endif
  192|       |#else
  193|       |    return (v[0] << 24)
  194|       |	 + (v[1] << 16)
  195|       |	 + (v[2] <<  8)
  196|       |	 + (v[3]      );
  197|       |#endif
  198|   235k|  }
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN3AAT11FeatureNameE28hb_aat_layout_feature_type_tJEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|  66.6k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  66.6k|  int min = 0, max = (int) nmemb - 1;
 1045|  66.7k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 92, False: 66.6k]
  ------------------
 1046|     92|  {
 1047|     92|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|     92|#pragma GCC diagnostic push
 1049|     92|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|     92|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|     92|#pragma GCC diagnostic pop
 1052|     92|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|     92|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 29, False: 63]
  ------------------
 1054|     29|      max = mid - 1;
 1055|     63|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 58, False: 5]
  ------------------
 1056|     58|      min = mid + 1;
 1057|      5|    else
 1058|      5|    {
 1059|      5|      *pos = mid;
 1060|      5|      return true;
 1061|      5|    }
 1062|     92|  }
 1063|  66.6k|  *pos = min;
 1064|  66.6k|  return false;
 1065|  66.6k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodI28hb_aat_layout_feature_type_tKN3AAT11FeatureNameEJEEiPKvS5_DpT1_:
 1027|     92|{
 1028|     92|  const K& key = * (const K*) pkey;
 1029|     92|  const V& val = * (const V*) pval;
 1030|       |
 1031|     92|  return val.cmp (key, ds...);
 1032|     92|}
hb-aat-layout.cc:_ZL12ARRAY_LENGTHI17hb_atomic_short_tLj256EEjRAT0__KT_:
  942|  8.45M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
_ZNK5BEIntIjLi3EEcvjEv:
  158|  56.1M|  constexpr operator Type () const { return (v[0] << 16)
  159|  56.1M|					  + (v[1] <<  8)
  160|  56.1M|					  + (v[2]      ); }
_ZN5BEIntItLi2EEC2Et:
  125|  1.68M|  { ((packed_uint16_t *) v)->v = __builtin_bswap16 (V); }
_ZN5BEIntIjLi4EEC2Ej:
  174|  1.33M|  { ((packed_uint32_t *) v)->v = __builtin_bswap32 (V); }
_ZN5BEIntIjLi3EEC2Ej:
  156|  25.1k|				uint8_t ((V      ) & 0xFF)} {}
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN20hb_aat_map_builder_t14feature_info_tES1_JEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   784k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   784k|  int min = 0, max = (int) nmemb - 1;
 1045|   784k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 0, False: 784k]
  ------------------
 1046|      0|  {
 1047|      0|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|      0|#pragma GCC diagnostic push
 1049|      0|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|      0|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|      0|#pragma GCC diagnostic pop
 1052|      0|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|      0|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 0, False: 0]
  ------------------
 1054|      0|      max = mid - 1;
 1055|      0|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 0, False: 0]
  ------------------
 1056|      0|      min = mid + 1;
 1057|      0|    else
 1058|      0|    {
 1059|      0|      *pos = mid;
 1060|      0|      return true;
 1061|      0|    }
 1062|      0|  }
 1063|   784k|  *pos = min;
 1064|   784k|  return false;
 1065|   784k|}
_ZNK5BEIntIhLi1EEcvhEv:
  111|  66.3M|  constexpr operator Type () const { return v; }
hb-aat-layout.cc:_Zan17hb_buffer_flags_tS_:
   60|  12.2M|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-aat-layout.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  97.5M|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-aat-layout.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  97.5M|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-aat-layout.cc:_ZNK3$_8clI15hb_glyph_info_tEEvRT_S3_:
  604|  3.30M|  {
  605|  3.30M|    using std::swap; // allow ADL
  606|  3.30M|    swap (a, b);
  607|  3.30M|  }
hb-aat-layout.cc:_ZNK3$_8clI19hb_glyph_position_tEEvRT_S3_:
  604|  1.20M|  {
  605|  1.20M|    using std::swap; // allow ADL
  606|  1.20M|    swap (a, b);
  607|  1.20M|  }
hb-aat-layout.cc:_ZL15hb_bsearch_implIKvjJEEbPjRKT0_PT_mmPFiPS0_S7_DpT1_ES9_:
 1041|  8.08M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  8.08M|  int min = 0, max = (int) nmemb - 1;
 1045|  16.5M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 10.5M, False: 6.02M]
  ------------------
 1046|  10.5M|  {
 1047|  10.5M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  10.5M|#pragma GCC diagnostic push
 1049|  10.5M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  10.5M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  10.5M|#pragma GCC diagnostic pop
 1052|  10.5M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  10.5M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 4.18M, False: 6.38M]
  ------------------
 1054|  4.18M|      max = mid - 1;
 1055|  6.38M|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 4.32M, False: 2.06M]
  ------------------
 1056|  4.32M|      min = mid + 1;
 1057|  2.06M|    else
 1058|  2.06M|    {
 1059|  2.06M|      *pos = mid;
 1060|  2.06M|      return true;
 1061|  2.06M|    }
 1062|  10.5M|  }
 1063|  6.02M|  *pos = min;
 1064|  6.02M|  return false;
 1065|  8.08M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT19LookupSegmentSingleIN2OT7IntTypeItLj2EEEEEJEEiPKvS7_DpT1_:
 1027|  3.47M|{
 1028|  3.47M|  const K& key = * (const K*) pkey;
 1029|  3.47M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  3.47M|  return val.cmp (key, ds...);
 1032|  3.47M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEEEJEEiPKvS7_DpT1_:
 1027|   486k|{
 1028|   486k|  const K& key = * (const K*) pkey;
 1029|   486k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   486k|  return val.cmp (key, ds...);
 1032|   486k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT12LookupSingleIN2OT7IntTypeItLj2EEEEEJEEiPKvS7_DpT1_:
 1027|  3.02M|{
 1028|  3.02M|  const K& key = * (const K*) pkey;
 1029|  3.02M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  3.02M|  return val.cmp (key, ds...);
 1032|  3.02M|}
hb-aat-layout.cc:_Zor16hb_glyph_flags_tS_:
   59|  14.7M|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-aat-layout.cc:_ZL9hb_memcpyPvPKvm:
  949|  3.74M|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  3.74M|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  3.74M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.86M, False: 1.88M]
  |  |  ------------------
  ------------------
  952|  1.88M|  return memcpy (dst, src, len);
  953|  3.74M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT19LookupSegmentSingleIN2OT11HBGlyphID16EEEJEEiPKvS6_DpT1_:
 1027|   555k|{
 1028|   555k|  const K& key = * (const K*) pkey;
 1029|   555k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   555k|  return val.cmp (key, ds...);
 1032|   555k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EEEJEEiPKvS6_DpT1_:
 1027|   446k|{
 1028|   446k|  const K& key = * (const K*) pkey;
 1029|   446k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   446k|  return val.cmp (key, ds...);
 1032|   446k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT12LookupSingleIN2OT11HBGlyphID16EEEJEEiPKvS6_DpT1_:
 1027|  1.97M|{
 1028|  1.97M|  const K& key = * (const K*) pkey;
 1029|  1.97M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  1.97M|  return val.cmp (key, ds...);
 1032|  1.97M|}
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEjJEEbPjRKT0_PT_mmPFiPKvSE_DpT1_ESG_:
 1041|  19.6M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  19.6M|  int min = 0, max = (int) nmemb - 1;
 1045|  50.7M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 44.4M, False: 6.29M]
  ------------------
 1046|  44.4M|  {
 1047|  44.4M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  44.4M|#pragma GCC diagnostic push
 1049|  44.4M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  44.4M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  44.4M|#pragma GCC diagnostic pop
 1052|  44.4M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  44.4M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 13.3M, False: 31.0M]
  ------------------
 1054|  13.3M|      max = mid - 1;
 1055|  31.0M|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 17.6M, False: 13.3M]
  ------------------
 1056|  17.6M|      min = mid + 1;
 1057|  13.3M|    else
 1058|  13.3M|    {
 1059|  13.3M|      *pos = mid;
 1060|  13.3M|      return true;
 1061|  13.3M|    }
 1062|  44.4M|  }
 1063|  6.29M|  *pos = min;
 1064|  6.29M|  return false;
 1065|  19.6M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEJEEiPKvS8_DpT1_:
 1027|  44.4M|{
 1028|  44.4M|  const K& key = * (const K*) pkey;
 1029|  44.4M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  44.4M|  return val.cmp (key, ds...);
 1032|  44.4M|}
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEjJEEbPjRKT0_PT_mmPFiPKvSE_DpT1_ESG_:
 1041|  1.77M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  1.77M|  int min = 0, max = (int) nmemb - 1;
 1045|  3.56M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 3.32M, False: 237k]
  ------------------
 1046|  3.32M|  {
 1047|  3.32M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  3.32M|#pragma GCC diagnostic push
 1049|  3.32M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  3.32M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  3.32M|#pragma GCC diagnostic pop
 1052|  3.32M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  3.32M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 1.58M, False: 1.73M]
  ------------------
 1054|  1.58M|      max = mid - 1;
 1055|  1.73M|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 204k, False: 1.53M]
  ------------------
 1056|   204k|      min = mid + 1;
 1057|  1.53M|    else
 1058|  1.53M|    {
 1059|  1.53M|      *pos = mid;
 1060|  1.53M|      return true;
 1061|  1.53M|    }
 1062|  3.32M|  }
 1063|   237k|  *pos = min;
 1064|   237k|  return false;
 1065|  1.77M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEJEEiPKvS8_DpT1_:
 1027|  3.32M|{
 1028|  3.32M|  const K& key = * (const K*) pkey;
 1029|  3.32M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  3.32M|  return val.cmp (key, ds...);
 1032|  3.32M|}
hb-aat-layout.cc:_ZL12ARRAY_LENGTHIjLj64EEjRAT0__KT_:
  942|  11.1M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN2OT11HBGlyphID16EjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  3.19M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  3.19M|  int min = 0, max = (int) nmemb - 1;
 1045|  15.3M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 14.0M, False: 1.29M]
  ------------------
 1046|  14.0M|  {
 1047|  14.0M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  14.0M|#pragma GCC diagnostic push
 1049|  14.0M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  14.0M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  14.0M|#pragma GCC diagnostic pop
 1052|  14.0M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  14.0M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 6.45M, False: 7.60M]
  ------------------
 1054|  6.45M|      max = mid - 1;
 1055|  7.60M|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 5.70M, False: 1.90M]
  ------------------
 1056|  5.70M|      min = mid + 1;
 1057|  1.90M|    else
 1058|  1.90M|    {
 1059|  1.90M|      *pos = mid;
 1060|  1.90M|      return true;
 1061|  1.90M|    }
 1062|  14.0M|  }
 1063|  1.29M|  *pos = min;
 1064|  1.29M|  return false;
 1065|  3.19M|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjKN2OT11HBGlyphID16EJEEiPKvS4_DpT1_:
 1027|  14.0M|{
 1028|  14.0M|  const K& key = * (const K*) pkey;
 1029|  14.0M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  14.0M|  return val.cmp (key, ds...);
 1032|  14.0M|}
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN2OT11HBGlyphID24EjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   379k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   379k|  int min = 0, max = (int) nmemb - 1;
 1045|   738k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 648k, False: 89.5k]
  ------------------
 1046|   648k|  {
 1047|   648k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   648k|#pragma GCC diagnostic push
 1049|   648k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   648k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   648k|#pragma GCC diagnostic pop
 1052|   648k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   648k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 347k, False: 301k]
  ------------------
 1054|   347k|      max = mid - 1;
 1055|   301k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 10.8k, False: 290k]
  ------------------
 1056|  10.8k|      min = mid + 1;
 1057|   290k|    else
 1058|   290k|    {
 1059|   290k|      *pos = mid;
 1060|   290k|      return true;
 1061|   290k|    }
 1062|   648k|  }
 1063|  89.5k|  *pos = min;
 1064|  89.5k|  return false;
 1065|   379k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjKN2OT11HBGlyphID24EJEEiPKvS4_DpT1_:
 1027|   648k|{
 1028|   648k|  const K& key = * (const K*) pkey;
 1029|   648k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   648k|  return val.cmp (key, ds...);
 1032|   648k|}
hb-aat-layout.cc:_Zor24hb_unicode_props_flags_tS_:
   59|  16.1M|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-aat-layout.cc:_ZL15hb_bsearch_implIKN3AAT8KernPairENS0_15hb_glyph_pair_tEJEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|   207k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   207k|  int min = 0, max = (int) nmemb - 1;
 1045|   603k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 405k, False: 197k]
  ------------------
 1046|   405k|  {
 1047|   405k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   405k|#pragma GCC diagnostic push
 1049|   405k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   405k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   405k|#pragma GCC diagnostic pop
 1052|   405k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   405k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 146k, False: 259k]
  ------------------
 1054|   146k|      max = mid - 1;
 1055|   259k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 249k, False: 10.1k]
  ------------------
 1056|   249k|      min = mid + 1;
 1057|  10.1k|    else
 1058|  10.1k|    {
 1059|  10.1k|      *pos = mid;
 1060|  10.1k|      return true;
 1061|  10.1k|    }
 1062|   405k|  }
 1063|   197k|  *pos = min;
 1064|   197k|  return false;
 1065|   207k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIN3AAT15hb_glyph_pair_tEKNS0_8KernPairEJEEiPKvS5_DpT1_:
 1027|   405k|{
 1028|   405k|  const K& key = * (const K*) pkey;
 1029|   405k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   405k|  return val.cmp (key, ds...);
 1032|   405k|}
hb-aat-layout.cc:_ZL12ARRAY_LENGTHIjLj8EEjRAT0__KT_:
  942|  2.80M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT19LookupSegmentSingleIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEJEEiPKvSD_DpT1_:
 1027|   255k|{
 1028|   255k|  const K& key = * (const K*) pkey;
 1029|   255k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   255k|  return val.cmp (key, ds...);
 1032|   255k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT18LookupSegmentArrayIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEJEEiPKvSD_DpT1_:
 1027|  78.1k|{
 1028|  78.1k|  const K& key = * (const K*) pkey;
 1029|  78.1k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  78.1k|  return val.cmp (key, ds...);
 1032|  78.1k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT12LookupSingleIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEJEEiPKvSD_DpT1_:
 1027|   255k|{
 1028|   255k|  const K& key = * (const K*) pkey;
 1029|   255k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   255k|  return val.cmp (key, ds...);
 1032|   255k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT19LookupSegmentSingleIN2OT7IntTypeIjLj4EEEEEJEEiPKvS7_DpT1_:
 1027|  2.45k|{
 1028|  2.45k|  const K& key = * (const K*) pkey;
 1029|  2.45k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  2.45k|  return val.cmp (key, ds...);
 1032|  2.45k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEEEJEEiPKvS7_DpT1_:
 1027|  2.29k|{
 1028|  2.29k|  const K& key = * (const K*) pkey;
 1029|  2.29k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  2.29k|  return val.cmp (key, ds...);
 1032|  2.29k|}
hb-aat-layout.cc:_ZL14_hb_cmp_methodIjN3AAT12LookupSingleIN2OT7IntTypeIjLj4EEEEEJEEiPKvS7_DpT1_:
 1027|  5.39k|{
 1028|  5.39k|  const K& key = * (const K*) pkey;
 1029|  5.39k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  5.39k|  return val.cmp (key, ds...);
 1032|  5.39k|}
_ZNK5BEIntIaLi1EEcvaEv:
  111|   304k|  constexpr operator Type () const { return v; }
hb-aat-map.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  11.1k|{
 1007|  11.1k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  11.1k|  unsigned stack_result;
 1009|  11.1k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 11.1k, False: 0]
  ------------------
 1010|  11.1k|    result = &stack_result;
 1011|  11.1k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  11.1k|}
hb-blob.cc:_ZL9hb_memcpyPvPKvm:
  949|  22.6k|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  22.6k|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  22.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22.6k]
  |  |  ------------------
  ------------------
  952|  22.6k|  return memcpy (dst, src, len);
  953|  22.6k|}
hb-blob.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  33.1k|{
 1007|  33.1k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  33.1k|  unsigned stack_result;
 1009|  33.1k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 33.1k, False: 0]
  ------------------
 1010|  33.1k|    result = &stack_result;
 1011|  33.1k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  33.1k|}
hb-buffer.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  1.54M|{
 1007|  1.54M|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  1.54M|  unsigned stack_result;
 1009|  1.54M|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 204k, False: 1.33M]
  ------------------
 1010|   204k|    result = &stack_result;
 1011|  1.54M|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  1.54M|}
hb-buffer.cc:_ZL9hb_memcpyPvPKvm:
  949|  1.57M|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  1.57M|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  1.57M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 34.4k, False: 1.53M]
  |  |  ------------------
  ------------------
  952|  1.53M|  return memcpy (dst, src, len);
  953|  1.57M|}
hb-buffer.cc:_ZL9hb_memsetPvij:
  967|  4.53M|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  4.53M|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  4.53M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 634, False: 4.53M]
  |  |  ------------------
  ------------------
  970|  4.53M|  return memset (s, c, n);
  971|  4.53M|}
hb-buffer.cc:_Zco16hb_glyph_flags_t:
   62|   251k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-buffer.cc:_ZoRR22hb_buffer_diff_flags_tS_:
   63|  3.75k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-buffer.cc:_Zor22hb_buffer_diff_flags_tS_:
   59|  3.75k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-common.cc:_ZL9hb_memcpyPvPKvm:
  949|   611k|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|   611k|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|   611k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 69.0k, False: 542k]
  |  |  ------------------
  ------------------
  952|   542k|  return memcpy (dst, src, len);
  953|   611k|}
hb-common.cc:_ZL9hb_memsetPvij:
  967|  22.5k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  22.5k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  22.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22.5k]
  |  |  ------------------
  ------------------
  970|  22.5k|  return memset (s, c, n);
  971|  22.5k|}
hb-common.cc:_ZL10hb_bsearchIK20hb_ot_language_map_tjEPT_RKT0_S3_mmPFiPKvS8_E:
 1072|  15.3k|{
 1073|  15.3k|  unsigned pos;
 1074|  15.3k|#pragma GCC diagnostic push
 1075|  15.3k|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|  15.3k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 10.1k, False: 5.11k]
  ------------------
 1077|  10.1k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|  15.3k|#pragma GCC diagnostic pop
 1079|  15.3k|}
hb-common.cc:_ZL15hb_bsearch_implIK20hb_ot_language_map_tjJEEbPjRKT0_PT_mmPFiPKvS9_DpT1_ESB_:
 1041|  15.3k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  15.3k|  int min = 0, max = (int) nmemb - 1;
 1045|   113k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 108k, False: 5.11k]
  ------------------
 1046|   108k|  {
 1047|   108k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   108k|#pragma GCC diagnostic push
 1049|   108k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   108k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   108k|#pragma GCC diagnostic pop
 1052|   108k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   108k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 76.9k, False: 31.5k]
  ------------------
 1054|  76.9k|      max = mid - 1;
 1055|  31.5k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 21.3k, False: 10.1k]
  ------------------
 1056|  21.3k|      min = mid + 1;
 1057|  10.1k|    else
 1058|  10.1k|    {
 1059|  10.1k|      *pos = mid;
 1060|  10.1k|      return true;
 1061|  10.1k|    }
 1062|   108k|  }
 1063|  5.11k|  *pos = min;
 1064|  5.11k|  return false;
 1065|  15.3k|}
hb-common.cc:_ZL14_hb_cmp_methodIjK20hb_ot_language_map_tJEEiPKvS3_DpT1_:
 1027|   108k|{
 1028|   108k|  const K& key = * (const K*) pkey;
 1029|   108k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   108k|  return val.cmp (key, ds...);
 1032|   108k|}
hb-common.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|   703k|{
 1007|   703k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|   703k|  unsigned stack_result;
 1009|   703k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 703k, False: 585]
  ------------------
 1010|   703k|    result = &stack_result;
 1011|   703k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|   703k|}
hb-common.cc:_ZL11hb_popcountIjEjT_:
  715|  1.89M|{
  716|  1.89M|#if hb_has_builtin(__builtin_popcount)
  717|  1.89M|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (717:7): [Folded - Ignored]
  ------------------
  718|  1.89M|    return __builtin_popcount (v);
  719|      0|#endif
  720|       |
  721|      0|#if hb_has_builtin(__builtin_popcountl)
  722|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (722:7): [Folded - Ignored]
  ------------------
  723|      0|    return __builtin_popcountl (v);
  724|      0|#endif
  725|       |
  726|      0|#if hb_has_builtin(__builtin_popcountll)
  727|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (727:7): [Folded - Ignored]
  ------------------
  728|      0|    return __builtin_popcountll (v);
  729|      0|#endif
  730|       |
  731|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (731:7): [Folded - Ignored]
  ------------------
  732|      0|  {
  733|       |    /* "HACKMEM 169" */
  734|      0|    uint32_t y;
  735|      0|    y = (v >> 1) &033333333333;
  736|      0|    y = v - y - ((y >>1) & 033333333333);
  737|      0|    return (((y + (y >> 3)) & 030707070707) % 077);
  738|      0|  }
  739|       |
  740|      0|  if (sizeof (T) == 8)
  ------------------
  |  Branch (740:7): [Folded - Ignored]
  ------------------
  741|      0|  {
  742|      0|    uint64_t y = (uint64_t) v;
  743|      0|    y -= ((y >> 1) & 0x5555555555555555ull);
  744|      0|    y = (y & 0x3333333333333333ull) + (y >> 2 & 0x3333333333333333ull);
  745|      0|    return ((y + (y >> 4)) & 0xf0f0f0f0f0f0f0full) * 0x101010101010101ull >> 56;
  746|      0|  }
  747|       |
  748|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (748:7): [Folded - Ignored]
  ------------------
  749|      0|  {
  750|      0|    unsigned int shift = 64;
  751|      0|    return hb_popcount<uint64_t> ((uint64_t) v) + hb_popcount ((uint64_t) (v >> shift));
  752|      0|  }
  753|       |
  754|      0|  assert (0);
  755|      0|  return 0; /* Shut up stupid compiler. */
  756|      0|}
hb-common.cc:_ZL10_hb_roundff:
  206|  5.27k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-common.cc:_ZL12ARRAY_LENGTHI20hb_ot_language_map_tLj240EEjRAT0__KT_:
  942|  8.29k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-common.cc:_ZL12ARRAY_LENGTHI20hb_ot_language_map_tLj117EEjRAT0__KT_:
  942|  7.02k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-face.cc:_ZL15hb_bsearch_implIKN2OT11TableRecordENS0_3TagEJEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|  26.5k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  26.5k|  int min = 0, max = (int) nmemb - 1;
 1045|   128k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 108k, False: 20.3k]
  ------------------
 1046|   108k|  {
 1047|   108k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   108k|#pragma GCC diagnostic push
 1049|   108k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   108k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   108k|#pragma GCC diagnostic pop
 1052|   108k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   108k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 53.3k, False: 54.7k]
  ------------------
 1054|  53.3k|      max = mid - 1;
 1055|  54.7k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 48.5k, False: 6.24k]
  ------------------
 1056|  48.5k|      min = mid + 1;
 1057|  6.24k|    else
 1058|  6.24k|    {
 1059|  6.24k|      *pos = mid;
 1060|  6.24k|      return true;
 1061|  6.24k|    }
 1062|   108k|  }
 1063|  20.3k|  *pos = min;
 1064|  20.3k|  return false;
 1065|  26.5k|}
hb-face.cc:_ZL14_hb_cmp_methodIN2OT3TagEKNS0_11TableRecordEJEEiPKvS5_DpT1_:
 1027|   108k|{
 1028|   108k|  const K& key = * (const K*) pkey;
 1029|   108k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   108k|  return val.cmp (key, ds...);
 1032|   108k|}
hb-face.cc:_ZL15hb_bsearch_implIKN12hb_bit_set_t10page_map_tES1_JEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  1.36M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  1.36M|  int min = 0, max = (int) nmemb - 1;
 1045|  8.99M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 8.11M, False: 881k]
  ------------------
 1046|  8.11M|  {
 1047|  8.11M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  8.11M|#pragma GCC diagnostic push
 1049|  8.11M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  8.11M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  8.11M|#pragma GCC diagnostic pop
 1052|  8.11M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  8.11M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 2.48M, False: 5.63M]
  ------------------
 1054|  2.48M|      max = mid - 1;
 1055|  5.63M|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 5.14M, False: 486k]
  ------------------
 1056|  5.14M|      min = mid + 1;
 1057|   486k|    else
 1058|   486k|    {
 1059|   486k|      *pos = mid;
 1060|   486k|      return true;
 1061|   486k|    }
 1062|  8.11M|  }
 1063|   881k|  *pos = min;
 1064|   881k|  return false;
 1065|  1.36M|}
hb-face.cc:_ZL14_hb_cmp_methodIN12hb_bit_set_t10page_map_tEKS1_JEEiPKvS4_DpT1_:
 1027|  8.11M|{
 1028|  8.11M|  const K& key = * (const K*) pkey;
 1029|  8.11M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  8.11M|  return val.cmp (key, ds...);
 1032|  8.11M|}
hb-face.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|   217k|{
 1007|   217k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|   217k|  unsigned stack_result;
 1009|   217k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 86.5k, False: 131k]
  ------------------
 1010|  86.5k|    result = &stack_result;
 1011|   217k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|   217k|}
hb-face.cc:_ZL12ARRAY_LENGTHIyLj8EEjRAT0__KT_:
  942|  19.0M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-face.cc:_ZL9hb_memsetPvij:
  967|  66.6k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  66.6k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.73k, False: 59.8k]
  |  |  ------------------
  ------------------
  970|  59.8k|  return memset (s, c, n);
  971|  66.6k|}
hb-face.cc:_ZL14hb_bit_storageIjEjT_:
  762|  32.8k|{
  763|  32.8k|  if (unlikely (!v)) return 0;
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.8k]
  |  |  ------------------
  ------------------
  764|       |
  765|  32.8k|#if hb_has_builtin(__builtin_clz)
  766|  32.8k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (766:7): [Folded - Ignored]
  ------------------
  767|  32.8k|    return sizeof (unsigned int) * 8 - __builtin_clz (v);
  768|      0|#endif
  769|       |
  770|      0|#if hb_has_builtin(__builtin_clzl)
  771|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (771:7): [Folded - Ignored]
  ------------------
  772|      0|    return sizeof (unsigned long) * 8 - __builtin_clzl (v);
  773|      0|#endif
  774|       |
  775|      0|#if hb_has_builtin(__builtin_clzll)
  776|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (776:7): [Folded - Ignored]
  ------------------
  777|      0|    return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
  778|      0|#endif
  779|       |
  780|       |#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) && (__GNUC__ < 4))
  781|       |  if (sizeof (T) <= sizeof (unsigned int))
  782|       |  {
  783|       |    unsigned long where;
  784|       |    _BitScanReverse (&where, v);
  785|       |    return 1 + where;
  786|       |  }
  787|       |# if defined(_WIN64)
  788|       |  if (sizeof (T) <= 8)
  789|       |  {
  790|       |    unsigned long where;
  791|       |    _BitScanReverse64 (&where, v);
  792|       |    return 1 + where;
  793|       |  }
  794|       |# endif
  795|       |#endif
  796|       |
  797|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (797:7): [Folded - Ignored]
  ------------------
  798|      0|  {
  799|       |    /* "bithacks" */
  800|      0|    const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
  801|      0|    const unsigned int S[] = {1, 2, 4, 8, 16};
  802|      0|    unsigned int r = 0;
  803|      0|    for (int i = 4; i >= 0; i--)
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|      if (v & b[i])
  ------------------
  |  Branch (804:11): [True: 0, False: 0]
  ------------------
  805|      0|      {
  806|      0|	v >>= S[i];
  807|      0|	r |= S[i];
  808|      0|      }
  809|      0|    return r + 1;
  810|      0|  }
  811|      0|  if (sizeof (T) <= 8)
  ------------------
  |  Branch (811:7): [Folded - Ignored]
  ------------------
  812|      0|  {
  813|       |    /* "bithacks" */
  814|      0|    const uint64_t b[] = {0x2ULL, 0xCULL, 0xF0ULL, 0xFF00ULL, 0xFFFF0000ULL, 0xFFFFFFFF00000000ULL};
  815|      0|    const unsigned int S[] = {1, 2, 4, 8, 16, 32};
  816|      0|    unsigned int r = 0;
  817|      0|    for (int i = 5; i >= 0; i--)
  ------------------
  |  Branch (817:21): [True: 0, False: 0]
  ------------------
  818|      0|      if (v & b[i])
  ------------------
  |  Branch (818:11): [True: 0, False: 0]
  ------------------
  819|      0|      {
  820|      0|	v >>= S[i];
  821|      0|	r |= S[i];
  822|      0|      }
  823|      0|    return r + 1;
  824|      0|  }
  825|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (825:7): [Folded - Ignored]
  ------------------
  826|      0|  {
  827|      0|    unsigned int shift = 64;
  828|      0|    return (v >> shift) ? hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift :
  ------------------
  |  Branch (828:12): [True: 0, False: 0]
  ------------------
  829|      0|			  hb_bit_storage<uint64_t> ((uint64_t) v);
  830|      0|  }
  831|       |
  832|      0|  assert (0);
  833|      0|  return 0; /* Shut up stupid compiler. */
  834|      0|}
hb-face.cc:_ZL12ARRAY_LENGTHIjLj32EEjRAT0__KT_:
  942|  32.3k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-face.cc:_ZL15hb_bsearch_implIKN2OT23VariationSelectorRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  67.7k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  67.7k|  int min = 0, max = (int) nmemb - 1;
 1045|  68.6k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 1.20k, False: 67.4k]
  ------------------
 1046|  1.20k|  {
 1047|  1.20k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  1.20k|#pragma GCC diagnostic push
 1049|  1.20k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  1.20k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  1.20k|#pragma GCC diagnostic pop
 1052|  1.20k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  1.20k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 313, False: 889]
  ------------------
 1054|    313|      max = mid - 1;
 1055|    889|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 578, False: 311]
  ------------------
 1056|    578|      min = mid + 1;
 1057|    311|    else
 1058|    311|    {
 1059|    311|      *pos = mid;
 1060|    311|      return true;
 1061|    311|    }
 1062|  1.20k|  }
 1063|  67.4k|  *pos = min;
 1064|  67.4k|  return false;
 1065|  67.7k|}
hb-face.cc:_ZL14_hb_cmp_methodIjKN2OT23VariationSelectorRecordEJEEiPKvS4_DpT1_:
 1027|  1.20k|{
 1028|  1.20k|  const K& key = * (const K*) pkey;
 1029|  1.20k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  1.20k|  return val.cmp (key, ds...);
 1032|  1.20k|}
hb-face.cc:_ZL15hb_bsearch_implIKN2OT14EncodingRecordES1_JEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   316k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   316k|  int min = 0, max = (int) nmemb - 1;
 1045|   348k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 35.6k, False: 312k]
  ------------------
 1046|  35.6k|  {
 1047|  35.6k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  35.6k|#pragma GCC diagnostic push
 1049|  35.6k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  35.6k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  35.6k|#pragma GCC diagnostic pop
 1052|  35.6k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  35.6k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 16.4k, False: 19.2k]
  ------------------
 1054|  16.4k|      max = mid - 1;
 1055|  19.2k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 15.9k, False: 3.25k]
  ------------------
 1056|  15.9k|      min = mid + 1;
 1057|  3.25k|    else
 1058|  3.25k|    {
 1059|  3.25k|      *pos = mid;
 1060|  3.25k|      return true;
 1061|  3.25k|    }
 1062|  35.6k|  }
 1063|   312k|  *pos = min;
 1064|   312k|  return false;
 1065|   316k|}
hb-face.cc:_ZL14_hb_cmp_methodIN2OT14EncodingRecordEKS1_JEEiPKvS4_DpT1_:
 1027|  35.6k|{
 1028|  35.6k|  const K& key = * (const K*) pkey;
 1029|  35.6k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  35.6k|  return val.cmp (key, ds...);
 1032|  35.6k|}
hb-face.cc:_ZL15hb_bsearch_implIKN2OT21CmapSubtableLongGroupEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   199k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   199k|  int min = 0, max = (int) nmemb - 1;
 1045|   419k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 365k, False: 54.5k]
  ------------------
 1046|   365k|  {
 1047|   365k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   365k|#pragma GCC diagnostic push
 1049|   365k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   365k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   365k|#pragma GCC diagnostic pop
 1052|   365k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   365k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 135k, False: 229k]
  ------------------
 1054|   135k|      max = mid - 1;
 1055|   229k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 84.7k, False: 144k]
  ------------------
 1056|  84.7k|      min = mid + 1;
 1057|   144k|    else
 1058|   144k|    {
 1059|   144k|      *pos = mid;
 1060|   144k|      return true;
 1061|   144k|    }
 1062|   365k|  }
 1063|  54.5k|  *pos = min;
 1064|  54.5k|  return false;
 1065|   199k|}
hb-face.cc:_ZL14_hb_cmp_methodIjKN2OT21CmapSubtableLongGroupEJEEiPKvS4_DpT1_:
 1027|   365k|{
 1028|   365k|  const K& key = * (const K*) pkey;
 1029|   365k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   365k|  return val.cmp (key, ds...);
 1032|   365k|}
hb-face.cc:_ZL10hb_bsearchIKN2OT7IntTypeItLj2EEEjJjEEPT_RKT0_S5_mmPFiPKvSA_DpT1_ESC_:
 1086|   148k|{
 1087|   148k|  unsigned pos;
 1088|   148k|#pragma GCC diagnostic push
 1089|   148k|#pragma GCC diagnostic ignored "-Wcast-align"
 1090|   148k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar, ds...) ?
  ------------------
  |  Branch (1090:10): [True: 82.7k, False: 65.6k]
  ------------------
 1091|  82.7k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1092|   148k|#pragma GCC diagnostic pop
 1093|   148k|}
hb-face.cc:_ZL15hb_bsearch_implIKN2OT7IntTypeItLj2EEEjJjEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|   148k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   148k|  int min = 0, max = (int) nmemb - 1;
 1045|   366k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 301k, False: 65.6k]
  ------------------
 1046|   301k|  {
 1047|   301k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   301k|#pragma GCC diagnostic push
 1049|   301k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   301k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   301k|#pragma GCC diagnostic pop
 1052|   301k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   301k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 98.3k, False: 202k]
  ------------------
 1054|  98.3k|      max = mid - 1;
 1055|   202k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 120k, False: 82.7k]
  ------------------
 1056|   120k|      min = mid + 1;
 1057|  82.7k|    else
 1058|  82.7k|    {
 1059|  82.7k|      *pos = mid;
 1060|  82.7k|      return true;
 1061|  82.7k|    }
 1062|   301k|  }
 1063|  65.6k|  *pos = min;
 1064|  65.6k|  return false;
 1065|   148k|}
hb-face.cc:_ZL14_hb_cmp_methodIjZNK2OT19CmapSubtableFormat413accelerator_t9get_glyphEjPjE11CustomRangeJjEEiPKvS6_DpT1_:
 1027|   301k|{
 1028|   301k|  const K& key = * (const K*) pkey;
 1029|   301k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   301k|  return val.cmp (key, ds...);
 1032|   301k|}
hb-fallback-shape.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|   294k|{
  982|   294k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|   294k|  return (T)(u - lo) <= (T)(hi - lo);
  987|   294k|}
hb-fallback-shape.cc:_ZL12hb_in_rangesIjJjjjjEEbT_S0_S0_DpT0_:
  995|  6.37k|{
  996|  6.37k|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 3.68k, False: 2.69k]
  |  Branch (996:42): [True: 198, False: 2.49k]
  ------------------
  997|  6.37k|}
hb-fallback-shape.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|  2.69k|{
  996|  2.69k|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 84, False: 2.60k]
  |  Branch (996:42): [True: 114, False: 2.49k]
  ------------------
  997|  2.69k|}
hb-fallback-shape.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|  2.60k|{
  991|  2.60k|  return hb_in_range (u, lo1, hi1);
  992|  2.60k|}
hb-font.cc:_ZL9hb_memsetPvij:
  967|  33.5k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  33.5k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.5k]
  |  |  ------------------
  ------------------
  970|  33.5k|  return memset (s, c, n);
  971|  33.5k|}
hb-font.cc:_ZL9hb_memcpyPvPKvm:
  949|  2.11k|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  2.11k|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  2.11k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.11k]
  |  |  ------------------
  ------------------
  952|  2.11k|  return memcpy (dst, src, len);
  953|  2.11k|}
hb-font.cc:_ZL10_hb_roundff:
  206|   133k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-font.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  9.05k|{
 1007|  9.05k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  9.05k|  unsigned stack_result;
 1009|  9.05k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 0, False: 9.05k]
  ------------------
 1010|      0|    result = &stack_result;
 1011|  9.05k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  9.05k|}
_ZN9hb_pair_tIjjEC2Ejj:
  623|  4.14k|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
hb-number.cc:_ZL7ISSPACEh:
  924|  1.91k|{ return c == ' ' || c =='\f'|| c =='\n'|| c =='\r'|| c =='\t'|| c =='\v'; }
  ------------------
  |  Branch (924:10): [True: 0, False: 1.91k]
  |  Branch (924:22): [True: 0, False: 1.91k]
  |  Branch (924:33): [True: 0, False: 1.91k]
  |  Branch (924:44): [True: 0, False: 1.91k]
  |  Branch (924:55): [True: 0, False: 1.91k]
  |  Branch (924:66): [True: 0, False: 1.91k]
  ------------------
hb-number.cc:_ZL12ARRAY_LENGTHIdLj9EEjRAT0__KT_:
  942|  1.28k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-color.cc:_ZL15hb_bsearch_implIKN2OT20BaseGlyphPaintRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   137k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   137k|  int min = 0, max = (int) nmemb - 1;
 1045|   219k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 215k, False: 4.55k]
  ------------------
 1046|   215k|  {
 1047|   215k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   215k|#pragma GCC diagnostic push
 1049|   215k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   215k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   215k|#pragma GCC diagnostic pop
 1052|   215k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   215k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 73.0k, False: 142k]
  ------------------
 1054|  73.0k|      max = mid - 1;
 1055|   142k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 8.67k, False: 133k]
  ------------------
 1056|  8.67k|      min = mid + 1;
 1057|   133k|    else
 1058|   133k|    {
 1059|   133k|      *pos = mid;
 1060|   133k|      return true;
 1061|   133k|    }
 1062|   215k|  }
 1063|  4.55k|  *pos = min;
 1064|  4.55k|  return false;
 1065|   137k|}
hb-ot-color.cc:_ZL14_hb_cmp_methodIjKN2OT20BaseGlyphPaintRecordEJEEiPKvS4_DpT1_:
 1027|   215k|{
 1028|   215k|  const K& key = * (const K*) pkey;
 1029|   215k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   215k|  return val.cmp (key, ds...);
 1032|   215k|}
hb-ot-color.cc:_ZL15hb_bsearch_implIKN2OT15BaseGlyphRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  34.9k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  34.9k|  int min = 0, max = (int) nmemb - 1;
 1045|  37.5k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 2.79k, False: 34.7k]
  ------------------
 1046|  2.79k|  {
 1047|  2.79k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  2.79k|#pragma GCC diagnostic push
 1049|  2.79k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  2.79k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  2.79k|#pragma GCC diagnostic pop
 1052|  2.79k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  2.79k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 355, False: 2.43k]
  ------------------
 1054|    355|      max = mid - 1;
 1055|  2.43k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 2.27k, False: 163]
  ------------------
 1056|  2.27k|      min = mid + 1;
 1057|    163|    else
 1058|    163|    {
 1059|    163|      *pos = mid;
 1060|    163|      return true;
 1061|    163|    }
 1062|  2.79k|  }
 1063|  34.7k|  *pos = min;
 1064|  34.7k|  return false;
 1065|  34.9k|}
hb-ot-color.cc:_ZL14_hb_cmp_methodIjKN2OT15BaseGlyphRecordEJEEiPKvS4_DpT1_:
 1027|  2.79k|{
 1028|  2.79k|  const K& key = * (const K*) pkey;
 1029|  2.79k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  2.79k|  return val.cmp (key, ds...);
 1032|  2.79k|}
hb-ot-color.cc:_ZL15hb_bsearch_implIKN2OT21SVGDocumentIndexEntryEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  33.3k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  33.3k|  int min = 0, max = (int) nmemb - 1;
 1045|  33.4k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 115, False: 33.3k]
  ------------------
 1046|    115|  {
 1047|    115|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    115|#pragma GCC diagnostic push
 1049|    115|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    115|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    115|#pragma GCC diagnostic pop
 1052|    115|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    115|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 23, False: 92]
  ------------------
 1054|     23|      max = mid - 1;
 1055|     92|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 91, False: 1]
  ------------------
 1056|     91|      min = mid + 1;
 1057|      1|    else
 1058|      1|    {
 1059|      1|      *pos = mid;
 1060|      1|      return true;
 1061|      1|    }
 1062|    115|  }
 1063|  33.3k|  *pos = min;
 1064|  33.3k|  return false;
 1065|  33.3k|}
hb-ot-color.cc:_ZL14_hb_cmp_methodIjKN2OT21SVGDocumentIndexEntryEJEEiPKvS4_DpT1_:
 1027|    115|{
 1028|    115|  const K& key = * (const K*) pkey;
 1029|    115|  const V& val = * (const V*) pval;
 1030|       |
 1031|    115|  return val.cmp (key, ds...);
 1032|    115|}
hb-ot-color.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  1.35M|{
 1007|  1.35M|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  1.35M|  unsigned stack_result;
 1009|  1.35M|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 0, False: 1.35M]
  ------------------
 1010|      0|    result = &stack_result;
 1011|  1.35M|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  1.35M|}
hb-ot-font.cc:_ZL12ARRAY_LENGTHI15hb_atomic_int_tLj256EEjRAT0__KT_:
  942|  9.47M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-font.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|   219k|{
 1007|   219k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|   219k|  unsigned stack_result;
 1009|   219k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 57.6k, False: 162k]
  ------------------
 1010|  57.6k|    result = &stack_result;
 1011|   219k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|   219k|}
hb-ot-font.cc:_ZL15hb_bsearch_implIKN2OT17UnicodeValueRangeEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  34.3k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  34.3k|  int min = 0, max = (int) nmemb - 1;
 1045|  34.9k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 582, False: 34.3k]
  ------------------
 1046|    582|  {
 1047|    582|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    582|#pragma GCC diagnostic push
 1049|    582|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    582|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    582|#pragma GCC diagnostic pop
 1052|    582|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    582|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 250, False: 332]
  ------------------
 1054|    250|      max = mid - 1;
 1055|    332|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 277, False: 55]
  ------------------
 1056|    277|      min = mid + 1;
 1057|     55|    else
 1058|     55|    {
 1059|     55|      *pos = mid;
 1060|     55|      return true;
 1061|     55|    }
 1062|    582|  }
 1063|  34.3k|  *pos = min;
 1064|  34.3k|  return false;
 1065|  34.3k|}
hb-ot-font.cc:_ZL14_hb_cmp_methodIjKN2OT17UnicodeValueRangeEJEEiPKvS4_DpT1_:
 1027|    582|{
 1028|    582|  const K& key = * (const K*) pkey;
 1029|    582|  const V& val = * (const V*) pval;
 1030|       |
 1031|    582|  return val.cmp (key, ds...);
 1032|    582|}
hb-ot-font.cc:_ZL15hb_bsearch_implIKN2OT10UVSMappingEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  34.3k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  34.3k|  int min = 0, max = (int) nmemb - 1;
 1045|  34.4k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 162, False: 34.3k]
  ------------------
 1046|    162|  {
 1047|    162|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    162|#pragma GCC diagnostic push
 1049|    162|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    162|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    162|#pragma GCC diagnostic pop
 1052|    162|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    162|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 84, False: 78]
  ------------------
 1054|     84|      max = mid - 1;
 1055|     78|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 57, False: 21]
  ------------------
 1056|     57|      min = mid + 1;
 1057|     21|    else
 1058|     21|    {
 1059|     21|      *pos = mid;
 1060|     21|      return true;
 1061|     21|    }
 1062|    162|  }
 1063|  34.3k|  *pos = min;
 1064|  34.3k|  return false;
 1065|  34.3k|}
hb-ot-font.cc:_ZL14_hb_cmp_methodIjKN2OT10UVSMappingEJEEiPKvS4_DpT1_:
 1027|    162|{
 1028|    162|  const K& key = * (const K*) pkey;
 1029|    162|  const V& val = * (const V*) pval;
 1030|       |
 1031|    162|  return val.cmp (key, ds...);
 1032|    162|}
hb-ot-font.cc:_ZL10_hb_roundff:
  206|  1.58k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-ot-font.cc:_ZL9hb_memsetPvij:
  967|  66.2k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  66.2k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  66.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 66.2k]
  |  |  ------------------
  ------------------
  970|  66.2k|  return memset (s, c, n);
  971|  66.2k|}
hb-ot-font.cc:_ZL15hb_bsearch_implIKN2OT16VertOriginMetricEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|     38|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|     38|  int min = 0, max = (int) nmemb - 1;
 1045|    202|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 168, False: 34]
  ------------------
 1046|    168|  {
 1047|    168|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    168|#pragma GCC diagnostic push
 1049|    168|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    168|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    168|#pragma GCC diagnostic pop
 1052|    168|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    168|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 33, False: 135]
  ------------------
 1054|     33|      max = mid - 1;
 1055|    135|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 131, False: 4]
  ------------------
 1056|    131|      min = mid + 1;
 1057|      4|    else
 1058|      4|    {
 1059|      4|      *pos = mid;
 1060|      4|      return true;
 1061|      4|    }
 1062|    168|  }
 1063|     34|  *pos = min;
 1064|     34|  return false;
 1065|     38|}
hb-ot-font.cc:_ZL14_hb_cmp_methodIjKN2OT16VertOriginMetricEJEEiPKvS4_DpT1_:
 1027|    168|{
 1028|    168|  const K& key = * (const K*) pkey;
 1029|    168|  const V& val = * (const V*) pval;
 1030|       |
 1031|    168|  return val.cmp (key, ds...);
 1032|    168|}
hb-ot-font.cc:_ZL12ARRAY_LENGTHIcLj32EEjRAT0__KT_:
  942|  20.8k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-font.cc:_ZNK3$_7clIiEEvRT_S2_:
  604|   165k|  {
  605|   165k|    using std::swap; // allow ADL
  606|   165k|    swap (a, b);
  607|   165k|  }
hb-ot-font.cc:_ZNK3$_7clIjEEvRT_S2_:
  604|   165k|  {
  605|   165k|    using std::swap; // allow ADL
  606|   165k|    swap (a, b);
  607|   165k|  }
hb-ot-font.cc:_ZNK3$_7clI11hb_vector_tIN3CFF8op_str_tELb0EEEEvRT_S6_:
  604|   165k|  {
  605|   165k|    using std::swap; // allow ADL
  606|   165k|    swap (a, b);
  607|   165k|  }
hb-ot-font.cc:_ZNK3$_7clIPN3CFF8op_str_tEEEvRT_S5_:
  604|   165k|  {
  605|   165k|    using std::swap; // allow ADL
  606|   165k|    swap (a, b);
  607|   165k|  }
hb-ot-font.cc:_ZL15hb_bsearch_implIKN2OT10ClipRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   138k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   138k|  int min = 0, max = (int) nmemb - 1;
 1045|   146k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 9.43k, False: 137k]
  ------------------
 1046|  9.43k|  {
 1047|  9.43k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  9.43k|#pragma GCC diagnostic push
 1049|  9.43k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  9.43k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  9.43k|#pragma GCC diagnostic pop
 1052|  9.43k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  9.43k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 7.07k, False: 2.35k]
  ------------------
 1054|  7.07k|      max = mid - 1;
 1055|  2.35k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 1.20k, False: 1.15k]
  ------------------
 1056|  1.20k|      min = mid + 1;
 1057|  1.15k|    else
 1058|  1.15k|    {
 1059|  1.15k|      *pos = mid;
 1060|  1.15k|      return true;
 1061|  1.15k|    }
 1062|  9.43k|  }
 1063|   137k|  *pos = min;
 1064|   137k|  return false;
 1065|   138k|}
hb-ot-font.cc:_ZL14_hb_cmp_methodIjKN2OT10ClipRecordEJEEiPKvS4_DpT1_:
 1027|  9.43k|{
 1028|  9.43k|  const K& key = * (const K*) pkey;
 1029|  9.43k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  9.43k|  return val.cmp (key, ds...);
 1032|  9.43k|}
hb-ot-font.cc:_ZL12ARRAY_LENGTHIjLj259EEjRAT0__KT_:
  942|  2.31M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-font.cc:_ZL12ARRAY_LENGTHIjLj392EEjRAT0__KT_:
  942|  50.3k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-font.cc:_ZL8hb_qsortPvmmPFiPKvS1_S_ES_:
 1298|    210|{
 1299|       |#ifdef HAVE_GNU_QSORT_R
 1300|       |  qsort_r (base, nel, width, compar, arg);
 1301|       |#else
 1302|    210|  sort_r_simple (base, nel, width, compar, arg);
 1303|    210|#endif
 1304|    210|}
hb-ot-font.cc:_ZL13sort_r_simpleIJPvEEvS0_mmPFiPKvS2_DpT_ES4_:
 1169|  22.6k|{
 1170|  22.6k|  char *b = (char *)base, *end = b + nel*w;
 1171|       |
 1172|       |  /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1173|       |  printf("\n"); */
 1174|       |
 1175|  22.6k|  if(nel < 10) {
  ------------------
  |  Branch (1175:6): [True: 11.4k, False: 11.1k]
  ------------------
 1176|       |    /* Insertion sort for arbitrarily small inputs */
 1177|  11.4k|    char *pi, *pj;
 1178|  42.1k|    for(pi = b+w; pi < end; pi += w) {
  ------------------
  |  Branch (1178:19): [True: 30.7k, False: 11.4k]
  ------------------
 1179|  58.4k|      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
  ------------------
  |  Branch (1179:20): [True: 54.0k, False: 4.41k]
  |  Branch (1179:30): [True: 27.6k, False: 26.3k]
  ------------------
 1180|  30.7k|    }
 1181|  11.4k|  }
 1182|  11.1k|  else
 1183|  11.1k|  {
 1184|       |    /* nel > 9; Quicksort */
 1185|       |
 1186|  11.1k|    int cmp;
 1187|  11.1k|    char *pl, *ple, *pr, *pre, *pivot;
 1188|  11.1k|    char *last = b+w*(nel-1), *tmp;
 1189|       |
 1190|       |    /*
 1191|       |    Use median of second, middle and second-last items as pivot.
 1192|       |    First and last may have been swapped with pivot and therefore be extreme
 1193|       |    */
 1194|  11.1k|    char *l[3];
 1195|  11.1k|    l[0] = b + w;
 1196|  11.1k|    l[1] = b+w*(nel/2);
 1197|  11.1k|    l[2] = last - w;
 1198|       |
 1199|       |    /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */
 1200|       |
 1201|  11.1k|    if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  4.18k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1201:8): [True: 4.18k, False: 7.01k]
  ------------------
 1202|  11.1k|    if(compar(l[1],l[2],ds...) > 0) {
  ------------------
  |  Branch (1202:8): [True: 5.82k, False: 5.37k]
  ------------------
 1203|  5.82k|      SORT_R_SWAP(l[1], l[2], tmp);
  ------------------
  |  | 1116|  5.82k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
 1204|  5.82k|      if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  2.53k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1204:10): [True: 2.53k, False: 3.29k]
  ------------------
 1205|  5.82k|    }
 1206|       |
 1207|       |    /* swap mid value (l[1]), and last element to put pivot as last element */
 1208|  11.1k|    if(l[1] != last) { sort_r_swap(l[1], last, w); }
  ------------------
  |  Branch (1208:8): [True: 11.1k, False: 0]
  ------------------
 1209|       |
 1210|       |    /*
 1211|       |    pl is the next item on the left to be compared to the pivot
 1212|       |    pr is the last item on the right that was compared to the pivot
 1213|       |    ple is the left position to put the next item that equals the pivot
 1214|       |    ple is the last right position where we put an item that equals the pivot
 1215|       |                                           v- end (beyond the array)
 1216|       |      EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE.
 1217|       |      ^- b  ^- ple  ^- pl   ^- pr  ^- pre ^- last (where the pivot is)
 1218|       |    Pivot comparison key:
 1219|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1220|       |    */
 1221|  11.1k|    pivot = last;
 1222|  11.1k|    ple = pl = b;
 1223|  11.1k|    pre = pr = last;
 1224|       |
 1225|       |    /*
 1226|       |    Strategy:
 1227|       |    Loop into the list from the left and right at the same time to find:
 1228|       |    - an item on the left that is greater than the pivot
 1229|       |    - an item on the right that is less than the pivot
 1230|       |    Once found, they are swapped and the loop continues.
 1231|       |    Meanwhile items that are equal to the pivot are moved to the edges of the
 1232|       |    array.
 1233|       |    */
 1234|   306k|    while(pl < pr) {
  ------------------
  |  Branch (1234:11): [True: 300k, False: 6.52k]
  ------------------
 1235|       |      /* Move left hand items which are equal to the pivot to the far left.
 1236|       |         break when we find an item that is greater than the pivot */
 1237|  1.04M|      for(; pl < pr; pl += w) {
  ------------------
  |  Branch (1237:13): [True: 1.03M, False: 4.67k]
  ------------------
 1238|  1.03M|        cmp = compar(pl, pivot, ds...);
 1239|  1.03M|        if(cmp > 0) { break; }
  ------------------
  |  Branch (1239:12): [True: 295k, False: 739k]
  ------------------
 1240|   739k|        else if(cmp == 0) {
  ------------------
  |  Branch (1240:17): [True: 188k, False: 551k]
  ------------------
 1241|   188k|          if(ple < pl) { sort_r_swap(ple, pl, w); }
  ------------------
  |  Branch (1241:14): [True: 160k, False: 27.8k]
  ------------------
 1242|   188k|          ple += w;
 1243|   188k|        }
 1244|  1.03M|      }
 1245|       |      /* break if last batch of left hand items were equal to pivot */
 1246|   300k|      if(pl >= pr) { break; }
  ------------------
  |  Branch (1246:10): [True: 4.67k, False: 295k]
  ------------------
 1247|       |      /* Move right hand items which are equal to the pivot to the far right.
 1248|       |         break when we find an item that is less than the pivot */
 1249|  1.54M|      for(; pl < pr; ) {
  ------------------
  |  Branch (1249:13): [True: 1.54M, False: 5.24k]
  ------------------
 1250|  1.54M|        pr -= w; /* Move right pointer onto an unprocessed item */
 1251|  1.54M|        cmp = compar(pr, pivot, ds...);
 1252|  1.54M|        if(cmp == 0) {
  ------------------
  |  Branch (1252:12): [True: 605k, False: 937k]
  ------------------
 1253|   605k|          pre -= w;
 1254|   605k|          if(pr < pre) { sort_r_swap(pr, pre, w); }
  ------------------
  |  Branch (1254:14): [True: 569k, False: 35.6k]
  ------------------
 1255|   605k|        }
 1256|   937k|        else if(cmp < 0) {
  ------------------
  |  Branch (1256:17): [True: 290k, False: 646k]
  ------------------
 1257|   290k|          if(pl < pr) { sort_r_swap(pl, pr, w); }
  ------------------
  |  Branch (1257:14): [True: 290k, False: 0]
  ------------------
 1258|   290k|          pl += w;
 1259|   290k|          break;
 1260|   290k|        }
 1261|  1.54M|      }
 1262|   295k|    }
 1263|       |
 1264|  11.1k|    pl = pr; /* pr may have gone below pl */
 1265|       |
 1266|       |    /*
 1267|       |    Now we need to go from: EEELLLGGGGEEEE
 1268|       |                        to: LLLEEEEEEEGGGG
 1269|       |    Pivot comparison key:
 1270|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1271|       |    */
 1272|  11.1k|    sort_r_swap_blocks(b, ple-b, pl-ple);
 1273|  11.1k|    sort_r_swap_blocks(pr, pre-pr, end-pre);
 1274|       |
 1275|       |    /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1276|       |    printf("\n");*/
 1277|       |
 1278|  11.1k|    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
 1279|  11.1k|    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
 1280|  11.1k|  }
 1281|  22.6k|}
hb-ot-font.cc:_ZL14sort_r_cmpswapIJPvEEiPcS1_mPFiPKvS3_DpT_ES5_:
 1137|  54.0k|{
 1138|  54.0k|  if(compar(a, b, ds...) > 0) {
  ------------------
  |  Branch (1138:6): [True: 27.6k, False: 26.3k]
  ------------------
 1139|  27.6k|    sort_r_swap(a, b, w);
 1140|  27.6k|    return 1;
 1141|  27.6k|  }
 1142|  26.3k|  return 0;
 1143|  54.0k|}
hb-ot-font.cc:_ZL11sort_r_swapPcS_m:
 1122|  1.33M|{
 1123|  1.33M|  char tmp, *end = a+w;
 1124|  11.0M|  for(; a < end; a++, b++) { SORT_R_SWAP(*a, *b, tmp); }
  ------------------
  |  | 1116|  9.70M|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1124:9): [True: 9.70M, False: 1.33M]
  ------------------
 1125|  1.33M|}
hb-ot-font.cc:_ZL18sort_r_swap_blocksPcmm:
 1154|  45.0k|{
 1155|  45.0k|  if(na > 0 && nb > 0) {
  ------------------
  |  Branch (1155:6): [True: 30.3k, False: 14.7k]
  |  Branch (1155:16): [True: 28.7k, False: 1.54k]
  ------------------
 1156|  28.7k|    if(na > nb) { sort_r_swap(ptr, ptr+na, nb); }
  ------------------
  |  Branch (1156:8): [True: 19.3k, False: 9.39k]
  ------------------
 1157|  9.39k|    else { sort_r_swap(ptr, ptr+nb, na); }
 1158|  28.7k|  }
 1159|  45.0k|}
hb-ot-font.cc:_ZL9hb_memcmpPKvS0_j:
  957|  1.54M|{
  958|       |  /* It's illegal to pass NULL to memcmp(), even if len is zero.
  959|       |   * So, wrap it.
  960|       |   * https://sourceware.org/bugzilla/show_bug.cgi?id=23878 */
  961|  1.54M|  if (unlikely (!len)) return 0;
  ------------------
  |  |  259|  1.54M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 433k, False: 1.11M]
  |  |  ------------------
  ------------------
  962|  1.11M|  return memcmp (a, b, len);
  963|  1.54M|}
hb-ot-font.cc:_ZL10hb_bsearchIt10hb_array_tIKcEJPvEEPT_RKT0_S5_mmPFiPKvSA_DpT1_ESC_:
 1086|    210|{
 1087|    210|  unsigned pos;
 1088|    210|#pragma GCC diagnostic push
 1089|    210|#pragma GCC diagnostic ignored "-Wcast-align"
 1090|    210|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar, ds...) ?
  ------------------
  |  Branch (1090:10): [True: 29, False: 181]
  ------------------
 1091|    181|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1092|    210|#pragma GCC diagnostic pop
 1093|    210|}
hb-ot-font.cc:_ZL15hb_bsearch_implIt10hb_array_tIKcEJPvEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|    210|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|    210|  int min = 0, max = (int) nmemb - 1;
 1045|  1.58k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 1.39k, False: 181]
  ------------------
 1046|  1.39k|  {
 1047|  1.39k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  1.39k|#pragma GCC diagnostic push
 1049|  1.39k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  1.39k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  1.39k|#pragma GCC diagnostic pop
 1052|  1.39k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  1.39k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 678, False: 721]
  ------------------
 1054|    678|      max = mid - 1;
 1055|    721|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 692, False: 29]
  ------------------
 1056|    692|      min = mid + 1;
 1057|     29|    else
 1058|     29|    {
 1059|     29|      *pos = mid;
 1060|     29|      return true;
 1061|     29|    }
 1062|  1.39k|  }
 1063|    181|  *pos = min;
 1064|    181|  return false;
 1065|    210|}
hb-ot-font.cc:_ZL8hb_qsortPvmmPFiPKvS1_E:
 1286|    829|{
 1287|       |#if defined(__OPTIMIZE_SIZE__) && !defined(HB_USE_INTERNAL_QSORT)
 1288|       |  qsort (base, nel, width, compar);
 1289|       |#else
 1290|    829|  sort_r_simple (base, nel, width, compar);
 1291|    829|#endif
 1292|    829|}
hb-ot-font.cc:_ZL13sort_r_simpleIJEEvPvmmPFiPKvS2_DpT_ES4_:
 1169|  23.4k|{
 1170|  23.4k|  char *b = (char *)base, *end = b + nel*w;
 1171|       |
 1172|       |  /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1173|       |  printf("\n"); */
 1174|       |
 1175|  23.4k|  if(nel < 10) {
  ------------------
  |  Branch (1175:6): [True: 12.1k, False: 11.3k]
  ------------------
 1176|       |    /* Insertion sort for arbitrarily small inputs */
 1177|  12.1k|    char *pi, *pj;
 1178|  61.7k|    for(pi = b+w; pi < end; pi += w) {
  ------------------
  |  Branch (1178:19): [True: 49.6k, False: 12.1k]
  ------------------
 1179|   120k|      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
  ------------------
  |  Branch (1179:20): [True: 109k, False: 11.2k]
  |  Branch (1179:30): [True: 70.8k, False: 38.4k]
  ------------------
 1180|  49.6k|    }
 1181|  12.1k|  }
 1182|  11.3k|  else
 1183|  11.3k|  {
 1184|       |    /* nel > 9; Quicksort */
 1185|       |
 1186|  11.3k|    int cmp;
 1187|  11.3k|    char *pl, *ple, *pr, *pre, *pivot;
 1188|  11.3k|    char *last = b+w*(nel-1), *tmp;
 1189|       |
 1190|       |    /*
 1191|       |    Use median of second, middle and second-last items as pivot.
 1192|       |    First and last may have been swapped with pivot and therefore be extreme
 1193|       |    */
 1194|  11.3k|    char *l[3];
 1195|  11.3k|    l[0] = b + w;
 1196|  11.3k|    l[1] = b+w*(nel/2);
 1197|  11.3k|    l[2] = last - w;
 1198|       |
 1199|       |    /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */
 1200|       |
 1201|  11.3k|    if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  5.41k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1201:8): [True: 5.41k, False: 5.90k]
  ------------------
 1202|  11.3k|    if(compar(l[1],l[2],ds...) > 0) {
  ------------------
  |  Branch (1202:8): [True: 7.40k, False: 3.91k]
  ------------------
 1203|  7.40k|      SORT_R_SWAP(l[1], l[2], tmp);
  ------------------
  |  | 1116|  7.40k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
 1204|  7.40k|      if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  3.46k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1204:10): [True: 3.46k, False: 3.94k]
  ------------------
 1205|  7.40k|    }
 1206|       |
 1207|       |    /* swap mid value (l[1]), and last element to put pivot as last element */
 1208|  11.3k|    if(l[1] != last) { sort_r_swap(l[1], last, w); }
  ------------------
  |  Branch (1208:8): [True: 11.3k, False: 0]
  ------------------
 1209|       |
 1210|       |    /*
 1211|       |    pl is the next item on the left to be compared to the pivot
 1212|       |    pr is the last item on the right that was compared to the pivot
 1213|       |    ple is the left position to put the next item that equals the pivot
 1214|       |    ple is the last right position where we put an item that equals the pivot
 1215|       |                                           v- end (beyond the array)
 1216|       |      EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE.
 1217|       |      ^- b  ^- ple  ^- pl   ^- pr  ^- pre ^- last (where the pivot is)
 1218|       |    Pivot comparison key:
 1219|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1220|       |    */
 1221|  11.3k|    pivot = last;
 1222|  11.3k|    ple = pl = b;
 1223|  11.3k|    pre = pr = last;
 1224|       |
 1225|       |    /*
 1226|       |    Strategy:
 1227|       |    Loop into the list from the left and right at the same time to find:
 1228|       |    - an item on the left that is greater than the pivot
 1229|       |    - an item on the right that is less than the pivot
 1230|       |    Once found, they are swapped and the loop continues.
 1231|       |    Meanwhile items that are equal to the pivot are moved to the edges of the
 1232|       |    array.
 1233|       |    */
 1234|   149k|    while(pl < pr) {
  ------------------
  |  Branch (1234:11): [True: 141k, False: 7.71k]
  ------------------
 1235|       |      /* Move left hand items which are equal to the pivot to the far left.
 1236|       |         break when we find an item that is greater than the pivot */
 1237|   346k|      for(; pl < pr; pl += w) {
  ------------------
  |  Branch (1237:13): [True: 343k, False: 3.61k]
  ------------------
 1238|   343k|        cmp = compar(pl, pivot, ds...);
 1239|   343k|        if(cmp > 0) { break; }
  ------------------
  |  Branch (1239:12): [True: 138k, False: 205k]
  ------------------
 1240|   205k|        else if(cmp == 0) {
  ------------------
  |  Branch (1240:17): [True: 11.0k, False: 194k]
  ------------------
 1241|  11.0k|          if(ple < pl) { sort_r_swap(ple, pl, w); }
  ------------------
  |  Branch (1241:14): [True: 7.86k, False: 3.19k]
  ------------------
 1242|  11.0k|          ple += w;
 1243|  11.0k|        }
 1244|   343k|      }
 1245|       |      /* break if last batch of left hand items were equal to pivot */
 1246|   141k|      if(pl >= pr) { break; }
  ------------------
  |  Branch (1246:10): [True: 3.61k, False: 138k]
  ------------------
 1247|       |      /* Move right hand items which are equal to the pivot to the far right.
 1248|       |         break when we find an item that is less than the pivot */
 1249|   356k|      for(; pl < pr; ) {
  ------------------
  |  Branch (1249:13): [True: 350k, False: 5.71k]
  ------------------
 1250|   350k|        pr -= w; /* Move right pointer onto an unprocessed item */
 1251|   350k|        cmp = compar(pr, pivot, ds...);
 1252|   350k|        if(cmp == 0) {
  ------------------
  |  Branch (1252:12): [True: 34.0k, False: 316k]
  ------------------
 1253|  34.0k|          pre -= w;
 1254|  34.0k|          if(pr < pre) { sort_r_swap(pr, pre, w); }
  ------------------
  |  Branch (1254:14): [True: 27.4k, False: 6.59k]
  ------------------
 1255|  34.0k|        }
 1256|   316k|        else if(cmp < 0) {
  ------------------
  |  Branch (1256:17): [True: 132k, False: 184k]
  ------------------
 1257|   132k|          if(pl < pr) { sort_r_swap(pl, pr, w); }
  ------------------
  |  Branch (1257:14): [True: 132k, False: 0]
  ------------------
 1258|   132k|          pl += w;
 1259|   132k|          break;
 1260|   132k|        }
 1261|   350k|      }
 1262|   138k|    }
 1263|       |
 1264|  11.3k|    pl = pr; /* pr may have gone below pl */
 1265|       |
 1266|       |    /*
 1267|       |    Now we need to go from: EEELLLGGGGEEEE
 1268|       |                        to: LLLEEEEEEEGGGG
 1269|       |    Pivot comparison key:
 1270|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1271|       |    */
 1272|  11.3k|    sort_r_swap_blocks(b, ple-b, pl-ple);
 1273|  11.3k|    sort_r_swap_blocks(pr, pre-pr, end-pre);
 1274|       |
 1275|       |    /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1276|       |    printf("\n");*/
 1277|       |
 1278|  11.3k|    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
 1279|  11.3k|    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
 1280|  11.3k|  }
 1281|  23.4k|}
hb-ot-font.cc:_ZL14sort_r_cmpswapIJEEiPcS0_mPFiPKvS2_DpT_ES4_:
 1137|   109k|{
 1138|   109k|  if(compar(a, b, ds...) > 0) {
  ------------------
  |  Branch (1138:6): [True: 70.8k, False: 38.4k]
  ------------------
 1139|  70.8k|    sort_r_swap(a, b, w);
 1140|  70.8k|    return 1;
 1141|  70.8k|  }
 1142|  38.4k|  return 0;
 1143|   109k|}
hb-ot-font.cc:_ZL15hb_bsearch_implIN2OT4cff113accelerator_t7gname_tES3_JEEbPjRKT0_PT_mmPFiPKvSB_DpT1_ESD_:
 1041|    829|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|    829|  int min = 0, max = (int) nmemb - 1;
 1045|  3.96k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 3.15k, False: 808]
  ------------------
 1046|  3.15k|  {
 1047|  3.15k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  3.15k|#pragma GCC diagnostic push
 1049|  3.15k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  3.15k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  3.15k|#pragma GCC diagnostic pop
 1052|  3.15k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  3.15k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 2.17k, False: 980]
  ------------------
 1054|  2.17k|      max = mid - 1;
 1055|    980|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 959, False: 21]
  ------------------
 1056|    959|      min = mid + 1;
 1057|     21|    else
 1058|     21|    {
 1059|     21|      *pos = mid;
 1060|     21|      return true;
 1061|     21|    }
 1062|  3.15k|  }
 1063|    808|  *pos = min;
 1064|    808|  return false;
 1065|    829|}
hb-ot-font.cc:_ZL14_hb_cmp_methodIN2OT4cff113accelerator_t7gname_tES3_JEEiPKvS5_DpT1_:
 1027|  3.15k|{
 1028|  3.15k|  const K& key = * (const K*) pkey;
 1029|  3.15k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  3.15k|  return val.cmp (key, ds...);
 1032|  3.15k|}
hb-ot-layout.cc:_Zan17hb_buffer_flags_tS_:
   60|  9.12M|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-layout.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|   983k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-layout.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|   983k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-layout.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  6.12M|{
 1007|  6.12M|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  6.12M|  unsigned stack_result;
 1009|  6.12M|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 1.59M, False: 4.52M]
  ------------------
 1010|  1.59M|    result = &stack_result;
 1011|  6.12M|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  6.12M|}
hb-ot-layout.cc:_Zor16hb_glyph_flags_tS_:
   59|  3.52M|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-layout.cc:_ZL12ARRAY_LENGTHIjLj8EEjRAT0__KT_:
  942|  2.56M|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-layout.cc:_ZL10_hb_roundff:
  206|   586k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT6RecordINS0_6ScriptEEEjJEEbPjRKT0_PT_mmPFiPKvSC_DpT1_ESE_:
 1041|   385k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   385k|  int min = 0, max = (int) nmemb - 1;
 1045|   414k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 42.9k, False: 371k]
  ------------------
 1046|  42.9k|  {
 1047|  42.9k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  42.9k|#pragma GCC diagnostic push
 1049|  42.9k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  42.9k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  42.9k|#pragma GCC diagnostic pop
 1052|  42.9k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  42.9k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 15.2k, False: 27.7k]
  ------------------
 1054|  15.2k|      max = mid - 1;
 1055|  27.7k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 14.4k, False: 13.3k]
  ------------------
 1056|  14.4k|      min = mid + 1;
 1057|  13.3k|    else
 1058|  13.3k|    {
 1059|  13.3k|      *pos = mid;
 1060|  13.3k|      return true;
 1061|  13.3k|    }
 1062|  42.9k|  }
 1063|   371k|  *pos = min;
 1064|   371k|  return false;
 1065|   385k|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6RecordINS0_6ScriptEEEJEEiPKvS6_DpT1_:
 1027|  42.9k|{
 1028|  42.9k|  const K& key = * (const K*) pkey;
 1029|  42.9k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  42.9k|  return val.cmp (key, ds...);
 1032|  42.9k|}
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT6RecordINS0_7LangSysEEEjJEEbPjRKT0_PT_mmPFiPKvSC_DpT1_ESE_:
 1041|  98.6k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  98.6k|  int min = 0, max = (int) nmemb - 1;
 1045|   110k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 11.6k, False: 98.5k]
  ------------------
 1046|  11.6k|  {
 1047|  11.6k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  11.6k|#pragma GCC diagnostic push
 1049|  11.6k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  11.6k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  11.6k|#pragma GCC diagnostic pop
 1052|  11.6k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  11.6k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 755, False: 10.9k]
  ------------------
 1054|    755|      max = mid - 1;
 1055|  10.9k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 10.8k, False: 54]
  ------------------
 1056|  10.8k|      min = mid + 1;
 1057|     54|    else
 1058|     54|    {
 1059|     54|      *pos = mid;
 1060|     54|      return true;
 1061|     54|    }
 1062|  11.6k|  }
 1063|  98.5k|  *pos = min;
 1064|  98.5k|  return false;
 1065|  98.6k|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6RecordINS0_7LangSysEEEJEEiPKvS6_DpT1_:
 1027|  11.6k|{
 1028|  11.6k|  const K& key = * (const K*) pkey;
 1029|  11.6k|  const V& val = * (const V*) pval;
 1030|       |
 1031|  11.6k|  return val.cmp (key, ds...);
 1032|  11.6k|}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEEEclIRKNS3_8OffsetToINS5_8LigatureIS7_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISN_EEclL_ZSM_ISA_ESN_vEEspcl10hb_declvalIT0_EEEEOSN_DpOSO_:
  419|  1.16M|  {
  420|  1.16M|    return hb_invoke (std::forward<Appl> (a),
  421|  1.16M|		      std::forward<T0> (d0),
  422|  1.16M|		      std::forward<V> (v),
  423|  1.16M|		      std::forward<Ts> (ds)...);
  424|  1.16M|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEEEC2ES2_SA_:
  397|  51.9k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_11MediumTypesEEEEclIRKNS3_8OffsetToINS5_8LigatureIS7_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISN_EEclL_ZSM_ISA_ESN_vEEspcl10hb_declvalIT0_EEEEOSN_DpOSO_:
  419|  3.61k|  {
  420|  3.61k|    return hb_invoke (std::forward<Appl> (a),
  421|  3.61k|		      std::forward<T0> (d0),
  422|  3.61k|		      std::forward<V> (v),
  423|  3.61k|		      std::forward<Ts> (ds)...);
  424|  3.61k|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_11MediumTypesEEEEC2ES2_SA_:
  397|  3.17k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout10SmallTypesEEEEclIRKNS3_8OffsetToINS3_4RuleIS6_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISM_EEclL_ZSL_IS9_ESM_vEEspcl10hb_declvalIT0_EEEEOSM_DpOSN_:
  419|  1.88M|  {
  420|  1.88M|    return hb_invoke (std::forward<Appl> (a),
  421|  1.88M|		      std::forward<T0> (d0),
  422|  1.88M|		      std::forward<V> (v),
  423|  1.88M|		      std::forward<Ts> (ds)...);
  424|  1.88M|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout10SmallTypesEEEEC2ES2_S9_:
  397|   990k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout11MediumTypesEEEEclIRKNS3_8OffsetToINS3_4RuleIS6_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISM_EEclL_ZSL_IS9_ESM_vEEspcl10hb_declvalIT0_EEEEOSM_DpOSN_:
  419|  29.6k|  {
  420|  29.6k|    return hb_invoke (std::forward<Appl> (a),
  421|  29.6k|		      std::forward<T0> (d0),
  422|  29.6k|		      std::forward<V> (v),
  423|  29.6k|		      std::forward<Ts> (ds)...);
  424|  29.6k|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout11MediumTypesEEEEC2ES2_S9_:
  397|  32.3k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout10SmallTypesEEEEclIRKNS3_8OffsetToINS3_9ChainRuleIS6_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISM_EEclL_ZSL_IS9_ESM_vEEspcl10hb_declvalIT0_EEEEOSM_DpOSN_:
  419|  7.07M|  {
  420|  7.07M|    return hb_invoke (std::forward<Appl> (a),
  421|  7.07M|		      std::forward<T0> (d0),
  422|  7.07M|		      std::forward<V> (v),
  423|  7.07M|		      std::forward<Ts> (ds)...);
  424|  7.07M|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout10SmallTypesEEEEC2ES2_S9_:
  397|   852k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout11MediumTypesEEEEclIRKNS3_8OffsetToINS3_9ChainRuleIS6_EENS3_7IntTypeItLj2EEELb1EEEJELj2ELPv0EEEDTclL_ZL9hb_invokeEclL_ZL10hb_declvalIS2_ET_vEEcl10hb_declvalISM_EEclL_ZSL_IS9_ESM_vEEspcl10hb_declvalIT0_EEEEOSM_DpOSN_:
  419|   493k|  {
  420|   493k|    return hb_invoke (std::forward<Appl> (a),
  421|   493k|		      std::forward<T0> (d0),
  422|   493k|		      std::forward<V> (v),
  423|   493k|		      std::forward<Ts> (ds)...);
  424|   493k|  }
hb-ot-layout.cc:_ZN12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout11MediumTypesEEEEC2ES2_S9_:
  397|   435k|  hb_partial_t (Appl a, V v) : a (a), v (v) {}
hb-ot-layout.cc:_ZL11hb_popcountIjEjT_:
  715|  5.33M|{
  716|  5.33M|#if hb_has_builtin(__builtin_popcount)
  717|  5.33M|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (717:7): [Folded - Ignored]
  ------------------
  718|  5.33M|    return __builtin_popcount (v);
  719|      0|#endif
  720|       |
  721|      0|#if hb_has_builtin(__builtin_popcountl)
  722|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (722:7): [Folded - Ignored]
  ------------------
  723|      0|    return __builtin_popcountl (v);
  724|      0|#endif
  725|       |
  726|      0|#if hb_has_builtin(__builtin_popcountll)
  727|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (727:7): [Folded - Ignored]
  ------------------
  728|      0|    return __builtin_popcountll (v);
  729|      0|#endif
  730|       |
  731|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (731:7): [Folded - Ignored]
  ------------------
  732|      0|  {
  733|       |    /* "HACKMEM 169" */
  734|      0|    uint32_t y;
  735|      0|    y = (v >> 1) &033333333333;
  736|      0|    y = v - y - ((y >>1) & 033333333333);
  737|      0|    return (((y + (y >> 3)) & 030707070707) % 077);
  738|      0|  }
  739|       |
  740|      0|  if (sizeof (T) == 8)
  ------------------
  |  Branch (740:7): [Folded - Ignored]
  ------------------
  741|      0|  {
  742|      0|    uint64_t y = (uint64_t) v;
  743|      0|    y -= ((y >> 1) & 0x5555555555555555ull);
  744|      0|    y = (y & 0x3333333333333333ull) + (y >> 2 & 0x3333333333333333ull);
  745|      0|    return ((y + (y >> 4)) & 0xf0f0f0f0f0f0f0full) * 0x101010101010101ull >> 56;
  746|      0|  }
  747|       |
  748|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (748:7): [Folded - Ignored]
  ------------------
  749|      0|  {
  750|      0|    unsigned int shift = 64;
  751|      0|    return hb_popcount<uint64_t> ((uint64_t) v) + hb_popcount ((uint64_t) (v >> shift));
  752|      0|  }
  753|       |
  754|      0|  assert (0);
  755|      0|  return 0; /* Shut up stupid compiler. */
  756|      0|}
hb-ot-layout.cc:_ZL14hb_bit_storageIjEjT_:
  762|  6.55k|{
  763|  6.55k|  if (unlikely (!v)) return 0;
  ------------------
  |  |  259|  6.55k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.34k, False: 3.21k]
  |  |  ------------------
  ------------------
  764|       |
  765|  3.21k|#if hb_has_builtin(__builtin_clz)
  766|  3.21k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (766:7): [Folded - Ignored]
  ------------------
  767|  3.21k|    return sizeof (unsigned int) * 8 - __builtin_clz (v);
  768|      0|#endif
  769|       |
  770|      0|#if hb_has_builtin(__builtin_clzl)
  771|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (771:7): [Folded - Ignored]
  ------------------
  772|      0|    return sizeof (unsigned long) * 8 - __builtin_clzl (v);
  773|      0|#endif
  774|       |
  775|      0|#if hb_has_builtin(__builtin_clzll)
  776|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (776:7): [Folded - Ignored]
  ------------------
  777|      0|    return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
  778|      0|#endif
  779|       |
  780|       |#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) && (__GNUC__ < 4))
  781|       |  if (sizeof (T) <= sizeof (unsigned int))
  782|       |  {
  783|       |    unsigned long where;
  784|       |    _BitScanReverse (&where, v);
  785|       |    return 1 + where;
  786|       |  }
  787|       |# if defined(_WIN64)
  788|       |  if (sizeof (T) <= 8)
  789|       |  {
  790|       |    unsigned long where;
  791|       |    _BitScanReverse64 (&where, v);
  792|       |    return 1 + where;
  793|       |  }
  794|       |# endif
  795|       |#endif
  796|       |
  797|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (797:7): [Folded - Ignored]
  ------------------
  798|      0|  {
  799|       |    /* "bithacks" */
  800|      0|    const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
  801|      0|    const unsigned int S[] = {1, 2, 4, 8, 16};
  802|      0|    unsigned int r = 0;
  803|      0|    for (int i = 4; i >= 0; i--)
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|      if (v & b[i])
  ------------------
  |  Branch (804:11): [True: 0, False: 0]
  ------------------
  805|      0|      {
  806|      0|	v >>= S[i];
  807|      0|	r |= S[i];
  808|      0|      }
  809|      0|    return r + 1;
  810|      0|  }
  811|      0|  if (sizeof (T) <= 8)
  ------------------
  |  Branch (811:7): [Folded - Ignored]
  ------------------
  812|      0|  {
  813|       |    /* "bithacks" */
  814|      0|    const uint64_t b[] = {0x2ULL, 0xCULL, 0xF0ULL, 0xFF00ULL, 0xFFFF0000ULL, 0xFFFFFFFF00000000ULL};
  815|      0|    const unsigned int S[] = {1, 2, 4, 8, 16, 32};
  816|      0|    unsigned int r = 0;
  817|      0|    for (int i = 5; i >= 0; i--)
  ------------------
  |  Branch (817:21): [True: 0, False: 0]
  ------------------
  818|      0|      if (v & b[i])
  ------------------
  |  Branch (818:11): [True: 0, False: 0]
  ------------------
  819|      0|      {
  820|      0|	v >>= S[i];
  821|      0|	r |= S[i];
  822|      0|      }
  823|      0|    return r + 1;
  824|      0|  }
  825|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (825:7): [Folded - Ignored]
  ------------------
  826|      0|  {
  827|      0|    unsigned int shift = 64;
  828|      0|    return (v >> shift) ? hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift :
  ------------------
  |  Branch (828:12): [True: 0, False: 0]
  ------------------
  829|      0|			  hb_bit_storage<uint64_t> ((uint64_t) v);
  830|      0|  }
  831|       |
  832|      0|  assert (0);
  833|      0|  return 0; /* Shut up stupid compiler. */
  834|      0|}
hb-ot-layout.cc:_Zan25hb_buffer_scratch_flags_tS_:
   60|   565k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT16BaseScriptRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|  66.6k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  66.6k|  int min = 0, max = (int) nmemb - 1;
 1045|  67.5k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 880, False: 66.6k]
  ------------------
 1046|    880|  {
 1047|    880|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    880|#pragma GCC diagnostic push
 1049|    880|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    880|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    880|#pragma GCC diagnostic pop
 1052|    880|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    880|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 157, False: 723]
  ------------------
 1054|    157|      max = mid - 1;
 1055|    723|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 713, False: 10]
  ------------------
 1056|    713|      min = mid + 1;
 1057|     10|    else
 1058|     10|    {
 1059|     10|      *pos = mid;
 1060|     10|      return true;
 1061|     10|    }
 1062|    880|  }
 1063|  66.6k|  *pos = min;
 1064|  66.6k|  return false;
 1065|  66.6k|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT16BaseScriptRecordEJEEiPKvS4_DpT1_:
 1027|    880|{
 1028|    880|  const K& key = * (const K*) pkey;
 1029|    880|  const V& val = * (const V*) pval;
 1030|       |
 1031|    880|  return val.cmp (key, ds...);
 1032|    880|}
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT3TagEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|      9|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|      9|  int min = 0, max = (int) nmemb - 1;
 1045|     43|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 34, False: 9]
  ------------------
 1046|     34|  {
 1047|     34|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|     34|#pragma GCC diagnostic push
 1049|     34|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|     34|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|     34|#pragma GCC diagnostic pop
 1052|     34|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|     34|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 13, False: 21]
  ------------------
 1054|     13|      max = mid - 1;
 1055|     21|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 21, False: 0]
  ------------------
 1056|     21|      min = mid + 1;
 1057|      0|    else
 1058|      0|    {
 1059|      0|      *pos = mid;
 1060|      0|      return true;
 1061|      0|    }
 1062|     34|  }
 1063|      9|  *pos = min;
 1064|      9|  return false;
 1065|      9|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT3TagEJEEiPKvS4_DpT1_:
 1027|     34|{
 1028|     34|  const K& key = * (const K*) pkey;
 1029|     34|  const V& val = * (const V*) pval;
 1030|       |
 1031|     34|  return val.cmp (key, ds...);
 1032|     34|}
hb-ot-layout.cc:_Zco32hb_ot_layout_glyph_props_flags_t:
   62|   486k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-layout.cc:_ZL6hb_ctzIjEjT_:
  840|   325k|{
  841|   325k|  if (unlikely (!v)) return 8 * sizeof (T);
  ------------------
  |  |  259|   325k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 325k]
  |  |  ------------------
  ------------------
  842|       |
  843|   325k|#if hb_has_builtin(__builtin_ctz)
  844|   325k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (844:7): [Folded - Ignored]
  ------------------
  845|   325k|    return __builtin_ctz (v);
  846|      0|#endif
  847|       |
  848|      0|#if hb_has_builtin(__builtin_ctzl)
  849|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (849:7): [Folded - Ignored]
  ------------------
  850|      0|    return __builtin_ctzl (v);
  851|      0|#endif
  852|       |
  853|      0|#if hb_has_builtin(__builtin_ctzll)
  854|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (854:7): [Folded - Ignored]
  ------------------
  855|      0|    return __builtin_ctzll (v);
  856|      0|#endif
  857|       |
  858|       |#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) && (__GNUC__ < 4))
  859|       |  if (sizeof (T) <= sizeof (unsigned int))
  860|       |  {
  861|       |    unsigned long where;
  862|       |    _BitScanForward (&where, v);
  863|       |    return where;
  864|       |  }
  865|       |# if defined(_WIN64)
  866|       |  if (sizeof (T) <= 8)
  867|       |  {
  868|       |    unsigned long where;
  869|       |    _BitScanForward64 (&where, v);
  870|       |    return where;
  871|       |  }
  872|       |# endif
  873|       |#endif
  874|       |
  875|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (875:7): [Folded - Ignored]
  ------------------
  876|      0|  {
  877|       |    /* "bithacks" */
  878|      0|    unsigned int c = 32;
  879|      0|    v &= - (int32_t) v;
  880|      0|    if (v) c--;
  ------------------
  |  Branch (880:9): [True: 0, False: 0]
  ------------------
  881|      0|    if (v & 0x0000FFFF) c -= 16;
  ------------------
  |  Branch (881:9): [True: 0, False: 0]
  ------------------
  882|      0|    if (v & 0x00FF00FF) c -= 8;
  ------------------
  |  Branch (882:9): [True: 0, False: 0]
  ------------------
  883|      0|    if (v & 0x0F0F0F0F) c -= 4;
  ------------------
  |  Branch (883:9): [True: 0, False: 0]
  ------------------
  884|      0|    if (v & 0x33333333) c -= 2;
  ------------------
  |  Branch (884:9): [True: 0, False: 0]
  ------------------
  885|      0|    if (v & 0x55555555) c -= 1;
  ------------------
  |  Branch (885:9): [True: 0, False: 0]
  ------------------
  886|      0|    return c;
  887|      0|  }
  888|      0|  if (sizeof (T) <= 8)
  ------------------
  |  Branch (888:7): [Folded - Ignored]
  ------------------
  889|      0|  {
  890|       |    /* "bithacks" */
  891|      0|    unsigned int c = 64;
  892|      0|    v &= - (int64_t) (v);
  893|      0|    if (v) c--;
  ------------------
  |  Branch (893:9): [True: 0, False: 0]
  ------------------
  894|      0|    if (v & 0x00000000FFFFFFFFULL) c -= 32;
  ------------------
  |  Branch (894:9): [True: 0, False: 0]
  ------------------
  895|      0|    if (v & 0x0000FFFF0000FFFFULL) c -= 16;
  ------------------
  |  Branch (895:9): [True: 0, False: 0]
  ------------------
  896|      0|    if (v & 0x00FF00FF00FF00FFULL) c -= 8;
  ------------------
  |  Branch (896:9): [True: 0, False: 0]
  ------------------
  897|      0|    if (v & 0x0F0F0F0F0F0F0F0FULL) c -= 4;
  ------------------
  |  Branch (897:9): [True: 0, False: 0]
  ------------------
  898|      0|    if (v & 0x3333333333333333ULL) c -= 2;
  ------------------
  |  Branch (898:9): [True: 0, False: 0]
  ------------------
  899|      0|    if (v & 0x5555555555555555ULL) c -= 1;
  ------------------
  |  Branch (899:9): [True: 0, False: 0]
  ------------------
  900|      0|    return c;
  901|      0|  }
  902|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (902:7): [Folded - Ignored]
  ------------------
  903|      0|  {
  904|      0|    unsigned int shift = 64;
  905|      0|    return (uint64_t) v ? hb_bit_storage<uint64_t> ((uint64_t) v) :
  ------------------
  |  Branch (905:12): [True: 0, False: 0]
  ------------------
  906|      0|			  hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift;
  907|      0|  }
  908|       |
  909|      0|  assert (0);
  910|      0|  return 0; /* Shut up stupid compiler. */
  911|      0|}
hb-ot-layout.cc:_Zco24hb_unicode_props_flags_t:
   62|  5.66k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-layout.cc:_ZL10hb_bsearchIKN2OT6Layout9GPOS_impl15PairValueRecordINS1_10SmallTypesEEEjEPT_RKT0_S8_mmPFiPKvSD_E:
 1072|  2.41M|{
 1073|  2.41M|  unsigned pos;
 1074|  2.41M|#pragma GCC diagnostic push
 1075|  2.41M|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|  2.41M|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 65.1k, False: 2.35M]
  ------------------
 1077|  2.35M|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|  2.41M|#pragma GCC diagnostic pop
 1079|  2.41M|}
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT6Layout9GPOS_impl15PairValueRecordINS1_10SmallTypesEEEjJEEbPjRKT0_PT_mmPFiPKvSE_DpT1_ESG_:
 1041|  2.41M|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  2.41M|  int min = 0, max = (int) nmemb - 1;
 1045|  3.47M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 1.11M, False: 2.35M]
  ------------------
 1046|  1.11M|  {
 1047|  1.11M|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  1.11M|#pragma GCC diagnostic push
 1049|  1.11M|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  1.11M|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  1.11M|#pragma GCC diagnostic pop
 1052|  1.11M|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  1.11M|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 266k, False: 850k]
  ------------------
 1054|   266k|      max = mid - 1;
 1055|   850k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 784k, False: 65.1k]
  ------------------
 1056|   784k|      min = mid + 1;
 1057|  65.1k|    else
 1058|  65.1k|    {
 1059|  65.1k|      *pos = mid;
 1060|  65.1k|      return true;
 1061|  65.1k|    }
 1062|  1.11M|  }
 1063|  2.35M|  *pos = min;
 1064|  2.35M|  return false;
 1065|  2.41M|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6Layout9GPOS_impl15PairValueRecordINS1_10SmallTypesEEEJEEiPKvS8_DpT1_:
 1027|  1.11M|{
 1028|  1.11M|  const K& key = * (const K*) pkey;
 1029|  1.11M|  const V& val = * (const V*) pval;
 1030|       |
 1031|  1.11M|  return val.cmp (key, ds...);
 1032|  1.11M|}
hb-ot-layout.cc:_ZL10hb_bsearchIKN2OT6Layout9GPOS_impl15PairValueRecordINS1_11MediumTypesEEEjEPT_RKT0_S8_mmPFiPKvSD_E:
 1072|   186k|{
 1073|   186k|  unsigned pos;
 1074|   186k|#pragma GCC diagnostic push
 1075|   186k|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|   186k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 138k, False: 47.6k]
  ------------------
 1077|   138k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|   186k|#pragma GCC diagnostic pop
 1079|   186k|}
hb-ot-layout.cc:_ZL15hb_bsearch_implIKN2OT6Layout9GPOS_impl15PairValueRecordINS1_11MediumTypesEEEjJEEbPjRKT0_PT_mmPFiPKvSE_DpT1_ESG_:
 1041|   186k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   186k|  int min = 0, max = (int) nmemb - 1;
 1045|   198k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 151k, False: 47.6k]
  ------------------
 1046|   151k|  {
 1047|   151k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   151k|#pragma GCC diagnostic push
 1049|   151k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   151k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   151k|#pragma GCC diagnostic pop
 1052|   151k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   151k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 5.24k, False: 146k]
  ------------------
 1054|  5.24k|      max = mid - 1;
 1055|   146k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 7.22k, False: 138k]
  ------------------
 1056|  7.22k|      min = mid + 1;
 1057|   138k|    else
 1058|   138k|    {
 1059|   138k|      *pos = mid;
 1060|   138k|      return true;
 1061|   138k|    }
 1062|   151k|  }
 1063|  47.6k|  *pos = min;
 1064|  47.6k|  return false;
 1065|   186k|}
hb-ot-layout.cc:_ZL14_hb_cmp_methodIjKN2OT6Layout9GPOS_impl15PairValueRecordINS1_11MediumTypesEEEJEEiPKvS8_DpT1_:
 1027|   151k|{
 1028|   151k|  const K& key = * (const K*) pkey;
 1029|   151k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   151k|  return val.cmp (key, ds...);
 1032|   151k|}
hb-ot-math.cc:_ZL12ARRAY_LENGTHIN2OT8OffsetToINS0_8MathKernENS0_7IntTypeItLj2EEELb1EEELj4EEjRAT0__KT_:
  942|   103k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
_ZN9hb_pair_tIRKN2OT22MathGlyphVariantRecordER26hb_ot_math_glyph_variant_tEC2ES3_S5_:
  623|     29|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
_ZN9hb_pair_tIRKN2OT19MathGlyphPartRecordER23hb_ot_math_glyph_part_tEC2ES3_S5_:
  623|     22|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
hb-ot-math.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  25.8k|{
 1007|  25.8k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  25.8k|  unsigned stack_result;
 1009|  25.8k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 0, False: 25.8k]
  ------------------
 1010|      0|    result = &stack_result;
 1011|  25.8k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  25.8k|}
hb-ot-math.cc:_ZL12ARRAY_LENGTHIN2OT15MathValueRecordELj51EEjRAT0__KT_:
  942|    426|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-meta.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|     49|{
 1007|     49|#if hb_has_builtin(__builtin_mul_overflow)
 1008|     49|  unsigned stack_result;
 1009|     49|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 0, False: 49]
  ------------------
 1010|      0|    result = &stack_result;
 1011|     49|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|     49|}
hb-ot-metrics.cc:_ZL10hb_bsearchIKN2OT20VariationValueRecordEjEPT_RKT0_S4_mmPFiPKvS9_E:
 1072|   107k|{
 1073|   107k|  unsigned pos;
 1074|   107k|#pragma GCC diagnostic push
 1075|   107k|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|   107k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 128, False: 107k]
  ------------------
 1077|   107k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|   107k|#pragma GCC diagnostic pop
 1079|   107k|}
hb-ot-metrics.cc:_ZL15hb_bsearch_implIKN2OT20VariationValueRecordEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   107k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   107k|  int min = 0, max = (int) nmemb - 1;
 1045|   108k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 960, False: 107k]
  ------------------
 1046|    960|  {
 1047|    960|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|    960|#pragma GCC diagnostic push
 1049|    960|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|    960|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|    960|#pragma GCC diagnostic pop
 1052|    960|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|    960|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 444, False: 516]
  ------------------
 1054|    444|      max = mid - 1;
 1055|    516|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 388, False: 128]
  ------------------
 1056|    388|      min = mid + 1;
 1057|    128|    else
 1058|    128|    {
 1059|    128|      *pos = mid;
 1060|    128|      return true;
 1061|    128|    }
 1062|    960|  }
 1063|   107k|  *pos = min;
 1064|   107k|  return false;
 1065|   107k|}
hb-ot-metrics.cc:_ZL10_hb_roundff:
  206|  74.5k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-ot-name.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  2.39k|{
 1007|  2.39k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  2.39k|  unsigned stack_result;
 1009|  2.39k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 665, False: 1.72k]
  ------------------
 1010|    665|    result = &stack_result;
 1011|  2.39k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  2.39k|}
hb-ot-name.cc:_ZL8hb_qsortPvmmPFiPKvS1_E:
 1286|    651|{
 1287|       |#if defined(__OPTIMIZE_SIZE__) && !defined(HB_USE_INTERNAL_QSORT)
 1288|       |  qsort (base, nel, width, compar);
 1289|       |#else
 1290|    651|  sort_r_simple (base, nel, width, compar);
 1291|    651|#endif
 1292|    651|}
hb-ot-name.cc:_ZL13sort_r_simpleIJEEvPvmmPFiPKvS2_DpT_ES4_:
 1169|   219k|{
 1170|   219k|  char *b = (char *)base, *end = b + nel*w;
 1171|       |
 1172|       |  /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1173|       |  printf("\n"); */
 1174|       |
 1175|   219k|  if(nel < 10) {
  ------------------
  |  Branch (1175:6): [True: 110k, False: 109k]
  ------------------
 1176|       |    /* Insertion sort for arbitrarily small inputs */
 1177|   110k|    char *pi, *pj;
 1178|   456k|    for(pi = b+w; pi < end; pi += w) {
  ------------------
  |  Branch (1178:19): [True: 345k, False: 110k]
  ------------------
 1179|   819k|      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
  ------------------
  |  Branch (1179:20): [True: 698k, False: 121k]
  |  Branch (1179:30): [True: 473k, False: 224k]
  ------------------
 1180|   345k|    }
 1181|   110k|  }
 1182|   109k|  else
 1183|   109k|  {
 1184|       |    /* nel > 9; Quicksort */
 1185|       |
 1186|   109k|    int cmp;
 1187|   109k|    char *pl, *ple, *pr, *pre, *pivot;
 1188|   109k|    char *last = b+w*(nel-1), *tmp;
 1189|       |
 1190|       |    /*
 1191|       |    Use median of second, middle and second-last items as pivot.
 1192|       |    First and last may have been swapped with pivot and therefore be extreme
 1193|       |    */
 1194|   109k|    char *l[3];
 1195|   109k|    l[0] = b + w;
 1196|   109k|    l[1] = b+w*(nel/2);
 1197|   109k|    l[2] = last - w;
 1198|       |
 1199|       |    /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */
 1200|       |
 1201|   109k|    if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  69.2k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1201:8): [True: 69.2k, False: 40.2k]
  ------------------
 1202|   109k|    if(compar(l[1],l[2],ds...) > 0) {
  ------------------
  |  Branch (1202:8): [True: 99.8k, False: 9.71k]
  ------------------
 1203|  99.8k|      SORT_R_SWAP(l[1], l[2], tmp);
  ------------------
  |  | 1116|  99.8k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
 1204|  99.8k|      if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  33.8k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1204:10): [True: 33.8k, False: 66.0k]
  ------------------
 1205|  99.8k|    }
 1206|       |
 1207|       |    /* swap mid value (l[1]), and last element to put pivot as last element */
 1208|   109k|    if(l[1] != last) { sort_r_swap(l[1], last, w); }
  ------------------
  |  Branch (1208:8): [True: 109k, False: 0]
  ------------------
 1209|       |
 1210|       |    /*
 1211|       |    pl is the next item on the left to be compared to the pivot
 1212|       |    pr is the last item on the right that was compared to the pivot
 1213|       |    ple is the left position to put the next item that equals the pivot
 1214|       |    ple is the last right position where we put an item that equals the pivot
 1215|       |                                           v- end (beyond the array)
 1216|       |      EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE.
 1217|       |      ^- b  ^- ple  ^- pl   ^- pr  ^- pre ^- last (where the pivot is)
 1218|       |    Pivot comparison key:
 1219|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1220|       |    */
 1221|   109k|    pivot = last;
 1222|   109k|    ple = pl = b;
 1223|   109k|    pre = pr = last;
 1224|       |
 1225|       |    /*
 1226|       |    Strategy:
 1227|       |    Loop into the list from the left and right at the same time to find:
 1228|       |    - an item on the left that is greater than the pivot
 1229|       |    - an item on the right that is less than the pivot
 1230|       |    Once found, they are swapped and the loop continues.
 1231|       |    Meanwhile items that are equal to the pivot are moved to the edges of the
 1232|       |    array.
 1233|       |    */
 1234|   721k|    while(pl < pr) {
  ------------------
  |  Branch (1234:11): [True: 678k, False: 42.7k]
  ------------------
 1235|       |      /* Move left hand items which are equal to the pivot to the far left.
 1236|       |         break when we find an item that is greater than the pivot */
 1237|   334M|      for(; pl < pr; pl += w) {
  ------------------
  |  Branch (1237:13): [True: 334M, False: 66.8k]
  ------------------
 1238|   334M|        cmp = compar(pl, pivot, ds...);
 1239|   334M|        if(cmp > 0) { break; }
  ------------------
  |  Branch (1239:12): [True: 611k, False: 334M]
  ------------------
 1240|   334M|        else if(cmp == 0) {
  ------------------
  |  Branch (1240:17): [True: 0, False: 334M]
  ------------------
 1241|      0|          if(ple < pl) { sort_r_swap(ple, pl, w); }
  ------------------
  |  Branch (1241:14): [True: 0, False: 0]
  ------------------
 1242|      0|          ple += w;
 1243|      0|        }
 1244|   334M|      }
 1245|       |      /* break if last batch of left hand items were equal to pivot */
 1246|   678k|      if(pl >= pr) { break; }
  ------------------
  |  Branch (1246:10): [True: 66.8k, False: 611k]
  ------------------
 1247|       |      /* Move right hand items which are equal to the pivot to the far right.
 1248|       |         break when we find an item that is less than the pivot */
 1249|  3.67M|      for(; pl < pr; ) {
  ------------------
  |  Branch (1249:13): [True: 3.63M, False: 39.8k]
  ------------------
 1250|  3.63M|        pr -= w; /* Move right pointer onto an unprocessed item */
 1251|  3.63M|        cmp = compar(pr, pivot, ds...);
 1252|  3.63M|        if(cmp == 0) {
  ------------------
  |  Branch (1252:12): [True: 0, False: 3.63M]
  ------------------
 1253|      0|          pre -= w;
 1254|      0|          if(pr < pre) { sort_r_swap(pr, pre, w); }
  ------------------
  |  Branch (1254:14): [True: 0, False: 0]
  ------------------
 1255|      0|        }
 1256|  3.63M|        else if(cmp < 0) {
  ------------------
  |  Branch (1256:17): [True: 571k, False: 3.06M]
  ------------------
 1257|   571k|          if(pl < pr) { sort_r_swap(pl, pr, w); }
  ------------------
  |  Branch (1257:14): [True: 571k, False: 0]
  ------------------
 1258|   571k|          pl += w;
 1259|   571k|          break;
 1260|   571k|        }
 1261|  3.63M|      }
 1262|   611k|    }
 1263|       |
 1264|   109k|    pl = pr; /* pr may have gone below pl */
 1265|       |
 1266|       |    /*
 1267|       |    Now we need to go from: EEELLLGGGGEEEE
 1268|       |                        to: LLLEEEEEEEGGGG
 1269|       |    Pivot comparison key:
 1270|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1271|       |    */
 1272|   109k|    sort_r_swap_blocks(b, ple-b, pl-ple);
 1273|   109k|    sort_r_swap_blocks(pr, pre-pr, end-pre);
 1274|       |
 1275|       |    /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1276|       |    printf("\n");*/
 1277|       |
 1278|   109k|    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
 1279|   109k|    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
 1280|   109k|  }
 1281|   219k|}
hb-ot-name.cc:_ZL14sort_r_cmpswapIJEEiPcS0_mPFiPKvS2_DpT_ES4_:
 1137|   698k|{
 1138|   698k|  if(compar(a, b, ds...) > 0) {
  ------------------
  |  Branch (1138:6): [True: 473k, False: 224k]
  ------------------
 1139|   473k|    sort_r_swap(a, b, w);
 1140|   473k|    return 1;
 1141|   473k|  }
 1142|   224k|  return 0;
 1143|   698k|}
hb-ot-name.cc:_ZL11sort_r_swapPcS_m:
 1122|  1.26M|{
 1123|  1.26M|  char tmp, *end = a+w;
 1124|  21.5M|  for(; a < end; a++, b++) { SORT_R_SWAP(*a, *b, tmp); }
  ------------------
  |  | 1116|  20.2M|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1124:9): [True: 20.2M, False: 1.26M]
  ------------------
 1125|  1.26M|}
hb-ot-name.cc:_ZL18sort_r_swap_blocksPcmm:
 1154|   219k|{
 1155|   219k|  if(na > 0 && nb > 0) {
  ------------------
  |  Branch (1155:6): [True: 109k, False: 109k]
  |  Branch (1155:16): [True: 109k, False: 0]
  ------------------
 1156|   109k|    if(na > nb) { sort_r_swap(ptr, ptr+na, nb); }
  ------------------
  |  Branch (1156:8): [True: 109k, False: 327]
  ------------------
 1157|    327|    else { sort_r_swap(ptr, ptr+nb, na); }
 1158|   109k|  }
 1159|   219k|}
hb-ot-name.cc:_ZL10hb_bsearchIK18hb_ot_name_entry_tS0_JbEEPT_RKT0_S3_mmPFiPKvS8_DpT1_ESA_:
 1086|   199k|{
 1087|   199k|  unsigned pos;
 1088|   199k|#pragma GCC diagnostic push
 1089|   199k|#pragma GCC diagnostic ignored "-Wcast-align"
 1090|   199k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar, ds...) ?
  ------------------
  |  Branch (1090:10): [True: 495, False: 199k]
  ------------------
 1091|   199k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1092|   199k|#pragma GCC diagnostic pop
 1093|   199k|}
hb-ot-name.cc:_ZL15hb_bsearch_implIK18hb_ot_name_entry_tS0_JbEEbPjRKT0_PT_mmPFiPKvS9_DpT1_ESB_:
 1041|   199k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   199k|  int min = 0, max = (int) nmemb - 1;
 1045|   205k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 6.14k, False: 199k]
  ------------------
 1046|  6.14k|  {
 1047|  6.14k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  6.14k|#pragma GCC diagnostic push
 1049|  6.14k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  6.14k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  6.14k|#pragma GCC diagnostic pop
 1052|  6.14k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  6.14k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 1.79k, False: 4.35k]
  ------------------
 1054|  1.79k|      max = mid - 1;
 1055|  4.35k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 3.85k, False: 495]
  ------------------
 1056|  3.85k|      min = mid + 1;
 1057|    495|    else
 1058|    495|    {
 1059|    495|      *pos = mid;
 1060|    495|      return true;
 1061|    495|    }
 1062|  6.14k|  }
 1063|   199k|  *pos = min;
 1064|   199k|  return false;
 1065|   199k|}
hb-ot-name.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|   163k|{
  982|   163k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|   163k|  return (T)(u - lo) <= (T)(hi - lo);
  987|   163k|}
hb-ot-shape.cc:_ZL15hb_bsearch_implIKN11hb_ot_map_t13feature_map_tEjJEEbPjRKT0_PT_mmPFiPKvSA_DpT1_ESC_:
 1041|   511k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|   511k|  int min = 0, max = (int) nmemb - 1;
 1045|  1.17M|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 819k, False: 351k]
  ------------------
 1046|   819k|  {
 1047|   819k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   819k|#pragma GCC diagnostic push
 1049|   819k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   819k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   819k|#pragma GCC diagnostic pop
 1052|   819k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   819k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 328k, False: 490k]
  ------------------
 1054|   328k|      max = mid - 1;
 1055|   490k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 330k, False: 160k]
  ------------------
 1056|   330k|      min = mid + 1;
 1057|   160k|    else
 1058|   160k|    {
 1059|   160k|      *pos = mid;
 1060|   160k|      return true;
 1061|   160k|    }
 1062|   819k|  }
 1063|   351k|  *pos = min;
 1064|   351k|  return false;
 1065|   511k|}
hb-ot-shape.cc:_ZL14_hb_cmp_methodIjKN11hb_ot_map_t13feature_map_tEJEEiPKvS4_DpT1_:
 1027|   819k|{
 1028|   819k|  const K& key = * (const K*) pkey;
 1029|   819k|  const V& val = * (const V*) pval;
 1030|       |
 1031|   819k|  return val.cmp (key, ds...);
 1032|   819k|}
hb-ot-shape.cc:_ZL9hb_memsetPvij:
  967|  49.3k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  49.3k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  49.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.3k]
  |  |  ------------------
  ------------------
  970|  49.3k|  return memset (s, c, n);
  971|  49.3k|}
hb-ot-shape.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|   440k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shape.cc:_ZL12ARRAY_LENGTHI19hb_ot_map_feature_tLj7EEjRAT0__KT_:
  942|   789k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shape.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|   410k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shape.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|   410k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shape.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|  4.37M|{
  982|  4.37M|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  4.37M|  return (T)(u - lo) <= (T)(hi - lo);
  987|  4.37M|}
hb-ot-shape.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|  1.64M|{
  996|  1.64M|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 249, False: 1.64M]
  |  Branch (996:42): [True: 100, False: 1.64M]
  ------------------
  997|  1.64M|}
hb-ot-shape.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|  1.64M|{
  991|  1.64M|  return hb_in_range (u, lo1, hi1);
  992|  1.64M|}
hb-ot-shape.cc:_Zan17hb_buffer_flags_tS_:
   60|  1.19M|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shape.cc:_Zan25hb_buffer_scratch_flags_tS_:
   60|  3.39M|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shape.cc:_Zor16hb_glyph_flags_tS_:
   59|     73|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shape.cc:_Zco16hb_glyph_flags_t:
   62|   233k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-tag.cc:_ZL15hb_bsearch_implIK7LangTagjJEEbPjRKT0_PT_mmPFiPKvS9_DpT1_ESB_:
 1041|  49.3k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  49.3k|  int min = 0, max = (int) nmemb - 1;
 1045|  49.3k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 0, False: 49.3k]
  ------------------
 1046|      0|  {
 1047|      0|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|      0|#pragma GCC diagnostic push
 1049|      0|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|      0|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|      0|#pragma GCC diagnostic pop
 1052|      0|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|      0|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 0, False: 0]
  ------------------
 1054|      0|      max = mid - 1;
 1055|      0|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 0, False: 0]
  ------------------
 1056|      0|      min = mid + 1;
 1057|      0|    else
 1058|      0|    {
 1059|      0|      *pos = mid;
 1060|      0|      return true;
 1061|      0|    }
 1062|      0|  }
 1063|  49.3k|  *pos = min;
 1064|  49.3k|  return false;
 1065|  49.3k|}
hb-set.cc:_ZL10fasthash32PKvmj:
  325|  88.2k|{
  326|       |	// the following trick converts the 64-bit hashcode to Fermat
  327|       |	// residue, which shall retain information from both the higher
  328|       |	// and lower parts of hashcode.
  329|  88.2k|        uint64_t h = fasthash64(buf, len, seed);
  330|  88.2k|	return h - (h >> 32);
  331|  88.2k|}
hb-set.cc:_ZL10fasthash64PKvmm:
  291|  88.2k|{
  292|  88.2k|	struct __attribute__((packed)) packed_uint64_t { uint64_t v; };
  293|  88.2k|	const uint64_t    m = 0x880355f21e6d1965ULL;
  294|  88.2k|	const packed_uint64_t *pos = (const packed_uint64_t *)buf;
  295|  88.2k|	const packed_uint64_t *end = pos + (len / 8);
  296|  88.2k|	const unsigned char *pos2;
  297|  88.2k|	uint64_t h = seed ^ (len * m);
  298|  88.2k|	uint64_t v;
  299|       |
  300|   177k|	while (pos != end) {
  ------------------
  |  Branch (300:9): [True: 88.7k, False: 88.2k]
  ------------------
  301|  88.7k|		v  = pos++->v;
  302|  88.7k|		h ^= mix(v);
  ------------------
  |  |  285|  88.7k|#define mix(h) (					\
  |  |  286|  88.7k|			(h) ^= (h) >> 23,		\
  |  |  287|  88.7k|			(h) *= 0x2127599bf4325c37ULL,	\
  |  |  288|  88.7k|			(h) ^= (h) >> 47)
  ------------------
  303|  88.7k|		h *= m;
  304|  88.7k|	}
  305|       |
  306|  88.2k|	pos2 = (const unsigned char*)pos;
  307|  88.2k|	v = 0;
  308|       |
  309|  88.2k|	switch (len & 7) {
  ------------------
  |  Branch (309:10): [True: 39.7k, False: 48.4k]
  ------------------
  310|      0|	case 7: v ^= (uint64_t)pos2[6] << 48; HB_FALLTHROUGH;
  ------------------
  |  |  336|      0|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (310:2): [True: 0, False: 88.2k]
  ------------------
  311|  30.1k|	case 6: v ^= (uint64_t)pos2[5] << 40; HB_FALLTHROUGH;
  ------------------
  |  |  336|  30.1k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (311:2): [True: 30.1k, False: 58.0k]
  ------------------
  312|  30.1k|	case 5: v ^= (uint64_t)pos2[4] << 32; HB_FALLTHROUGH;
  ------------------
  |  |  336|  30.1k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (312:2): [True: 0, False: 88.2k]
  ------------------
  313|  45.1k|	case 4: v ^= (uint64_t)pos2[3] << 24; HB_FALLTHROUGH;
  ------------------
  |  |  336|  45.1k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (313:2): [True: 14.9k, False: 73.3k]
  ------------------
  314|  45.1k|	case 3: v ^= (uint64_t)pos2[2] << 16; HB_FALLTHROUGH;
  ------------------
  |  |  336|  45.1k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (314:2): [True: 0, False: 88.2k]
  ------------------
  315|  48.4k|	case 2: v ^= (uint64_t)pos2[1] <<  8; HB_FALLTHROUGH;
  ------------------
  |  |  336|  48.4k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  |  Branch (315:2): [True: 3.32k, False: 84.9k]
  ------------------
  316|  48.4k|	case 1: v ^= (uint64_t)pos2[0];
  ------------------
  |  Branch (316:2): [True: 0, False: 88.2k]
  ------------------
  317|  48.4k|		h ^= mix(v);
  ------------------
  |  |  285|  48.4k|#define mix(h) (					\
  |  |  286|  48.4k|			(h) ^= (h) >> 23,		\
  |  |  287|  48.4k|			(h) *= 0x2127599bf4325c37ULL,	\
  |  |  288|  48.4k|			(h) ^= (h) >> 47)
  ------------------
  318|  48.4k|		h *= m;
  319|  88.2k|	}
  320|       |
  321|  88.2k|	return mix(h);
  ------------------
  |  |  285|  88.2k|#define mix(h) (					\
  |  |  286|  88.2k|			(h) ^= (h) >> 23,		\
  |  |  287|  88.2k|			(h) *= 0x2127599bf4325c37ULL,	\
  |  |  288|  88.2k|			(h) ^= (h) >> 47)
  ------------------
  322|  88.2k|}
hb-shape-plan.cc:_ZL9hb_memcmpPKvS0_j:
  957|   515k|{
  958|       |  /* It's illegal to pass NULL to memcmp(), even if len is zero.
  959|       |   * So, wrap it.
  960|       |   * https://sourceware.org/bugzilla/show_bug.cgi?id=23878 */
  961|   515k|  if (unlikely (!len)) return 0;
  ------------------
  |  |  259|   515k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 515k]
  |  |  ------------------
  ------------------
  962|   515k|  return memcmp (a, b, len);
  963|   515k|}
hb-shape.cc:_Zan17hb_buffer_flags_tS_:
   60|   565k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-buffer-verify.cc:_Zco17hb_buffer_flags_t:
   62|  1.00M|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-buffer-verify.cc:_Zco22hb_buffer_diff_flags_t:
   62|  28.4k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-buffer-verify.cc:_Zan17hb_buffer_flags_tS_:
   60|  29.4k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-buffer-verify.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|    834|{
 1007|    834|#if hb_has_builtin(__builtin_mul_overflow)
 1008|    834|  unsigned stack_result;
 1009|    834|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 834, False: 0]
  ------------------
 1010|    834|    result = &stack_result;
 1011|    834|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|    834|}
hb-ot-cff1-table.cc:_ZL10_hb_roundff:
  206|  37.7k|_hb_roundf (float x) { return floorf (x + .5f); }
hb-ot-cff1-table.cc:_ZL10hb_bsearchIKN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS3_IhLj1EEEEEjEPT_RKT0_S9_mmPFiPKvSE_E:
 1072|     22|{
 1073|     22|  unsigned pos;
 1074|     22|#pragma GCC diagnostic push
 1075|     22|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|     22|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 20, False: 2]
  ------------------
 1077|     20|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|     22|#pragma GCC diagnostic pop
 1079|     22|}
hb-ot-cff1-table.cc:_ZL15hb_bsearch_implIKN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS3_IhLj1EEEEEjJEEbPjRKT0_PT_mmPFiPKvSF_DpT1_ESH_:
 1041|     22|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|     22|  int min = 0, max = (int) nmemb - 1;
 1045|     44|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 42, False: 2]
  ------------------
 1046|     42|  {
 1047|     42|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|     42|#pragma GCC diagnostic push
 1049|     42|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|     42|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|     42|#pragma GCC diagnostic pop
 1052|     42|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|     42|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 16, False: 26]
  ------------------
 1054|     16|      max = mid - 1;
 1055|     26|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 6, False: 20]
  ------------------
 1056|      6|      min = mid + 1;
 1057|     20|    else
 1058|     20|    {
 1059|     20|      *pos = mid;
 1060|     20|      return true;
 1061|     20|    }
 1062|     42|  }
 1063|      2|  *pos = min;
 1064|      2|  return false;
 1065|     22|}
hb-ot-cff1-table.cc:_ZL12ARRAY_LENGTHItLj166EEjRAT0__KT_:
  942|    118|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-cff1-table.cc:_ZL12ARRAY_LENGTHItLj87EEjRAT0__KT_:
  942|     94|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-cff1-table.cc:_ZL12ARRAY_LENGTHIhLj256EEjRAT0__KT_:
  942|  21.5k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-cff2-table.cc:_ZL10_hb_roundff:
  206|    720|_hb_roundf (float x) { return floorf (x + .5f); }
hb-ot-cff2-table.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|     29|{
 1007|     29|#if hb_has_builtin(__builtin_mul_overflow)
 1008|     29|  unsigned stack_result;
 1009|     29|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 29, False: 0]
  ------------------
 1010|     29|    result = &stack_result;
 1011|     29|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|     29|}
hb-ot-map.cc:_ZL9hb_memsetPvij:
  967|  49.3k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  49.3k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  49.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.3k]
  |  |  ------------------
  ------------------
  970|  49.3k|  return memset (s, c, n);
  971|  49.3k|}
hb-ot-map.cc:_Zan25hb_ot_map_feature_flags_tS_:
   60|  6.01M|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-map.cc:_ZoRR25hb_ot_map_feature_flags_tS_:
   63|  46.0k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-map.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|  46.0k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-map.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|   451k|{
 1007|   451k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|   451k|  unsigned stack_result;
 1009|   451k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 451k, False: 0]
  ------------------
 1010|   451k|    result = &stack_result;
 1011|   451k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|   451k|}
hb-ot-map.cc:_ZL12ARRAY_LENGTHIjLj32EEjRAT0__KT_:
  942|   587k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-map.cc:_ZL8hb_qsortPvmmPFiPKvS1_E:
 1286|  62.4k|{
 1287|       |#if defined(__OPTIMIZE_SIZE__) && !defined(HB_USE_INTERNAL_QSORT)
 1288|       |  qsort (base, nel, width, compar);
 1289|       |#else
 1290|  62.4k|  sort_r_simple (base, nel, width, compar);
 1291|  62.4k|#endif
 1292|  62.4k|}
hb-ot-map.cc:_ZL13sort_r_simpleIJEEvPvmmPFiPKvS2_DpT_ES4_:
 1169|   456k|{
 1170|   456k|  char *b = (char *)base, *end = b + nel*w;
 1171|       |
 1172|       |  /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1173|       |  printf("\n"); */
 1174|       |
 1175|   456k|  if(nel < 10) {
  ------------------
  |  Branch (1175:6): [True: 259k, False: 197k]
  ------------------
 1176|       |    /* Insertion sort for arbitrarily small inputs */
 1177|   259k|    char *pi, *pj;
 1178|  1.34M|    for(pi = b+w; pi < end; pi += w) {
  ------------------
  |  Branch (1178:19): [True: 1.08M, False: 259k]
  ------------------
 1179|  2.07M|      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
  ------------------
  |  Branch (1179:20): [True: 1.95M, False: 120k]
  |  Branch (1179:30): [True: 982k, False: 968k]
  ------------------
 1180|  1.08M|    }
 1181|   259k|  }
 1182|   197k|  else
 1183|   197k|  {
 1184|       |    /* nel > 9; Quicksort */
 1185|       |
 1186|   197k|    int cmp;
 1187|   197k|    char *pl, *ple, *pr, *pre, *pivot;
 1188|   197k|    char *last = b+w*(nel-1), *tmp;
 1189|       |
 1190|       |    /*
 1191|       |    Use median of second, middle and second-last items as pivot.
 1192|       |    First and last may have been swapped with pivot and therefore be extreme
 1193|       |    */
 1194|   197k|    char *l[3];
 1195|   197k|    l[0] = b + w;
 1196|   197k|    l[1] = b+w*(nel/2);
 1197|   197k|    l[2] = last - w;
 1198|       |
 1199|       |    /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */
 1200|       |
 1201|   197k|    if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|   117k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1201:8): [True: 117k, False: 79.5k]
  ------------------
 1202|   197k|    if(compar(l[1],l[2],ds...) > 0) {
  ------------------
  |  Branch (1202:8): [True: 118k, False: 78.7k]
  ------------------
 1203|   118k|      SORT_R_SWAP(l[1], l[2], tmp);
  ------------------
  |  | 1116|   118k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
 1204|   118k|      if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|  57.5k|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1204:10): [True: 57.5k, False: 60.7k]
  ------------------
 1205|   118k|    }
 1206|       |
 1207|       |    /* swap mid value (l[1]), and last element to put pivot as last element */
 1208|   197k|    if(l[1] != last) { sort_r_swap(l[1], last, w); }
  ------------------
  |  Branch (1208:8): [True: 197k, False: 0]
  ------------------
 1209|       |
 1210|       |    /*
 1211|       |    pl is the next item on the left to be compared to the pivot
 1212|       |    pr is the last item on the right that was compared to the pivot
 1213|       |    ple is the left position to put the next item that equals the pivot
 1214|       |    ple is the last right position where we put an item that equals the pivot
 1215|       |                                           v- end (beyond the array)
 1216|       |      EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE.
 1217|       |      ^- b  ^- ple  ^- pl   ^- pr  ^- pre ^- last (where the pivot is)
 1218|       |    Pivot comparison key:
 1219|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1220|       |    */
 1221|   197k|    pivot = last;
 1222|   197k|    ple = pl = b;
 1223|   197k|    pre = pr = last;
 1224|       |
 1225|       |    /*
 1226|       |    Strategy:
 1227|       |    Loop into the list from the left and right at the same time to find:
 1228|       |    - an item on the left that is greater than the pivot
 1229|       |    - an item on the right that is less than the pivot
 1230|       |    Once found, they are swapped and the loop continues.
 1231|       |    Meanwhile items that are equal to the pivot are moved to the edges of the
 1232|       |    array.
 1233|       |    */
 1234|  1.29M|    while(pl < pr) {
  ------------------
  |  Branch (1234:11): [True: 1.20M, False: 89.1k]
  ------------------
 1235|       |      /* Move left hand items which are equal to the pivot to the far left.
 1236|       |         break when we find an item that is greater than the pivot */
 1237|  2.86M|      for(; pl < pr; pl += w) {
  ------------------
  |  Branch (1237:13): [True: 2.75M, False: 107k]
  ------------------
 1238|  2.75M|        cmp = compar(pl, pivot, ds...);
 1239|  2.75M|        if(cmp > 0) { break; }
  ------------------
  |  Branch (1239:12): [True: 1.09M, False: 1.65M]
  ------------------
 1240|  1.65M|        else if(cmp == 0) {
  ------------------
  |  Branch (1240:17): [True: 295k, False: 1.36M]
  ------------------
 1241|   295k|          if(ple < pl) { sort_r_swap(ple, pl, w); }
  ------------------
  |  Branch (1241:14): [True: 122k, False: 173k]
  ------------------
 1242|   295k|          ple += w;
 1243|   295k|        }
 1244|  2.75M|      }
 1245|       |      /* break if last batch of left hand items were equal to pivot */
 1246|  1.20M|      if(pl >= pr) { break; }
  ------------------
  |  Branch (1246:10): [True: 107k, False: 1.09M]
  ------------------
 1247|       |      /* Move right hand items which are equal to the pivot to the far right.
 1248|       |         break when we find an item that is less than the pivot */
 1249|  3.02M|      for(; pl < pr; ) {
  ------------------
  |  Branch (1249:13): [True: 2.94M, False: 76.8k]
  ------------------
 1250|  2.94M|        pr -= w; /* Move right pointer onto an unprocessed item */
 1251|  2.94M|        cmp = compar(pr, pivot, ds...);
 1252|  2.94M|        if(cmp == 0) {
  ------------------
  |  Branch (1252:12): [True: 682k, False: 2.26M]
  ------------------
 1253|   682k|          pre -= w;
 1254|   682k|          if(pr < pre) { sort_r_swap(pr, pre, w); }
  ------------------
  |  Branch (1254:14): [True: 636k, False: 46.4k]
  ------------------
 1255|   682k|        }
 1256|  2.26M|        else if(cmp < 0) {
  ------------------
  |  Branch (1256:17): [True: 1.02M, False: 1.24M]
  ------------------
 1257|  1.02M|          if(pl < pr) { sort_r_swap(pl, pr, w); }
  ------------------
  |  Branch (1257:14): [True: 1.02M, False: 0]
  ------------------
 1258|  1.02M|          pl += w;
 1259|  1.02M|          break;
 1260|  1.02M|        }
 1261|  2.94M|      }
 1262|  1.09M|    }
 1263|       |
 1264|   197k|    pl = pr; /* pr may have gone below pl */
 1265|       |
 1266|       |    /*
 1267|       |    Now we need to go from: EEELLLGGGGEEEE
 1268|       |                        to: LLLEEEEEEEGGGG
 1269|       |    Pivot comparison key:
 1270|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1271|       |    */
 1272|   197k|    sort_r_swap_blocks(b, ple-b, pl-ple);
 1273|   197k|    sort_r_swap_blocks(pr, pre-pr, end-pre);
 1274|       |
 1275|       |    /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1276|       |    printf("\n");*/
 1277|       |
 1278|   197k|    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
 1279|   197k|    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
 1280|   197k|  }
 1281|   456k|}
hb-ot-map.cc:_ZL14sort_r_cmpswapIJEEiPcS0_mPFiPKvS2_DpT_ES4_:
 1137|  1.95M|{
 1138|  1.95M|  if(compar(a, b, ds...) > 0) {
  ------------------
  |  Branch (1138:6): [True: 982k, False: 968k]
  ------------------
 1139|   982k|    sort_r_swap(a, b, w);
 1140|   982k|    return 1;
 1141|   982k|  }
 1142|   968k|  return 0;
 1143|  1.95M|}
hb-ot-map.cc:_ZL11sort_r_swapPcS_m:
 1122|  3.16M|{
 1123|  3.16M|  char tmp, *end = a+w;
 1124|  78.7M|  for(; a < end; a++, b++) { SORT_R_SWAP(*a, *b, tmp); }
  ------------------
  |  | 1116|  75.5M|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1124:9): [True: 75.5M, False: 3.16M]
  ------------------
 1125|  3.16M|}
hb-ot-map.cc:_ZL18sort_r_swap_blocksPcmm:
 1154|   394k|{
 1155|   394k|  if(na > 0 && nb > 0) {
  ------------------
  |  Branch (1155:6): [True: 213k, False: 180k]
  |  Branch (1155:16): [True: 205k, False: 8.37k]
  ------------------
 1156|   205k|    if(na > nb) { sort_r_swap(ptr, ptr+na, nb); }
  ------------------
  |  Branch (1156:8): [True: 184k, False: 20.8k]
  ------------------
 1157|  20.8k|    else { sort_r_swap(ptr, ptr+nb, na); }
 1158|   205k|  }
 1159|   394k|}
hb-ot-map.cc:_ZL11hb_popcountI16hb_glyph_flags_tEjT_:
  715|  49.3k|{
  716|  49.3k|#if hb_has_builtin(__builtin_popcount)
  717|  49.3k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (717:7): [Folded - Ignored]
  ------------------
  718|  49.3k|    return __builtin_popcount (v);
  719|      0|#endif
  720|       |
  721|      0|#if hb_has_builtin(__builtin_popcountl)
  722|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (722:7): [Folded - Ignored]
  ------------------
  723|      0|    return __builtin_popcountl (v);
  724|      0|#endif
  725|       |
  726|      0|#if hb_has_builtin(__builtin_popcountll)
  727|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (727:7): [Folded - Ignored]
  ------------------
  728|      0|    return __builtin_popcountll (v);
  729|      0|#endif
  730|       |
  731|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (731:7): [Folded - Ignored]
  ------------------
  732|      0|  {
  733|       |    /* "HACKMEM 169" */
  734|      0|    uint32_t y;
  735|      0|    y = (v >> 1) &033333333333;
  736|      0|    y = v - y - ((y >>1) & 033333333333);
  737|      0|    return (((y + (y >> 3)) & 030707070707) % 077);
  738|      0|  }
  739|       |
  740|      0|  if (sizeof (T) == 8)
  ------------------
  |  Branch (740:7): [Folded - Ignored]
  ------------------
  741|      0|  {
  742|      0|    uint64_t y = (uint64_t) v;
  743|      0|    y -= ((y >> 1) & 0x5555555555555555ull);
  744|      0|    y = (y & 0x3333333333333333ull) + (y >> 2 & 0x3333333333333333ull);
  745|      0|    return ((y + (y >> 4)) & 0xf0f0f0f0f0f0f0full) * 0x101010101010101ull >> 56;
  746|      0|  }
  747|       |
  748|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (748:7): [Folded - Ignored]
  ------------------
  749|      0|  {
  750|      0|    unsigned int shift = 64;
  751|      0|    return hb_popcount<uint64_t> ((uint64_t) v) + hb_popcount ((uint64_t) (v >> shift));
  752|      0|  }
  753|       |
  754|      0|  assert (0);
  755|      0|  return 0; /* Shut up stupid compiler. */
  756|      0|}
hb-ot-map.cc:_ZL14hb_bit_storageIjEjT_:
  762|   240k|{
  763|   240k|  if (unlikely (!v)) return 0;
  ------------------
  |  |  259|   240k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.41k, False: 237k]
  |  |  ------------------
  ------------------
  764|       |
  765|   237k|#if hb_has_builtin(__builtin_clz)
  766|   237k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (766:7): [Folded - Ignored]
  ------------------
  767|   237k|    return sizeof (unsigned int) * 8 - __builtin_clz (v);
  768|      0|#endif
  769|       |
  770|      0|#if hb_has_builtin(__builtin_clzl)
  771|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (771:7): [Folded - Ignored]
  ------------------
  772|      0|    return sizeof (unsigned long) * 8 - __builtin_clzl (v);
  773|      0|#endif
  774|       |
  775|      0|#if hb_has_builtin(__builtin_clzll)
  776|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (776:7): [Folded - Ignored]
  ------------------
  777|      0|    return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
  778|      0|#endif
  779|       |
  780|       |#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) && (__GNUC__ < 4))
  781|       |  if (sizeof (T) <= sizeof (unsigned int))
  782|       |  {
  783|       |    unsigned long where;
  784|       |    _BitScanReverse (&where, v);
  785|       |    return 1 + where;
  786|       |  }
  787|       |# if defined(_WIN64)
  788|       |  if (sizeof (T) <= 8)
  789|       |  {
  790|       |    unsigned long where;
  791|       |    _BitScanReverse64 (&where, v);
  792|       |    return 1 + where;
  793|       |  }
  794|       |# endif
  795|       |#endif
  796|       |
  797|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (797:7): [Folded - Ignored]
  ------------------
  798|      0|  {
  799|       |    /* "bithacks" */
  800|      0|    const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
  801|      0|    const unsigned int S[] = {1, 2, 4, 8, 16};
  802|      0|    unsigned int r = 0;
  803|      0|    for (int i = 4; i >= 0; i--)
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|      if (v & b[i])
  ------------------
  |  Branch (804:11): [True: 0, False: 0]
  ------------------
  805|      0|      {
  806|      0|	v >>= S[i];
  807|      0|	r |= S[i];
  808|      0|      }
  809|      0|    return r + 1;
  810|      0|  }
  811|      0|  if (sizeof (T) <= 8)
  ------------------
  |  Branch (811:7): [Folded - Ignored]
  ------------------
  812|      0|  {
  813|       |    /* "bithacks" */
  814|      0|    const uint64_t b[] = {0x2ULL, 0xCULL, 0xF0ULL, 0xFF00ULL, 0xFFFF0000ULL, 0xFFFFFFFF00000000ULL};
  815|      0|    const unsigned int S[] = {1, 2, 4, 8, 16, 32};
  816|      0|    unsigned int r = 0;
  817|      0|    for (int i = 5; i >= 0; i--)
  ------------------
  |  Branch (817:21): [True: 0, False: 0]
  ------------------
  818|      0|      if (v & b[i])
  ------------------
  |  Branch (818:11): [True: 0, False: 0]
  ------------------
  819|      0|      {
  820|      0|	v >>= S[i];
  821|      0|	r |= S[i];
  822|      0|      }
  823|      0|    return r + 1;
  824|      0|  }
  825|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (825:7): [Folded - Ignored]
  ------------------
  826|      0|  {
  827|      0|    unsigned int shift = 64;
  828|      0|    return (v >> shift) ? hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift :
  ------------------
  |  Branch (828:12): [True: 0, False: 0]
  ------------------
  829|      0|			  hb_bit_storage<uint64_t> ((uint64_t) v);
  830|      0|  }
  831|       |
  832|      0|  assert (0);
  833|      0|  return 0; /* Shut up stupid compiler. */
  834|      0|}
hb-ot-shaper-arabic.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|  20.5k|{
  982|  20.5k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  20.5k|  return (T)(u - lo) <= (T)(hi - lo);
  987|  20.5k|}
hb-ot-shaper-arabic.cc:_Zan17hb_buffer_flags_tS_:
   60|    808|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-arabic.cc:_Zor16hb_glyph_flags_tS_:
   59|    169|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  6.07k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shaper-arabic.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  6.07k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|  3.29k|{
  996|  3.29k|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 153, False: 3.14k]
  |  Branch (996:42): [True: 98, False: 3.04k]
  ------------------
  997|  3.29k|}
hb-ot-shaper-arabic.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|  3.14k|{
  991|  3.14k|  return hb_in_range (u, lo1, hi1);
  992|  3.14k|}
hb-ot-shaper-arabic.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|  23.6k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIjLj7EEjRAT0__KT_:
  942|  8.38k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL14hb_stable_sortIN2OT11HBGlyphID16ENS0_7IntTypeItLj2EEES1_EvPT_jPFiPKT0_S8_EPT1_:
 1309|    818|{
 1310|    818|  static_assert (hb_is_trivially_copy_assignable (T), "");
 1311|    818|  static_assert (hb_is_trivially_copy_assignable (T3), "");
 1312|       |
 1313|  28.1k|  for (unsigned int i = 1; i < len; i++)
  ------------------
  |  Branch (1313:28): [True: 27.3k, False: 818]
  ------------------
 1314|  27.3k|  {
 1315|  27.3k|    unsigned int j = i;
 1316|  66.5k|    while (j && compar (&array[j - 1], &array[i]) > 0)
  ------------------
  |  Branch (1316:12): [True: 66.2k, False: 373]
  |  Branch (1316:17): [True: 39.2k, False: 26.9k]
  ------------------
 1317|  39.2k|      j--;
 1318|  27.3k|    if (i == j)
  ------------------
  |  Branch (1318:9): [True: 24.8k, False: 2.52k]
  ------------------
 1319|  24.8k|      continue;
 1320|       |    /* Move item i to occupy place for item j, shift what's in between. */
 1321|  2.52k|    {
 1322|  2.52k|      T t = array[i];
 1323|  2.52k|      memmove (&array[j + 1], &array[j], (i - j) * sizeof (T));
 1324|  2.52k|      array[j] = t;
 1325|  2.52k|    }
 1326|  2.52k|    if (array2)
  ------------------
  |  Branch (1326:9): [True: 2.52k, False: 0]
  ------------------
 1327|  2.52k|    {
 1328|  2.52k|      T3 t = array2[i];
 1329|  2.52k|      memmove (&array2[j + 1], &array2[j], (i - j) * sizeof (T3));
 1330|  2.52k|      array2[j] = t;
 1331|  2.52k|    }
 1332|  2.52k|  }
 1333|    818|}
hb-ot-shaper-arabic.cc:_ZL25hb_unsigned_mul_overflowsjjPj:
 1006|  12.3k|{
 1007|  12.3k|#if hb_has_builtin(__builtin_mul_overflow)
 1008|  12.3k|  unsigned stack_result;
 1009|  12.3k|  if (!result)
  ------------------
  |  Branch (1009:7): [True: 12.3k, False: 0]
  ------------------
 1010|  12.3k|    result = &stack_result;
 1011|  12.3k|  return __builtin_mul_overflow (count, size, result);
 1012|      0|#endif
 1013|       |
 1014|      0|  if (result)
  ------------------
  |  Branch (1014:7): [True: 0, False: 0]
  ------------------
 1015|      0|    *result = count * size;
 1016|      0|  return (size > 0) && (count >= ((unsigned int) -1) / size);
  ------------------
  |  Branch (1016:10): [True: 0, False: 0]
  |  Branch (1016:24): [True: 0, False: 0]
  ------------------
 1017|  12.3k|}
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN22hb_serialize_context_t8object_tELj32EEjRAT0__KT_:
  942|  67.8k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL9hb_memsetPvij:
  967|  83.9k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|  83.9k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|  83.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 23.8k, False: 60.1k]
  |  |  ------------------
  ------------------
  970|  60.1k|  return memset (s, c, n);
  971|  83.9k|}
hb-ot-shaper-arabic.cc:_Zor20hb_serialize_error_tS_:
   59|    287|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZNK3$_6clI9hb_pair_tIRN2OT11HBGlyphID16ES4_EEENT_8second_tERKS6_:
  677|  50.8k|  operator () (const Pair& pair) const { return pair.second; }
_ZN9hb_pair_tIRN2OT11HBGlyphID16ES2_EC2ES2_S2_:
  623|   119k|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
_ZN9hb_pair_tIRN2OT11HBGlyphID16ES2_EcvS_IT_T0_EIjjLPv0EEEv:
  628|  4.14k|  operator hb_pair_t<Q1, Q2> () { return hb_pair_t<Q1, Q2> (first, second); }
hb-ot-shaper-arabic.cc:_ZNK3$_5clI9hb_pair_tIRN2OT11HBGlyphID16ES4_EEENT_7first_tERKS6_:
  670|  64.9k|  operator () (const Pair& pair) const { return pair.first; }
hb-ot-shaper-arabic.cc:_ZL8hb_qsortPvmmPFiPKvS1_E:
 1286|     66|{
 1287|       |#if defined(__OPTIMIZE_SIZE__) && !defined(HB_USE_INTERNAL_QSORT)
 1288|       |  qsort (base, nel, width, compar);
 1289|       |#else
 1290|     66|  sort_r_simple (base, nel, width, compar);
 1291|     66|#endif
 1292|     66|}
hb-ot-shaper-arabic.cc:_ZL13sort_r_simpleIJEEvPvmmPFiPKvS2_DpT_ES4_:
 1169|    174|{
 1170|    174|  char *b = (char *)base, *end = b + nel*w;
 1171|       |
 1172|       |  /* for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1173|       |  printf("\n"); */
 1174|       |
 1175|    174|  if(nel < 10) {
  ------------------
  |  Branch (1175:6): [True: 120, False: 54]
  ------------------
 1176|       |    /* Insertion sort for arbitrarily small inputs */
 1177|    120|    char *pi, *pj;
 1178|    718|    for(pi = b+w; pi < end; pi += w) {
  ------------------
  |  Branch (1178:19): [True: 598, False: 120]
  ------------------
 1179|    598|      for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,ds...); pj -= w) {}
  ------------------
  |  Branch (1179:20): [True: 598, False: 0]
  |  Branch (1179:30): [True: 0, False: 598]
  ------------------
 1180|    598|    }
 1181|    120|  }
 1182|     54|  else
 1183|     54|  {
 1184|       |    /* nel > 9; Quicksort */
 1185|       |
 1186|     54|    int cmp;
 1187|     54|    char *pl, *ple, *pr, *pre, *pivot;
 1188|     54|    char *last = b+w*(nel-1), *tmp;
 1189|       |
 1190|       |    /*
 1191|       |    Use median of second, middle and second-last items as pivot.
 1192|       |    First and last may have been swapped with pivot and therefore be extreme
 1193|       |    */
 1194|     54|    char *l[3];
 1195|     54|    l[0] = b + w;
 1196|     54|    l[1] = b+w*(nel/2);
 1197|     54|    l[2] = last - w;
 1198|       |
 1199|       |    /* printf("pivots: %i, %i, %i\n", *(int*)l[0], *(int*)l[1], *(int*)l[2]); */
 1200|       |
 1201|     54|    if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|      0|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1201:8): [True: 0, False: 54]
  ------------------
 1202|     54|    if(compar(l[1],l[2],ds...) > 0) {
  ------------------
  |  Branch (1202:8): [True: 0, False: 54]
  ------------------
 1203|      0|      SORT_R_SWAP(l[1], l[2], tmp);
  ------------------
  |  | 1116|      0|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
 1204|      0|      if(compar(l[0],l[1],ds...) > 0) { SORT_R_SWAP(l[0], l[1], tmp); }
  ------------------
  |  | 1116|      0|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1204:10): [True: 0, False: 0]
  ------------------
 1205|      0|    }
 1206|       |
 1207|       |    /* swap mid value (l[1]), and last element to put pivot as last element */
 1208|     54|    if(l[1] != last) { sort_r_swap(l[1], last, w); }
  ------------------
  |  Branch (1208:8): [True: 54, False: 0]
  ------------------
 1209|       |
 1210|       |    /*
 1211|       |    pl is the next item on the left to be compared to the pivot
 1212|       |    pr is the last item on the right that was compared to the pivot
 1213|       |    ple is the left position to put the next item that equals the pivot
 1214|       |    ple is the last right position where we put an item that equals the pivot
 1215|       |                                           v- end (beyond the array)
 1216|       |      EEEEEELLLLLLLLuuuuuuuuGGGGGGGEEEEEEEE.
 1217|       |      ^- b  ^- ple  ^- pl   ^- pr  ^- pre ^- last (where the pivot is)
 1218|       |    Pivot comparison key:
 1219|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1220|       |    */
 1221|     54|    pivot = last;
 1222|     54|    ple = pl = b;
 1223|     54|    pre = pr = last;
 1224|       |
 1225|       |    /*
 1226|       |    Strategy:
 1227|       |    Loop into the list from the left and right at the same time to find:
 1228|       |    - an item on the left that is greater than the pivot
 1229|       |    - an item on the right that is less than the pivot
 1230|       |    Once found, they are swapped and the loop continues.
 1231|       |    Meanwhile items that are equal to the pivot are moved to the edges of the
 1232|       |    array.
 1233|       |    */
 1234|    108|    while(pl < pr) {
  ------------------
  |  Branch (1234:11): [True: 54, False: 54]
  ------------------
 1235|       |      /* Move left hand items which are equal to the pivot to the far left.
 1236|       |         break when we find an item that is greater than the pivot */
 1237|    403|      for(; pl < pr; pl += w) {
  ------------------
  |  Branch (1237:13): [True: 403, False: 0]
  ------------------
 1238|    403|        cmp = compar(pl, pivot, ds...);
 1239|    403|        if(cmp > 0) { break; }
  ------------------
  |  Branch (1239:12): [True: 54, False: 349]
  ------------------
 1240|    349|        else if(cmp == 0) {
  ------------------
  |  Branch (1240:17): [True: 0, False: 349]
  ------------------
 1241|      0|          if(ple < pl) { sort_r_swap(ple, pl, w); }
  ------------------
  |  Branch (1241:14): [True: 0, False: 0]
  ------------------
 1242|      0|          ple += w;
 1243|      0|        }
 1244|    403|      }
 1245|       |      /* break if last batch of left hand items were equal to pivot */
 1246|     54|      if(pl >= pr) { break; }
  ------------------
  |  Branch (1246:10): [True: 0, False: 54]
  ------------------
 1247|       |      /* Move right hand items which are equal to the pivot to the far right.
 1248|       |         break when we find an item that is less than the pivot */
 1249|    375|      for(; pl < pr; ) {
  ------------------
  |  Branch (1249:13): [True: 321, False: 54]
  ------------------
 1250|    321|        pr -= w; /* Move right pointer onto an unprocessed item */
 1251|    321|        cmp = compar(pr, pivot, ds...);
 1252|    321|        if(cmp == 0) {
  ------------------
  |  Branch (1252:12): [True: 0, False: 321]
  ------------------
 1253|      0|          pre -= w;
 1254|      0|          if(pr < pre) { sort_r_swap(pr, pre, w); }
  ------------------
  |  Branch (1254:14): [True: 0, False: 0]
  ------------------
 1255|      0|        }
 1256|    321|        else if(cmp < 0) {
  ------------------
  |  Branch (1256:17): [True: 0, False: 321]
  ------------------
 1257|      0|          if(pl < pr) { sort_r_swap(pl, pr, w); }
  ------------------
  |  Branch (1257:14): [True: 0, False: 0]
  ------------------
 1258|      0|          pl += w;
 1259|      0|          break;
 1260|      0|        }
 1261|    321|      }
 1262|     54|    }
 1263|       |
 1264|     54|    pl = pr; /* pr may have gone below pl */
 1265|       |
 1266|       |    /*
 1267|       |    Now we need to go from: EEELLLGGGGEEEE
 1268|       |                        to: LLLEEEEEEEGGGG
 1269|       |    Pivot comparison key:
 1270|       |      E = equal, L = less than, u = unknown, G = greater than, E = equal
 1271|       |    */
 1272|     54|    sort_r_swap_blocks(b, ple-b, pl-ple);
 1273|     54|    sort_r_swap_blocks(pr, pre-pr, end-pre);
 1274|       |
 1275|       |    /*for(size_t i=0; i<nel; i++) {printf("%4i", *(int*)(b + i*sizeof(int)));}
 1276|       |    printf("\n");*/
 1277|       |
 1278|     54|    sort_r_simple(b, (pl-ple)/w, w, compar, ds...);
 1279|     54|    sort_r_simple(end-(pre-pr), (pre-pr)/w, w, compar, ds...);
 1280|     54|  }
 1281|    174|}
hb-ot-shaper-arabic.cc:_ZL14sort_r_cmpswapIJEEiPcS0_mPFiPKvS2_DpT_ES4_:
 1137|    598|{
 1138|    598|  if(compar(a, b, ds...) > 0) {
  ------------------
  |  Branch (1138:6): [True: 0, False: 598]
  ------------------
 1139|      0|    sort_r_swap(a, b, w);
 1140|      0|    return 1;
 1141|      0|  }
 1142|    598|  return 0;
 1143|    598|}
hb-ot-shaper-arabic.cc:_ZL11sort_r_swapPcS_m:
 1122|    108|{
 1123|    108|  char tmp, *end = a+w;
 1124|    756|  for(; a < end; a++, b++) { SORT_R_SWAP(*a, *b, tmp); }
  ------------------
  |  | 1116|    648|#define SORT_R_SWAP(a,b,tmp) ((void) ((tmp) = (a)), (void) ((a) = (b)), (b) = (tmp))
  ------------------
  |  Branch (1124:9): [True: 648, False: 108]
  ------------------
 1125|    108|}
hb-ot-shaper-arabic.cc:_ZL18sort_r_swap_blocksPcmm:
 1154|    108|{
 1155|    108|  if(na > 0 && nb > 0) {
  ------------------
  |  Branch (1155:6): [True: 54, False: 54]
  |  Branch (1155:16): [True: 54, False: 0]
  ------------------
 1156|     54|    if(na > nb) { sort_r_swap(ptr, ptr+na, nb); }
  ------------------
  |  Branch (1156:8): [True: 54, False: 0]
  ------------------
 1157|      0|    else { sort_r_swap(ptr, ptr+nb, na); }
 1158|     54|  }
 1159|    108|}
hb-ot-shaper-arabic.cc:_ZL9hb_memcmpPKvS0_j:
  957|  14.5k|{
  958|       |  /* It's illegal to pass NULL to memcmp(), even if len is zero.
  959|       |   * So, wrap it.
  960|       |   * https://sourceware.org/bugzilla/show_bug.cgi?id=23878 */
  961|  14.5k|  if (unlikely (!len)) return 0;
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.18k, False: 8.33k]
  |  |  ------------------
  ------------------
  962|  8.33k|  return memcmp (a, b, len);
  963|  14.5k|}
hb-ot-shaper-arabic.cc:_ZL14hb_bit_storageIjEjT_:
  762|  2.03k|{
  763|  2.03k|  if (unlikely (!v)) return 0;
  ------------------
  |  |  259|  2.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  764|       |
  765|  2.03k|#if hb_has_builtin(__builtin_clz)
  766|  2.03k|  if (sizeof (T) <= sizeof (unsigned int))
  ------------------
  |  Branch (766:7): [Folded - Ignored]
  ------------------
  767|  2.03k|    return sizeof (unsigned int) * 8 - __builtin_clz (v);
  768|      0|#endif
  769|       |
  770|      0|#if hb_has_builtin(__builtin_clzl)
  771|      0|  if (sizeof (T) <= sizeof (unsigned long))
  ------------------
  |  Branch (771:7): [Folded - Ignored]
  ------------------
  772|      0|    return sizeof (unsigned long) * 8 - __builtin_clzl (v);
  773|      0|#endif
  774|       |
  775|      0|#if hb_has_builtin(__builtin_clzll)
  776|      0|  if (sizeof (T) <= sizeof (unsigned long long))
  ------------------
  |  Branch (776:7): [Folded - Ignored]
  ------------------
  777|      0|    return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
  778|      0|#endif
  779|       |
  780|       |#if (defined(_MSC_VER) && _MSC_VER >= 1500) || (defined(__MINGW32__) && (__GNUC__ < 4))
  781|       |  if (sizeof (T) <= sizeof (unsigned int))
  782|       |  {
  783|       |    unsigned long where;
  784|       |    _BitScanReverse (&where, v);
  785|       |    return 1 + where;
  786|       |  }
  787|       |# if defined(_WIN64)
  788|       |  if (sizeof (T) <= 8)
  789|       |  {
  790|       |    unsigned long where;
  791|       |    _BitScanReverse64 (&where, v);
  792|       |    return 1 + where;
  793|       |  }
  794|       |# endif
  795|       |#endif
  796|       |
  797|      0|  if (sizeof (T) <= 4)
  ------------------
  |  Branch (797:7): [Folded - Ignored]
  ------------------
  798|      0|  {
  799|       |    /* "bithacks" */
  800|      0|    const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
  801|      0|    const unsigned int S[] = {1, 2, 4, 8, 16};
  802|      0|    unsigned int r = 0;
  803|      0|    for (int i = 4; i >= 0; i--)
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|      if (v & b[i])
  ------------------
  |  Branch (804:11): [True: 0, False: 0]
  ------------------
  805|      0|      {
  806|      0|	v >>= S[i];
  807|      0|	r |= S[i];
  808|      0|      }
  809|      0|    return r + 1;
  810|      0|  }
  811|      0|  if (sizeof (T) <= 8)
  ------------------
  |  Branch (811:7): [Folded - Ignored]
  ------------------
  812|      0|  {
  813|       |    /* "bithacks" */
  814|      0|    const uint64_t b[] = {0x2ULL, 0xCULL, 0xF0ULL, 0xFF00ULL, 0xFFFF0000ULL, 0xFFFFFFFF00000000ULL};
  815|      0|    const unsigned int S[] = {1, 2, 4, 8, 16, 32};
  816|      0|    unsigned int r = 0;
  817|      0|    for (int i = 5; i >= 0; i--)
  ------------------
  |  Branch (817:21): [True: 0, False: 0]
  ------------------
  818|      0|      if (v & b[i])
  ------------------
  |  Branch (818:11): [True: 0, False: 0]
  ------------------
  819|      0|      {
  820|      0|	v >>= S[i];
  821|      0|	r |= S[i];
  822|      0|      }
  823|      0|    return r + 1;
  824|      0|  }
  825|      0|  if (sizeof (T) == 16)
  ------------------
  |  Branch (825:7): [Folded - Ignored]
  ------------------
  826|      0|  {
  827|      0|    unsigned int shift = 64;
  828|      0|    return (v >> shift) ? hb_bit_storage<uint64_t> ((uint64_t) (v >> shift)) + shift :
  ------------------
  |  Branch (828:12): [True: 0, False: 0]
  ------------------
  829|      0|			  hb_bit_storage<uint64_t> ((uint64_t) v);
  830|      0|  }
  831|       |
  832|      0|  assert (0);
  833|      0|  return 0; /* Shut up stupid compiler. */
  834|      0|}
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIjLj32EEjRAT0__KT_:
  942|  1.99k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_Zan20hb_serialize_error_tS_:
   60|    205|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZL9hb_memcpyPvPKvm:
  949|  2.83k|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  2.83k|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  2.83k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.41k, False: 1.41k]
  |  |  ------------------
  ------------------
  952|  1.41k|  return memcpy (dst, src, len);
  953|  2.83k|}
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN2OT11HBGlyphID16ELj1EEjRAT0__KT_:
  942|  4.13k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL14hb_stable_sortIN2OT11HBGlyphID16ENS0_7IntTypeItLj2EEEjEvPT_jPFiPKT0_S8_EPT1_:
 1309|  3.10k|{
 1310|  3.10k|  static_assert (hb_is_trivially_copy_assignable (T), "");
 1311|  3.10k|  static_assert (hb_is_trivially_copy_assignable (T3), "");
 1312|       |
 1313|  8.54k|  for (unsigned int i = 1; i < len; i++)
  ------------------
  |  Branch (1313:28): [True: 5.44k, False: 3.10k]
  ------------------
 1314|  5.44k|  {
 1315|  5.44k|    unsigned int j = i;
 1316|  8.06k|    while (j && compar (&array[j - 1], &array[i]) > 0)
  ------------------
  |  Branch (1316:12): [True: 7.93k, False: 135]
  |  Branch (1316:17): [True: 2.62k, False: 5.30k]
  ------------------
 1317|  2.62k|      j--;
 1318|  5.44k|    if (i == j)
  ------------------
  |  Branch (1318:9): [True: 4.94k, False: 502]
  ------------------
 1319|  4.94k|      continue;
 1320|       |    /* Move item i to occupy place for item j, shift what's in between. */
 1321|    502|    {
 1322|    502|      T t = array[i];
 1323|    502|      memmove (&array[j + 1], &array[j], (i - j) * sizeof (T));
 1324|    502|      array[j] = t;
 1325|    502|    }
 1326|    502|    if (array2)
  ------------------
  |  Branch (1326:9): [True: 502, False: 0]
  ------------------
 1327|    502|    {
 1328|    502|      T3 t = array2[i];
 1329|    502|      memmove (&array2[j + 1], &array2[j], (i - j) * sizeof (T3));
 1330|    502|      array2[j] = t;
 1331|    502|    }
 1332|    502|  }
 1333|  3.10k|}
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN16ligature_3_set_t19ligature_triplets_tELj3EEjRAT0__KT_:
  942|  1.26k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN2OT11HBGlyphID16ELj18EEjRAT0__KT_:
  942|  19.6k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN14ligature_set_t16ligature_pairs_tELj14EEjRAT0__KT_:
  942|  87.2k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIN19ligature_mark_set_t16ligature_pairs_tELj5EEjRAT0__KT_:
  942|  2.03k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_Zan25hb_buffer_scratch_flags_tS_:
   60|  1.38k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHIjLj14EEjRAT0__KT_:
  942|  10.6k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL12ARRAY_LENGTHI15hb_glyph_info_tLj32EEjRAT0__KT_:
  942|    101|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-arabic.cc:_ZL11hb_in_rangeIhEbT_S0_S0_:
  981|  28.9k|{
  982|  28.9k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  28.9k|  return (T)(u - lo) <= (T)(hi - lo);
  987|  28.9k|}
hb-ot-shaper-hangul.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|  35.4k|{
  982|  35.4k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  35.4k|  return (T)(u - lo) <= (T)(hi - lo);
  987|  35.4k|}
hb-ot-shaper-hangul.cc:_Zor16hb_glyph_flags_tS_:
   59|    184|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-hangul.cc:_Zan17hb_buffer_flags_tS_:
   60|     98|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-hangul.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|  9.16k|{
  996|  9.16k|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 409, False: 8.75k]
  |  Branch (996:42): [True: 26, False: 8.72k]
  ------------------
  997|  9.16k|}
hb-ot-shaper-hangul.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|  8.75k|{
  991|  8.75k|  return hb_in_range (u, lo1, hi1);
  992|  8.75k|}
hb-ot-shaper-hebrew.cc:_ZNK3$_6clI15hb_glyph_info_tEEvRT_S3_:
  604|      7|  {
  605|      7|    using std::swap; // allow ADL
  606|      7|    swap (a, b);
  607|      7|  }
hb-ot-shaper-indic.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  42.5k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shaper-indic.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  42.5k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-indic.cc:_Zor16hb_glyph_flags_tS_:
   59|  2.47M|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-indic.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|  5.27k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-indic.cc:_ZNK3$_6clI15hb_glyph_info_tEEvRT_S3_:
  604|      3|  {
  605|      3|    using std::swap; // allow ADL
  606|      3|    swap (a, b);
  607|      3|  }
hb-ot-shaper-indic.cc:_ZL14hb_stable_sortI15hb_glyph_info_tS0_iEvPT_jPFiPKT0_S5_EPT1_:
 1309|   329k|{
 1310|   329k|  static_assert (hb_is_trivially_copy_assignable (T), "");
 1311|   329k|  static_assert (hb_is_trivially_copy_assignable (T3), "");
 1312|       |
 1313|   737k|  for (unsigned int i = 1; i < len; i++)
  ------------------
  |  Branch (1313:28): [True: 408k, False: 329k]
  ------------------
 1314|   408k|  {
 1315|   408k|    unsigned int j = i;
 1316|  5.64M|    while (j && compar (&array[j - 1], &array[i]) > 0)
  ------------------
  |  Branch (1316:12): [True: 5.64M, False: 159]
  |  Branch (1316:17): [True: 5.23M, False: 407k]
  ------------------
 1317|  5.23M|      j--;
 1318|   408k|    if (i == j)
  ------------------
  |  Branch (1318:9): [True: 399k, False: 8.93k]
  ------------------
 1319|   399k|      continue;
 1320|       |    /* Move item i to occupy place for item j, shift what's in between. */
 1321|  8.93k|    {
 1322|  8.93k|      T t = array[i];
 1323|  8.93k|      memmove (&array[j + 1], &array[j], (i - j) * sizeof (T));
 1324|  8.93k|      array[j] = t;
 1325|  8.93k|    }
 1326|  8.93k|    if (array2)
  ------------------
  |  Branch (1326:9): [True: 0, False: 8.93k]
  ------------------
 1327|      0|    {
 1328|      0|      T3 t = array2[i];
 1329|      0|      memmove (&array2[j + 1], &array2[j], (i - j) * sizeof (T3));
 1330|      0|      array2[j] = t;
 1331|      0|    }
 1332|  8.93k|  }
 1333|   329k|}
hb-ot-shaper-indic.cc:_Zco32hb_ot_layout_glyph_props_flags_t:
   62|  1.58k|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-shaper-indic.cc:_Zor32hb_ot_layout_glyph_props_flags_tS_:
   59|  1.58k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-indic.cc:_ZL12ARRAY_LENGTHI14indic_config_tLj10EEjRAT0__KT_:
  942|  15.0k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-indic.cc:_ZL12ARRAY_LENGTHIjLj17EEjRAT0__KT_:
  942|  47.3k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-indic.cc:_Zan25hb_ot_map_feature_flags_tS_:
   60|  44.7k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-khmer.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  6.99k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shaper-khmer.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  6.99k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-khmer.cc:_Zor16hb_glyph_flags_tS_:
   59|   145k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-khmer.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|    786|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-khmer.cc:_ZL12ARRAY_LENGTHIjLj9EEjRAT0__KT_:
  942|  2.61k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-khmer.cc:_Zan25hb_ot_map_feature_flags_tS_:
   60|  2.34k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-myanmar.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  10.4k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shaper-myanmar.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  10.4k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-myanmar.cc:_Zor16hb_glyph_flags_tS_:
   59|   219k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-myanmar.cc:_ZL12ARRAY_LENGTHIjLj4EEjRAT0__KT_:
  942|  4.55k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-myanmar.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|  6.37k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-syllabic.cc:_Zan17hb_buffer_flags_tS_:
   60|  5.07k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-syllabic.cc:_Zan25hb_buffer_scratch_flags_tS_:
   60|  5.07k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-thai.cc:_Zco24hb_unicode_props_flags_t:
   62|    219|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-shaper-thai.cc:_ZL12hb_in_rangesIjJjjjjjjEEbT_S0_S0_DpT0_:
  995|    275|{
  996|    275|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 34, False: 241]
  |  Branch (996:42): [True: 38, False: 203]
  ------------------
  997|    275|}
hb-ot-shaper-thai.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|  20.0k|{
  982|  20.0k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  20.0k|  return (T)(u - lo) <= (T)(hi - lo);
  987|  20.0k|}
hb-ot-shaper-thai.cc:_ZL12hb_in_rangesIjJjjjjEEbT_S0_S0_DpT0_:
  995|    241|{
  996|    241|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 10, False: 231]
  |  Branch (996:42): [True: 28, False: 203]
  ------------------
  997|    241|}
hb-ot-shaper-thai.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|    231|{
  996|    231|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 20, False: 211]
  |  Branch (996:42): [True: 8, False: 203]
  ------------------
  997|    231|}
hb-ot-shaper-thai.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|    211|{
  991|    211|  return hb_in_range (u, lo1, hi1);
  992|    211|}
hb-ot-shaper-thai.cc:_Zor16hb_glyph_flags_tS_:
   59|    553|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
_ZN9hb_pair_tIjR15hb_glyph_info_tEcvS_IT_T0_EIjRKS0_LPv0EEEv:
  628|  6.86M|  operator hb_pair_t<Q1, Q2> () { return hb_pair_t<Q1, Q2> (first, second); }
_ZN9hb_pair_tIjRK15hb_glyph_info_tEC2EjS2_:
  623|  6.86M|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
hb-ot-shaper-use.cc:_ZNK4$_28clIRKjEEN18hb_match_referenceIT_E4typeEOS4_:
  245|  43.1M|  operator () (T&& v) const { return v; }
_ZN9hb_pair_tIjR15hb_glyph_info_tEC2EjS1_:
  623|  28.5M|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
hb-ot-shaper-use.cc:_ZNK4$_31clI9hb_pair_tIjR15hb_glyph_info_tEEENT_8second_tERKS5_:
  677|  7.15M|  operator () (const Pair& pair) const { return pair.second; }
_ZN9hb_pair_tIjS_IjR15hb_glyph_info_tEEC2EjS2_:
  623|  14.5M|  hb_pair_t (T1 a, T2 b) : first (std::forward<T1> (a)), second (std::forward<T2> (b)) {}
hb-ot-shaper-use.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  38.8k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shaper-use.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  38.8k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-use.cc:_Zor16hb_glyph_flags_tS_:
   59|   952k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-use.cc:_Zor25hb_ot_map_feature_flags_tS_:
   59|  47.8k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shaper-use.cc:_Zco32hb_ot_layout_glyph_props_flags_t:
   62|  2.27M|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-shaper-use.cc:_ZL12ARRAY_LENGTHIjLj7EEjRAT0__KT_:
  942|  14.1k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-use.cc:_ZL12ARRAY_LENGTHIjLj4EEjRAT0__KT_:
  942|  8.86k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-use.cc:_ZL12ARRAY_LENGTHIjLj5EEjRAT0__KT_:
  942|  10.6k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ot-shaper-vowel-constraints.cc:_Zan17hb_buffer_flags_tS_:
   60|  4.39k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shaper-vowel-constraints.cc:_Zco24hb_unicode_props_flags_t:
   62|    760|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ot-shape-fallback.cc:_Zor16hb_glyph_flags_tS_:
   59|  9.71k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shape-fallback.cc:_ZL9hb_memsetPvij:
  967|   716k|{
  968|       |  /* It's illegal to pass NULL to memset(), even if n is zero. */
  969|   716k|  if (unlikely (!n)) return 0;
  ------------------
  |  |  259|   716k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 716k]
  |  |  ------------------
  ------------------
  970|   716k|  return memset (s, c, n);
  971|   716k|}
hb-ot-shape-normalize.cc:_ZoRR25hb_buffer_scratch_flags_tS_:
   63|  4.06k|	  static inline T& operator |= (T &l, T r) { l = l | r; return l; } \
hb-ot-shape-normalize.cc:_Zor25hb_buffer_scratch_flags_tS_:
   59|  4.06k|	  static inline constexpr T operator | (T l, T r) { return T ((unsigned) l | (unsigned) r); } \
hb-ot-shape-normalize.cc:_ZL12hb_in_rangesIjJjjEEbT_S0_S0_DpT0_:
  995|  43.9k|{
  996|  43.9k|  return hb_in_range<T> (u, lo1, hi1) || hb_in_ranges<T> (u, ds...);
  ------------------
  |  Branch (996:10): [True: 1.87k, False: 42.0k]
  |  Branch (996:42): [True: 600, False: 41.4k]
  ------------------
  997|  43.9k|}
hb-ot-shape-normalize.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|  85.9k|{
  982|  85.9k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|  85.9k|  return (T)(u - lo) <= (T)(hi - lo);
  987|  85.9k|}
hb-ot-shape-normalize.cc:_ZL12hb_in_rangesIjEbT_S0_S0_:
  990|  42.0k|{
  991|  42.0k|  return hb_in_range (u, lo1, hi1);
  992|  42.0k|}
hb-ot-shape-normalize.cc:_Zan25hb_buffer_scratch_flags_tS_:
   60|   565k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-ot-shape-normalize.cc:_Zco24hb_unicode_props_flags_t:
   62|    289|	  static inline constexpr unsigned operator ~ (T r) { return (~(unsigned) r); } \
hb-ucd.cc:_ZL10hb_bsearchIKjjEPT_RKT0_S2_mmPFiPKvS7_E:
 1072|  1.25k|{
 1073|  1.25k|  unsigned pos;
 1074|  1.25k|#pragma GCC diagnostic push
 1075|  1.25k|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|  1.25k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 475, False: 783]
  ------------------
 1077|    783|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|  1.25k|#pragma GCC diagnostic pop
 1079|  1.25k|}
hb-ucd.cc:_ZL15hb_bsearch_implIKjjJEEbPjRKT0_PT_mmPFiPKvS8_DpT1_ESA_:
 1041|  1.25k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  1.25k|  int min = 0, max = (int) nmemb - 1;
 1045|  12.2k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 11.4k, False: 783]
  ------------------
 1046|  11.4k|  {
 1047|  11.4k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|  11.4k|#pragma GCC diagnostic push
 1049|  11.4k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|  11.4k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|  11.4k|#pragma GCC diagnostic pop
 1052|  11.4k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|  11.4k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 5.62k, False: 5.86k]
  ------------------
 1054|  5.62k|      max = mid - 1;
 1055|  5.86k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 5.38k, False: 475]
  ------------------
 1056|  5.38k|      min = mid + 1;
 1057|    475|    else
 1058|    475|    {
 1059|    475|      *pos = mid;
 1060|    475|      return true;
 1061|    475|    }
 1062|  11.4k|  }
 1063|    783|  *pos = min;
 1064|    783|  return false;
 1065|  1.25k|}
hb-ucd.cc:_ZL12ARRAY_LENGTHIjLj638EEjRAT0__KT_:
  942|  45.0k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ucd.cc:_ZL10hb_bsearchIKmmEPT_RKT0_S2_mmPFiPKvS7_E:
 1072|  18.9k|{
 1073|  18.9k|  unsigned pos;
 1074|  18.9k|#pragma GCC diagnostic push
 1075|  18.9k|#pragma GCC diagnostic ignored "-Wcast-align"
 1076|  18.9k|  return hb_bsearch_impl (&pos, key, base, nmemb, stride, compar) ?
  ------------------
  |  Branch (1076:10): [True: 589, False: 18.3k]
  ------------------
 1077|  18.3k|	 (V*) (((const char *) base) + (pos * stride)) : nullptr;
 1078|  18.9k|#pragma GCC diagnostic pop
 1079|  18.9k|}
hb-ucd.cc:_ZL15hb_bsearch_implIKmmJEEbPjRKT0_PT_mmPFiPKvS8_DpT1_ESA_:
 1041|  18.9k|{
 1042|       |  /* This is our *only* bsearch implementation. */
 1043|       |
 1044|  18.9k|  int min = 0, max = (int) nmemb - 1;
 1045|   183k|  while (min <= max)
  ------------------
  |  Branch (1045:10): [True: 165k, False: 18.3k]
  ------------------
 1046|   165k|  {
 1047|   165k|    int mid = ((unsigned int) min + (unsigned int) max) / 2;
 1048|   165k|#pragma GCC diagnostic push
 1049|   165k|#pragma GCC diagnostic ignored "-Wcast-align"
 1050|   165k|    V* p = (V*) (((const char *) base) + (mid * stride));
 1051|   165k|#pragma GCC diagnostic pop
 1052|   165k|    int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
 1053|   165k|    if (c < 0)
  ------------------
  |  Branch (1053:9): [True: 64.2k, False: 101k]
  ------------------
 1054|  64.2k|      max = mid - 1;
 1055|   101k|    else if (c > 0)
  ------------------
  |  Branch (1055:14): [True: 100k, False: 589]
  ------------------
 1056|   100k|      min = mid + 1;
 1057|    589|    else
 1058|    589|    {
 1059|    589|      *pos = mid;
 1060|    589|      return true;
 1061|    589|    }
 1062|   165k|  }
 1063|  18.3k|  *pos = min;
 1064|  18.3k|  return false;
 1065|  18.9k|}
hb-ucd.cc:_ZL12ARRAY_LENGTHImLj388EEjRAT0__KT_:
  942|  18.9k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ucd.cc:_ZL12ARRAY_LENGTHItLj825EEjRAT0__KT_:
  942|  84.9k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-ucd.cc:_ZL12ARRAY_LENGTHItLj110EEjRAT0__KT_:
  942|  84.1k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-buffer-serialize.cc:_Zan27hb_buffer_serialize_flags_tS_:
   60|  14.5k|	  static inline constexpr T operator & (T l, T r) { return T ((unsigned) l & (unsigned) r); } \
hb-buffer-serialize.cc:_ZL12ARRAY_LENGTHIcLj1024EEjRAT0__KT_:
  942|  14.5k|static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
hb-buffer-serialize.cc:_ZL9hb_memcpyPvPKvm:
  949|  14.5k|{
  950|       |  /* It's illegal to pass 0 as size to memcpy. */
  951|  14.5k|  if (unlikely (!len)) return dst;
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
  952|  14.5k|  return memcpy (dst, src, len);
  953|  14.5k|}
hb-ot-shaper-indic-table.cc:_ZL11hb_in_rangeIjEbT_S0_S0_:
  981|   111k|{
  982|   111k|  static_assert (!std::is_signed<T>::value, "");
  983|       |
  984|       |  /* The casts below are important as if T is smaller than int,
  985|       |   * the subtract results will become a signed int! */
  986|   111k|  return (T)(u - lo) <= (T)(hi - lo);
  987|   111k|}

_Z8hb_arrayIKN2OT7IntTypeIsLj2EEEE10hb_array_tIT_EPS5_j:
  316|  79.5k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT7IntTypeIsLj2EEEEC2EPS3_j:
   59|  79.5k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT7IntTypeIsLj2EEEE11__item_at__Ej:
   79|  53.5k|  {
   80|  53.5k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  53.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.2k, False: 43.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|  10.2k|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  43.2k|    return arrayZ[i];
   82|  53.5k|  }
_ZNK10hb_array_tIKN3AAT11FeatureNameEE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tI28hb_aat_layout_feature_type_tE11__item_at__Ej:
   79|     18|  {
   80|     18|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     18|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     18|    return arrayZ[i];
   82|     18|  }
_ZN10hb_array_tI28hb_aat_layout_feature_type_tE11__forward__Ej:
   84|     18|  {
   85|     18|    if (unlikely (n > length))
  ------------------
  |  |  259|     18|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|     18|    length -= n;
   88|     18|    backwards_length += n;
   89|     18|    arrayZ += n;
   90|     18|  }
_ZNK10hb_array_tIKN3AAT11FeatureNameEE11__item_at__Ej:
   79|     18|  {
   80|     18|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     18|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     18|    return arrayZ[i];
   82|     18|  }
_ZN10hb_array_tIKN3AAT11FeatureNameEE11__forward__Ej:
   84|     18|  {
   85|     18|    if (unlikely (n > length))
  ------------------
  |  |  259|     18|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|     18|    length -= n;
   88|     18|    backwards_length += n;
   89|     18|    arrayZ += n;
   90|     18|  }
_Z15hb_sorted_arrayIKN3AAT11FeatureNameEE17hb_sorted_array_tIT_EPS4_j:
  427|   100k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN3AAT11FeatureNameEEC2EPS2_j:
  337|   100k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN3AAT11FeatureNameEEC2EPS2_j:
   59|   133k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIKN3AAT11FeatureNameEE9sub_arrayEjPj:
  363|  33.3k|  { return hb_sorted_array_t (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
_ZNK10hb_array_tIKN3AAT11FeatureNameEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 0]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_ZN17hb_sorted_array_tIKN3AAT11FeatureNameEEC2IS2_LPv0EEERK10hb_array_tIT_E:
  345|  33.3k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_Z8hb_arrayI28hb_aat_layout_feature_type_tE10hb_array_tIT_EPS2_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tI28hb_aat_layout_feature_type_tEC2EPS0_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN3AAT11FeatureNameEE7bsearchI28hb_aat_layout_feature_type_tEEPS2_RKT_S6_:
  371|  66.6k|  {
  372|  66.6k|    unsigned int i;
  373|  66.6k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 5, False: 66.6k]
  ------------------
  374|  66.6k|  }
_ZNK17hb_sorted_array_tIKN3AAT11FeatureNameEE5bfindI28hb_aat_layout_feature_type_tEEbRKT_Pj14hb_not_found_tj:
  385|  66.6k|  {
  386|  66.6k|    unsigned pos;
  387|       |
  388|  66.6k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 5, False: 66.6k]
  ------------------
  389|      5|    {
  390|      5|      if (i)
  ------------------
  |  Branch (390:11): [True: 5, False: 0]
  ------------------
  391|      5|	*i = pos;
  392|      5|      return true;
  393|      5|    }
  394|       |
  395|  66.6k|    if (i)
  ------------------
  |  Branch (395:9): [True: 66.6k, False: 0]
  ------------------
  396|  66.6k|    {
  397|  66.6k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 66.6k]
  ------------------
  398|  66.6k|      {
  399|  66.6k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 66.6k, False: 0]
  ------------------
  400|  66.6k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 66.6k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 66.6k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  66.6k|      }
  410|  66.6k|    }
  411|  66.6k|    return false;
  412|  66.6k|  }
_ZNK17hb_sorted_array_tIKN3AAT11FeatureNameEE12bsearch_implI28hb_aat_layout_feature_type_tJEEEbRKT_PjDpT0_:
  415|  66.6k|  {
  416|  66.6k|    return hb_bsearch_impl (pos,
  417|  66.6k|			    x,
  418|  66.6k|			    this->arrayZ,
  419|  66.6k|			    this->length,
  420|  66.6k|			    sizeof (Type),
  421|  66.6k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  66.6k|			    std::forward<Ts> (ds)...);
  423|  66.6k|  }
_Z8hb_arrayIKN3AAT11SettingNameEE10hb_array_tIT_EPS4_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN3AAT11SettingNameEEC2EPS2_j:
   59|  66.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN3AAT11SettingNameEE11__item_at__Ej:
   79|      5|  {
   80|      5|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|      5|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 3]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      2|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|      3|    return arrayZ[i];
   82|      5|  }
_ZNK10hb_array_tIKN3AAT11SettingNameEE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tI37hb_aat_layout_feature_selector_info_tE11__item_at__Ej:
   79|      2|  {
   80|      2|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|      2|    return arrayZ[i];
   82|      2|  }
_ZN10hb_array_tI37hb_aat_layout_feature_selector_info_tE11__forward__Ej:
   84|      2|  {
   85|      2|    if (unlikely (n > length))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|      2|    length -= n;
   88|      2|    backwards_length += n;
   89|      2|    arrayZ += n;
   90|      2|  }
_ZN10hb_array_tIKN3AAT11SettingNameEE11__forward__Ej:
   84|      2|  {
   85|      2|    if (unlikely (n > length))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|      2|    length -= n;
   88|      2|    backwards_length += n;
   89|      2|    arrayZ += n;
   90|      2|  }
_ZNK10hb_array_tIKN3AAT11SettingNameEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 0]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_Z8hb_arrayI37hb_aat_layout_feature_selector_info_tE10hb_array_tIT_EPS2_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tI37hb_aat_layout_feature_selector_info_tEC2EPS0_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKcEC2EPS0_j:
   59|  30.7M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT4GDEFELj1ELPv0EEEPKT_v:
  257|  1.71M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  1.71M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   839k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 839k, False: 871k]
  ------------------
_ZNK10hb_array_tIKN3AAT7FeatureEEadEv:
  117|  19.5k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN3AAT7FeatureEE8get_sizeEv:
  217|  19.5k|  unsigned int get_size () const { return length * this->get_item_size (); }
_Z8hb_arrayIKN3AAT7FeatureEE10hb_array_tIT_EPS4_j:
  316|  19.5k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN3AAT7FeatureEEC2EPS2_j:
   59|  19.5k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z8hb_arrayIN20hb_aat_map_builder_t14feature_info_tEE10hb_array_tIT_EPS3_j:
  316|   805k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN20hb_aat_map_builder_t14feature_info_tEEC2EPS1_j:
   59|   805k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN20hb_aat_map_builder_t14feature_info_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|   794k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN20hb_aat_map_builder_t14feature_info_tEEC2IS1_LPv0EEERKS_IT_E:
   67|   794k|    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
_ZN17hb_sorted_array_tIKN20hb_aat_map_builder_t14feature_info_tEE7bsearchIS1_EEPS2_RKT_S5_:
  371|   784k|  {
  372|   784k|    unsigned int i;
  373|   784k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 0, False: 784k]
  ------------------
  374|   784k|  }
_ZNK17hb_sorted_array_tIKN20hb_aat_map_builder_t14feature_info_tEE5bfindIS1_EEbRKT_Pj14hb_not_found_tj:
  385|   784k|  {
  386|   784k|    unsigned pos;
  387|       |
  388|   784k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 0, False: 784k]
  ------------------
  389|      0|    {
  390|      0|      if (i)
  ------------------
  |  Branch (390:11): [True: 0, False: 0]
  ------------------
  391|      0|	*i = pos;
  392|      0|      return true;
  393|      0|    }
  394|       |
  395|   784k|    if (i)
  ------------------
  |  Branch (395:9): [True: 784k, False: 0]
  ------------------
  396|   784k|    {
  397|   784k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 784k]
  ------------------
  398|   784k|      {
  399|   784k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 784k, False: 0]
  ------------------
  400|   784k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 784k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 784k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   784k|      }
  410|   784k|    }
  411|   784k|    return false;
  412|   784k|  }
_ZNK17hb_sorted_array_tIKN20hb_aat_map_builder_t14feature_info_tEE12bsearch_implIS1_JEEEbRKT_PjDpT0_:
  415|   784k|  {
  416|   784k|    return hb_bsearch_impl (pos,
  417|   784k|			    x,
  418|   784k|			    this->arrayZ,
  419|   784k|			    this->length,
  420|   784k|			    sizeof (Type),
  421|   784k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   784k|			    std::forward<Ts> (ds)...);
  423|   784k|  }
_ZNK10hb_array_tIKcE2asIN3AAT4ltagELj1ELPv0EEEPKT_v:
  257|   507k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   507k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   471k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 471k, False: 36.3k]
  ------------------
_ZNK10hb_array_tIKcE2asIN3AAT4morxELj1ELPv0EEEPKT_v:
  257|  71.0k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  71.0k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  58.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 58.7k, False: 12.3k]
  ------------------
_ZNK10hb_array_tIKN12hb_aat_map_t13range_flags_tEE7__len__Ev:
   99|  30.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tIKN12hb_aat_map_t13range_flags_tEE11__item_at__Ej:
   79|  26.2k|  {
   80|  26.2k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  26.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 26.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  26.2k|    return arrayZ[i];
   82|  26.2k|  }
_ZN10hb_array_tIKN12hb_aat_map_t13range_flags_tEE11__forward__Ej:
   84|    614|  {
   85|    614|    if (unlikely (n > length))
  ------------------
  |  |  259|    614|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 614]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|    614|    length -= n;
   88|    614|    backwards_length += n;
   89|    614|    arrayZ += n;
   90|    614|  }
_Z8hb_arrayIN12hb_aat_map_t13range_flags_tEE10hb_array_tIT_EPS3_j:
  316|  29.6k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN12hb_aat_map_t13range_flags_tEEC2EPS1_j:
   59|  29.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  29.6k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN12hb_aat_map_t13range_flags_tEEC2IS1_LPv0EEERKS_IT_E:
   67|  29.6k|    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
_ZN10hb_array_tI15hb_glyph_info_tEC2EPS0_j:
   59|  37.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tI15hb_glyph_info_tE7reverseEjj:
  223|  35.6k|  {
  224|  35.6k|    start = hb_min (start, length);
  225|  35.6k|    end = hb_min (end, length);
  226|       |
  227|  35.6k|    if (end < start + 2)
  ------------------
  |  Branch (227:9): [True: 24.0k, False: 11.5k]
  ------------------
  228|  24.0k|      return;
  229|       |
  230|  3.32M|    for (unsigned lhs = start, rhs = end - 1; lhs < rhs; lhs++, rhs--)
  ------------------
  |  Branch (230:47): [True: 3.30M, False: 11.5k]
  ------------------
  231|  3.30M|      hb_swap (arrayZ[rhs], arrayZ[lhs]);
  232|  11.5k|  }
_ZN10hb_array_tI19hb_glyph_position_tEC2EPS0_j:
   59|  5.67k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tI19hb_glyph_position_tE7reverseEjj:
  223|  5.67k|  {
  224|  5.67k|    start = hb_min (start, length);
  225|  5.67k|    end = hb_min (end, length);
  226|       |
  227|  5.67k|    if (end < start + 2)
  ------------------
  |  Branch (227:9): [True: 1.36k, False: 4.31k]
  ------------------
  228|  1.36k|      return;
  229|       |
  230|  1.20M|    for (unsigned lhs = start, rhs = end - 1; lhs < rhs; lhs++, rhs--)
  ------------------
  |  Branch (230:47): [True: 1.20M, False: 4.31k]
  ------------------
  231|  1.20M|      hb_swap (arrayZ[rhs], arrayZ[lhs]);
  232|  4.31k|  }
_Z15hb_sorted_arrayIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE17hb_sorted_array_tIT_EPS8_j:
  427|  19.6M|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEEC2EPS6_j:
  337|  19.6M|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEEC2EPS6_j:
   59|  19.6M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE7bsearchIjEEPS6_RKT_S9_:
  371|  19.6M|  {
  372|  19.6M|    unsigned int i;
  373|  19.6M|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 13.3M, False: 6.29M]
  ------------------
  374|  19.6M|  }
_ZNK17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  19.6M|  {
  386|  19.6M|    unsigned pos;
  387|       |
  388|  19.6M|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 13.3M, False: 6.29M]
  ------------------
  389|  13.3M|    {
  390|  13.3M|      if (i)
  ------------------
  |  Branch (390:11): [True: 13.3M, False: 0]
  ------------------
  391|  13.3M|	*i = pos;
  392|  13.3M|      return true;
  393|  13.3M|    }
  394|       |
  395|  6.29M|    if (i)
  ------------------
  |  Branch (395:9): [True: 6.29M, False: 0]
  ------------------
  396|  6.29M|    {
  397|  6.29M|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 6.29M]
  ------------------
  398|  6.29M|      {
  399|  6.29M|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 6.29M, False: 0]
  ------------------
  400|  6.29M|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 6.29M]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 6.29M]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  6.29M|      }
  410|  6.29M|    }
  411|  6.29M|    return false;
  412|  6.29M|  }
_ZNK17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  19.6M|  {
  416|  19.6M|    return hb_bsearch_impl (pos,
  417|  19.6M|			    x,
  418|  19.6M|			    this->arrayZ,
  419|  19.6M|			    this->length,
  420|  19.6M|			    sizeof (Type),
  421|  19.6M|			    _hb_cmp_method<T, Type, Ts...>,
  422|  19.6M|			    std::forward<Ts> (ds)...);
  423|  19.6M|  }
_Z15hb_sorted_arrayIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE17hb_sorted_array_tIT_EPS8_j:
  427|  1.77M|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEEC2EPS6_j:
  337|  1.77M|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEEC2EPS6_j:
   59|  1.77M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE7bsearchIjEEPS6_RKT_S9_:
  371|  1.77M|  {
  372|  1.77M|    unsigned int i;
  373|  1.77M|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 1.53M, False: 237k]
  ------------------
  374|  1.77M|  }
_ZNK17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  1.77M|  {
  386|  1.77M|    unsigned pos;
  387|       |
  388|  1.77M|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 1.53M, False: 237k]
  ------------------
  389|  1.53M|    {
  390|  1.53M|      if (i)
  ------------------
  |  Branch (390:11): [True: 1.53M, False: 0]
  ------------------
  391|  1.53M|	*i = pos;
  392|  1.53M|      return true;
  393|  1.53M|    }
  394|       |
  395|   237k|    if (i)
  ------------------
  |  Branch (395:9): [True: 237k, False: 0]
  ------------------
  396|   237k|    {
  397|   237k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 237k]
  ------------------
  398|   237k|      {
  399|   237k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 237k, False: 0]
  ------------------
  400|   237k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 237k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 237k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   237k|      }
  410|   237k|    }
  411|   237k|    return false;
  412|   237k|  }
_ZNK17hb_sorted_array_tIKN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  1.77M|  {
  416|  1.77M|    return hb_bsearch_impl (pos,
  417|  1.77M|			    x,
  418|  1.77M|			    this->arrayZ,
  419|  1.77M|			    this->length,
  420|  1.77M|			    sizeof (Type),
  421|  1.77M|			    _hb_cmp_method<T, Type, Ts...>,
  422|  1.77M|			    std::forward<Ts> (ds)...);
  423|  1.77M|  }
_ZNK10hb_array_tIKcE2asIN3AAT4mortELj1ELPv0EEEPKT_v:
  257|  58.7k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  58.7k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  46.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 46.8k, False: 11.8k]
  ------------------
_ZNK10hb_array_tIKcE2asIN3AAT4kerxELj1ELPv0EEEPKT_v:
  257|  60.2k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  60.2k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  47.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 47.5k, False: 12.6k]
  ------------------
_ZNK10hb_array_tIKcE2asIN3AAT4ankrELj1ELPv0EEEPKT_v:
  257|  10.9k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  10.9k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  7.73k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 7.73k, False: 3.18k]
  ------------------
_Z15hb_sorted_arrayIKN2OT11HBGlyphID16EE17hb_sorted_array_tIT_EPS4_j:
  427|  3.20M|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT11HBGlyphID16EEC2EPS2_j:
  337|  3.20M|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT11HBGlyphID16EEC2EPS2_j:
   59|  3.22M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID16EE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  3.19M|  {
  386|  3.19M|    unsigned pos;
  387|       |
  388|  3.19M|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 1.90M, False: 1.29M]
  ------------------
  389|  1.90M|    {
  390|  1.90M|      if (i)
  ------------------
  |  Branch (390:11): [True: 1.90M, False: 0]
  ------------------
  391|  1.90M|	*i = pos;
  392|  1.90M|      return true;
  393|  1.90M|    }
  394|       |
  395|  1.29M|    if (i)
  ------------------
  |  Branch (395:9): [True: 1.29M, False: 0]
  ------------------
  396|  1.29M|    {
  397|  1.29M|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 1.29M]
  ------------------
  398|  1.29M|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 1.29M]
  ------------------
  400|      0|	  break;
  401|       |
  402|  1.29M|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 1.29M, False: 0]
  ------------------
  403|  1.29M|	  *i = to_store;
  404|  1.29M|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 1.29M]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  1.29M|      }
  410|  1.29M|    }
  411|  1.29M|    return false;
  412|  1.29M|  }
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID16EE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  3.19M|  {
  416|  3.19M|    return hb_bsearch_impl (pos,
  417|  3.19M|			    x,
  418|  3.19M|			    this->arrayZ,
  419|  3.19M|			    this->length,
  420|  3.19M|			    sizeof (Type),
  421|  3.19M|			    _hb_cmp_method<T, Type, Ts...>,
  422|  3.19M|			    std::forward<Ts> (ds)...);
  423|  3.19M|  }
_Z15hb_sorted_arrayIKN2OT11HBGlyphID24EE17hb_sorted_array_tIT_EPS4_j:
  427|   382k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT11HBGlyphID24EEC2EPS2_j:
  337|   382k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT11HBGlyphID24EEC2EPS2_j:
   59|   382k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID24EE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   379k|  {
  386|   379k|    unsigned pos;
  387|       |
  388|   379k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 290k, False: 89.5k]
  ------------------
  389|   290k|    {
  390|   290k|      if (i)
  ------------------
  |  Branch (390:11): [True: 290k, False: 0]
  ------------------
  391|   290k|	*i = pos;
  392|   290k|      return true;
  393|   290k|    }
  394|       |
  395|  89.5k|    if (i)
  ------------------
  |  Branch (395:9): [True: 89.5k, False: 0]
  ------------------
  396|  89.5k|    {
  397|  89.5k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 89.5k]
  ------------------
  398|  89.5k|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 89.5k]
  ------------------
  400|      0|	  break;
  401|       |
  402|  89.5k|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 89.5k, False: 0]
  ------------------
  403|  89.5k|	  *i = to_store;
  404|  89.5k|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 89.5k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  89.5k|      }
  410|  89.5k|    }
  411|  89.5k|    return false;
  412|  89.5k|  }
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID24EE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   379k|  {
  416|   379k|    return hb_bsearch_impl (pos,
  417|   379k|			    x,
  418|   379k|			    this->arrayZ,
  419|   379k|			    this->length,
  420|   379k|			    sizeof (Type),
  421|   379k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   379k|			    std::forward<Ts> (ds)...);
  423|   379k|  }
_Z15hb_sorted_arrayIKN3AAT8KernPairEE17hb_sorted_array_tIT_EPS4_j:
  427|   207k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN3AAT8KernPairEEC2EPS2_j:
  337|   207k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN3AAT8KernPairEEC2EPS2_j:
   59|   207k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN3AAT8KernPairEE7bsearchINS0_15hb_glyph_pair_tEEEPS2_RKT_S6_:
  371|   207k|  {
  372|   207k|    unsigned int i;
  373|   207k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 10.1k, False: 197k]
  ------------------
  374|   207k|  }
_ZNK17hb_sorted_array_tIKN3AAT8KernPairEE5bfindINS0_15hb_glyph_pair_tEEEbRKT_Pj14hb_not_found_tj:
  385|   207k|  {
  386|   207k|    unsigned pos;
  387|       |
  388|   207k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 10.1k, False: 197k]
  ------------------
  389|  10.1k|    {
  390|  10.1k|      if (i)
  ------------------
  |  Branch (390:11): [True: 10.1k, False: 0]
  ------------------
  391|  10.1k|	*i = pos;
  392|  10.1k|      return true;
  393|  10.1k|    }
  394|       |
  395|   197k|    if (i)
  ------------------
  |  Branch (395:9): [True: 197k, False: 0]
  ------------------
  396|   197k|    {
  397|   197k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 197k]
  ------------------
  398|   197k|      {
  399|   197k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 197k, False: 0]
  ------------------
  400|   197k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 197k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 197k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   197k|      }
  410|   197k|    }
  411|   197k|    return false;
  412|   197k|  }
_ZNK17hb_sorted_array_tIKN3AAT8KernPairEE12bsearch_implINS0_15hb_glyph_pair_tEJEEEbRKT_PjDpT0_:
  415|   207k|  {
  416|   207k|    return hb_bsearch_impl (pos,
  417|   207k|			    x,
  418|   207k|			    this->arrayZ,
  419|   207k|			    this->length,
  420|   207k|			    sizeof (Type),
  421|   207k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   207k|			    std::forward<Ts> (ds)...);
  423|   207k|  }
_ZNK10hb_array_tIKcE2asIN3AAT4trakELj1ELPv0EEEPKT_v:
  257|  49.1k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  49.1k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  47.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 47.9k, False: 1.15k]
  ------------------
_ZNK10hb_array_tIKcE2asIN3AAT4featELj1ELPv0EEEPKT_v:
  257|   100k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   100k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  99.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 99.9k, False: 60]
  ------------------
_ZNK10hb_array_tIKcEeqERKS1_:
  443|  7.26k|{
  444|  7.26k|  if (o.length != this->length) return false;
  ------------------
  |  Branch (444:7): [True: 0, False: 7.26k]
  ------------------
  445|  7.26k|  return 0 == hb_memcmp (arrayZ, o.arrayZ, length);
  446|  7.26k|}
_ZNK10hb_array_tIKcE4hashEv:
  460|  88.2k|{
  461|       |  // https://github.com/harfbuzz/harfbuzz/pull/4228
  462|  88.2k|  return fasthash32(arrayZ, length, 0xf437ffe6 /* magic? */);
  463|  88.2k|}
_Z8hb_arrayIN20hb_user_data_array_t19hb_user_data_item_tEE10hb_array_tIT_EPS3_j:
  316|  98.0k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN20hb_user_data_array_t19hb_user_data_item_tEE7lsearchIP18hb_user_data_key_tEEPS1_RKT_S6_:
  156|  63.9k|  {
  157|  63.9k|    unsigned i;
  158|  63.9k|    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (158:12): [True: 63.0k, False: 938]
  ------------------
  159|  63.9k|  }
_ZNK10hb_array_tIN20hb_user_data_array_t19hb_user_data_item_tEE5lfindIP18hb_user_data_key_tEEbRKT_Pj14hb_not_found_tj:
  170|  63.9k|  {
  171|  63.9k|    for (unsigned i = 0; i < length; ++i)
  ------------------
  |  Branch (171:26): [True: 63.0k, False: 938]
  ------------------
  172|  63.0k|      if (hb_equal (x, this->arrayZ[i]))
  ------------------
  |  Branch (172:11): [True: 63.0k, False: 0]
  ------------------
  173|  63.0k|      {
  174|  63.0k|	if (pos)
  ------------------
  |  Branch (174:6): [True: 63.0k, False: 0]
  ------------------
  175|  63.0k|	  *pos = i;
  176|  63.0k|	return true;
  177|  63.0k|      }
  178|       |
  179|    938|    if (pos)
  ------------------
  |  Branch (179:9): [True: 938, False: 0]
  ------------------
  180|    938|    {
  181|    938|      switch (not_found)
  ------------------
  |  Branch (181:15): [True: 0, False: 938]
  ------------------
  182|    938|      {
  183|    938|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (183:2): [True: 938, False: 0]
  ------------------
  184|    938|	  break;
  185|       |
  186|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (186:2): [True: 0, False: 938]
  ------------------
  187|      0|	  *pos = to_store;
  188|      0|	  break;
  189|       |
  190|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (190:2): [True: 0, False: 938]
  ------------------
  191|      0|	  *pos = length;
  192|      0|	  break;
  193|    938|      }
  194|    938|    }
  195|    938|    return false;
  196|    938|  }
_ZN10hb_array_tIN20hb_user_data_array_t19hb_user_data_item_tEE7lsearchIS1_EEPS1_RKT_S4_:
  156|  34.1k|  {
  157|  34.1k|    unsigned i;
  158|  34.1k|    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (158:12): [True: 0, False: 34.1k]
  ------------------
  159|  34.1k|  }
_ZNK10hb_array_tIN20hb_user_data_array_t19hb_user_data_item_tEE5lfindIS1_EEbRKT_Pj14hb_not_found_tj:
  170|  34.1k|  {
  171|  34.1k|    for (unsigned i = 0; i < length; ++i)
  ------------------
  |  Branch (171:26): [True: 0, False: 34.1k]
  ------------------
  172|      0|      if (hb_equal (x, this->arrayZ[i]))
  ------------------
  |  Branch (172:11): [True: 0, False: 0]
  ------------------
  173|      0|      {
  174|      0|	if (pos)
  ------------------
  |  Branch (174:6): [True: 0, False: 0]
  ------------------
  175|      0|	  *pos = i;
  176|      0|	return true;
  177|      0|      }
  178|       |
  179|  34.1k|    if (pos)
  ------------------
  |  Branch (179:9): [True: 34.1k, False: 0]
  ------------------
  180|  34.1k|    {
  181|  34.1k|      switch (not_found)
  ------------------
  |  Branch (181:15): [True: 0, False: 34.1k]
  ------------------
  182|  34.1k|      {
  183|  34.1k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (183:2): [True: 34.1k, False: 0]
  ------------------
  184|  34.1k|	  break;
  185|       |
  186|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (186:2): [True: 0, False: 34.1k]
  ------------------
  187|      0|	  *pos = to_store;
  188|      0|	  break;
  189|       |
  190|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (190:2): [True: 0, False: 34.1k]
  ------------------
  191|      0|	  *pos = length;
  192|      0|	  break;
  193|  34.1k|      }
  194|  34.1k|    }
  195|  34.1k|    return false;
  196|  34.1k|  }
_Z8hb_arrayIN11hb_ot_map_t13feature_map_tEE10hb_array_tIT_EPS3_j:
  316|   511k|{ return hb_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN11hb_ot_map_t13feature_map_tEE7bsearchIjEEPS2_RKT_S5_:
  371|   511k|  {
  372|   511k|    unsigned int i;
  373|   511k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 160k, False: 351k]
  ------------------
  374|   511k|  }
_ZNK17hb_sorted_array_tIKN11hb_ot_map_t13feature_map_tEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   511k|  {
  386|   511k|    unsigned pos;
  387|       |
  388|   511k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 160k, False: 351k]
  ------------------
  389|   160k|    {
  390|   160k|      if (i)
  ------------------
  |  Branch (390:11): [True: 160k, False: 0]
  ------------------
  391|   160k|	*i = pos;
  392|   160k|      return true;
  393|   160k|    }
  394|       |
  395|   351k|    if (i)
  ------------------
  |  Branch (395:9): [True: 351k, False: 0]
  ------------------
  396|   351k|    {
  397|   351k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 351k]
  ------------------
  398|   351k|      {
  399|   351k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 351k, False: 0]
  ------------------
  400|   351k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 351k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 351k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   351k|      }
  410|   351k|    }
  411|   351k|    return false;
  412|   351k|  }
_ZNK17hb_sorted_array_tIKN11hb_ot_map_t13feature_map_tEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   511k|  {
  416|   511k|    return hb_bsearch_impl (pos,
  417|   511k|			    x,
  418|   511k|			    this->arrayZ,
  419|   511k|			    this->length,
  420|   511k|			    sizeof (Type),
  421|   511k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   511k|			    std::forward<Ts> (ds)...);
  423|   511k|  }
_Z8hb_arrayIKN11hb_ot_map_t12lookup_map_tEE10hb_array_tIT_EPS4_j:
  316|  12.0k|{ return hb_array_t<T> (array, length); }
_Z8hb_arrayIN11hb_ot_map_t12lookup_map_tEE10hb_array_tIT_EPS3_j:
  316|  14.8k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN11hb_ot_map_t12lookup_map_tEEcvS_IKS1_EEv:
  118|  1.11k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZNK10hb_array_tIKN11hb_ot_map_t12lookup_map_tEE9sub_arrayEjj:
  249|  1.11k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN11hb_ot_map_t12lookup_map_tEE9sub_arrayEjPj:
  235|  1.11k|  {
  236|  1.11k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 447, False: 669]
  |  Branch (236:26): [True: 0, False: 447]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  1.11k|    unsigned int count = length;
  240|  1.11k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  1.11k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  1.11k|    else
  243|  1.11k|      count -= start_offset;
  244|  1.11k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 1.11k, False: 0]
  ------------------
  245|  1.11k|      count = *seg_count = hb_min (count, *seg_count);
  246|  1.11k|    return hb_array_t (arrayZ + start_offset, count);
  247|  1.11k|  }
_Z8hb_arrayIN12hb_bit_set_t10page_map_tEE10hb_array_tIT_EPS3_j:
  316|  1.36M|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIjE7__len__Ev:
   99|   985k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIjE11__forward__Ej:
   84|  3.52M|  {
   85|  3.52M|    if (unlikely (n > length))
  ------------------
  |  |  259|  3.52M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.52M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  3.52M|    length -= n;
   88|  3.52M|    backwards_length += n;
   89|  3.52M|    arrayZ += n;
   90|  3.52M|  }
_ZNK10hb_array_tIjE11__item_at__Ej:
   79|  3.52M|  {
   80|  3.52M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  3.52M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.52M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  3.52M|    return arrayZ[i];
   82|  3.52M|  }
_ZNK17hb_sorted_array_tIKN12hb_bit_set_t10page_map_tEE5bfindIS1_EEbRKT_Pj14hb_not_found_tj:
  385|  1.36M|  {
  386|  1.36M|    unsigned pos;
  387|       |
  388|  1.36M|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 486k, False: 881k]
  ------------------
  389|   486k|    {
  390|   486k|      if (i)
  ------------------
  |  Branch (390:11): [True: 486k, False: 0]
  ------------------
  391|   486k|	*i = pos;
  392|   486k|      return true;
  393|   486k|    }
  394|       |
  395|   881k|    if (i)
  ------------------
  |  Branch (395:9): [True: 881k, False: 0]
  ------------------
  396|   881k|    {
  397|   881k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 881k]
  ------------------
  398|   881k|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 881k]
  ------------------
  400|      0|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 881k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|   881k|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 881k, False: 0]
  ------------------
  407|   881k|	  *i = pos;
  408|   881k|	  break;
  409|   881k|      }
  410|   881k|    }
  411|   881k|    return false;
  412|   881k|  }
_ZNK17hb_sorted_array_tIKN12hb_bit_set_t10page_map_tEE12bsearch_implIS1_JEEEbRKT_PjDpT0_:
  415|  1.36M|  {
  416|  1.36M|    return hb_bsearch_impl (pos,
  417|  1.36M|			    x,
  418|  1.36M|			    this->arrayZ,
  419|  1.36M|			    this->length,
  420|  1.36M|			    sizeof (Type),
  421|  1.36M|			    _hb_cmp_method<T, Type, Ts...>,
  422|  1.36M|			    std::forward<Ts> (ds)...);
  423|  1.36M|  }
_Z8hb_arrayIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEE10hb_array_tIT_EPS7_j:
  316|  1.71k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEEcvS_IKS5_EEv:
  118|  1.71k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZNK10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEE7__len__Ev:
   99|  3.77k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEE11__forward__Ej:
   84|  2.05k|  {
   85|  2.05k|    if (unlikely (n > length))
  ------------------
  |  |  259|  2.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  2.05k|    length -= n;
   88|  2.05k|    backwards_length += n;
   89|  2.05k|    arrayZ += n;
   90|  2.05k|  }
_ZNK10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEE11__item_at__Ej:
   79|  2.05k|  {
   80|  2.05k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  2.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  2.05k|    return arrayZ[i];
   82|  2.05k|  }
_Z8hb_arrayIPN22hb_serialize_context_t8object_tEE10hb_array_tIT_EPS4_j:
  316|  4.86k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIPN22hb_serialize_context_t8object_tEEcvS_IKS2_EEv:
  118|  4.86k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZN10hb_array_tIKPN22hb_serialize_context_t8object_tEE11__forward__Ej:
   84|  4.86k|  {
   85|  4.86k|    if (unlikely (n > length))
  ------------------
  |  |  259|  4.86k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.77k, False: 3.09k]
  |  |  ------------------
  ------------------
   86|  1.77k|      n = length;
   87|  4.86k|    length -= n;
   88|  4.86k|    backwards_length += n;
   89|  4.86k|    arrayZ += n;
   90|  4.86k|  }
_ZNK10hb_array_tIKPN22hb_serialize_context_t8object_tEE5beginEv:
  111|  4.86k|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIKPN22hb_serialize_context_t8object_tEE3endEv:
  112|  4.86k|  Type *end () const { return arrayZ + length; }
_ZNK10hb_array_tIN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_tEE5beginEv:
  111|  1.99k|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_tEE3endEv:
  112|  1.99k|  Type *end () const { return arrayZ + length; }
_ZN10hb_array_tIjEcvS_IKjEEv:
  118|  1.80k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZNK10hb_array_tIN12hb_hashmap_tIjjLb1EE6item_tEE5beginEv:
  111|  32.3k|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIN12hb_hashmap_tIjjLb1EE6item_tEE3endEv:
  112|  32.3k|  Type *end () const { return arrayZ + length; }
_ZN10hb_array_tIKjE11__forward__Ej:
   84|  5.07k|  {
   85|  5.07k|    if (unlikely (n > length))
  ------------------
  |  |  259|  5.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.07k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  5.07k|    length -= n;
   88|  5.07k|    backwards_length += n;
   89|  5.07k|    arrayZ += n;
   90|  5.07k|  }
_ZNK10hb_array_tIKjE11__item_at__Ej:
   79|  20.0k|  {
   80|  20.0k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  20.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 20.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  20.0k|    return arrayZ[i];
   82|  20.0k|  }
_Z15hb_sorted_arrayIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE17hb_sorted_array_tIT_EPS7_j:
  427|     66|{ return hb_sorted_array_t<T> (array, length); }
_ZN10hb_array_tIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE5qsortEPFiPKvS8_E:
  199|     66|  {
  200|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  201|     66|    if (likely (length))
  ------------------
  |  |  258|     66|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 66, False: 0]
  |  |  ------------------
  ------------------
  202|     66|      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
  203|     66|    return hb_sorted_array_t<Type> (*this);
  204|     66|  }
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID16EE5beginEv:
  358|    756|  Type *begin () const { return this->arrayZ; }
_ZNK17hb_sorted_array_tIKN2OT11HBGlyphID16EE3endEv:
  359|    756|  Type *end () const { return this->arrayZ + this->length; }
_ZNK10hb_array_tIKN2OT5IndexEE7__len__Ev:
   99|  2.87M|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT5IndexEE11__forward__Ej:
   84|  2.54M|  {
   85|  2.54M|    if (unlikely (n > length))
  ------------------
  |  |  259|  2.54M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.54M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  2.54M|    length -= n;
   88|  2.54M|    backwards_length += n;
   89|  2.54M|    arrayZ += n;
   90|  2.54M|  }
_ZNK10hb_array_tIKN2OT5IndexEE11__item_at__Ej:
   79|  2.54M|  {
   80|  2.54M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  2.54M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 123, False: 2.54M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|    123|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  2.54M|    return arrayZ[i];
   82|  2.54M|  }
_Z8hb_arrayIKN2OT5IndexEE10hb_array_tIT_EPS4_j:
  316|   327k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT5IndexEE9sub_arrayEjPj:
  235|   327k|  {
  236|   327k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 251k, False: 75.4k]
  |  Branch (236:26): [True: 0, False: 251k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|   327k|    unsigned int count = length;
  240|   327k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|   327k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 327k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|   327k|    else
  243|   327k|      count -= start_offset;
  244|   327k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 327k, False: 0]
  ------------------
  245|   327k|      count = *seg_count = hb_min (count, *seg_count);
  246|   327k|    return hb_array_t (arrayZ + start_offset, count);
  247|   327k|  }
_Z8hb_arrayIjE10hb_array_tIT_EPS1_j:
  316|   390k|{ return hb_array_t<T> (array, length); }
_Z8hb_arrayIKN2OT7IntTypeIjLj3EEEE10hb_array_tIT_EPS5_j:
  316|  62.9k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj3EEEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 0]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj3EEEE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT7IntTypeIjLj3EEEE11__forward__Ej:
   84|      1|  {
   85|      1|    if (unlikely (n > length))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|      1|    length -= n;
   88|      1|    backwards_length += n;
   89|      1|    arrayZ += n;
   90|      1|  }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj3EEEE11__item_at__Ej:
   79|      1|  {
   80|      1|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|      1|    return arrayZ[i];
   82|      1|  }
_Z15hb_sorted_arrayIKN2OT6RecordINS0_7LangSysEEEE17hb_sorted_array_tIT_EPS6_j:
  427|  98.6k|{ return hb_sorted_array_t<T> (array, length); }
_ZNK17hb_sorted_array_tIKN2OT6RecordINS0_7LangSysEEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  98.6k|  {
  386|  98.6k|    unsigned pos;
  387|       |
  388|  98.6k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 54, False: 98.5k]
  ------------------
  389|     54|    {
  390|     54|      if (i)
  ------------------
  |  Branch (390:11): [True: 54, False: 0]
  ------------------
  391|     54|	*i = pos;
  392|     54|      return true;
  393|     54|    }
  394|       |
  395|  98.5k|    if (i)
  ------------------
  |  Branch (395:9): [True: 98.5k, False: 0]
  ------------------
  396|  98.5k|    {
  397|  98.5k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 98.5k]
  ------------------
  398|  98.5k|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 98.5k]
  ------------------
  400|      0|	  break;
  401|       |
  402|  98.5k|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 98.5k, False: 0]
  ------------------
  403|  98.5k|	  *i = to_store;
  404|  98.5k|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 98.5k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  98.5k|      }
  410|  98.5k|    }
  411|  98.5k|    return false;
  412|  98.5k|  }
_ZNK17hb_sorted_array_tIKN2OT6RecordINS0_7LangSysEEEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  98.6k|  {
  416|  98.6k|    return hb_bsearch_impl (pos,
  417|  98.6k|			    x,
  418|  98.6k|			    this->arrayZ,
  419|  98.6k|			    this->length,
  420|  98.6k|			    sizeof (Type),
  421|  98.6k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  98.6k|			    std::forward<Ts> (ds)...);
  423|  98.6k|  }
_Z15hb_sorted_arrayIKN2OT6RecordINS0_6ScriptEEEE17hb_sorted_array_tIT_EPS6_j:
  427|   385k|{ return hb_sorted_array_t<T> (array, length); }
_Z8hb_arrayIKN2OT7IntTypeItLj2EEEE10hb_array_tIT_EPS5_j:
  316|  1.88M|{ return hb_array_t<T> (array, length); }
_Z8hb_arrayIiE10hb_array_tIT_EPS1_j:
  316|   216k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIiE11__item_at__Ej:
   79|   110k|  {
   80|   110k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|   110k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 45.9k, False: 65.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|  45.9k|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  65.0k|    return arrayZ[i];
   82|   110k|  }
_ZNK10hb_array_tIKN2OT11HBGlyphID16EEadEv:
  117|  6.04k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT11HBGlyphID16EE7__len__Ev:
   99|  22.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tIKN2OT11HBGlyphID24EEadEv:
  117|  2.28k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT11HBGlyphID24EE7__len__Ev:
   99|  2.28k|  unsigned __len__ () const { return length; }
_Z8hb_arrayIKN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSA_j:
  316|   200k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEEEadEv:
  117|   200k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEEE8get_sizeEv:
  217|   200k|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE7__len__Ev:
   99|   196M|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE11__forward__Ej:
   84|   177M|  {
   85|   177M|    if (unlikely (n > length))
  ------------------
  |  |  259|   177M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 177M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|   177M|    length -= n;
   88|   177M|    backwards_length += n;
   89|   177M|    arrayZ += n;
   90|   177M|  }
_ZNK10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE11__item_at__Ej:
   79|   182M|  {
   80|   182M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|   182M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 182M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|   182M|    return arrayZ[i];
   82|   182M|  }
_ZNK17hb_sorted_array_tIKN2OT6RecordINS0_6ScriptEEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   385k|  {
  386|   385k|    unsigned pos;
  387|       |
  388|   385k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 13.3k, False: 371k]
  ------------------
  389|  13.3k|    {
  390|  13.3k|      if (i)
  ------------------
  |  Branch (390:11): [True: 13.3k, False: 0]
  ------------------
  391|  13.3k|	*i = pos;
  392|  13.3k|      return true;
  393|  13.3k|    }
  394|       |
  395|   371k|    if (i)
  ------------------
  |  Branch (395:9): [True: 371k, False: 0]
  ------------------
  396|   371k|    {
  397|   371k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 371k]
  ------------------
  398|   371k|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 371k]
  ------------------
  400|      0|	  break;
  401|       |
  402|   371k|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 371k, False: 0]
  ------------------
  403|   371k|	  *i = to_store;
  404|   371k|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 371k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   371k|      }
  410|   371k|    }
  411|   371k|    return false;
  412|   371k|  }
_ZNK17hb_sorted_array_tIKN2OT6RecordINS0_6ScriptEEEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   385k|  {
  416|   385k|    return hb_bsearch_impl (pos,
  417|   385k|			    x,
  418|   385k|			    this->arrayZ,
  419|   385k|			    this->length,
  420|   385k|			    sizeof (Type),
  421|   385k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   385k|			    std::forward<Ts> (ds)...);
  423|   385k|  }
_ZNK10hb_array_tIKN2OT7IntTypeItLj2EEEEadEv:
  117|  1.88M|  Type * operator & () const { return arrayZ; }
_Z8hb_arrayIKN2OT8OffsetToINS0_4RuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSB_j:
  316|   990k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|  2.24M|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  1.25M|  {
   85|  1.25M|    if (unlikely (n > length))
  ------------------
  |  |  259|  1.25M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.25M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  1.25M|    length -= n;
   88|  1.25M|    backwards_length += n;
   89|  1.25M|    arrayZ += n;
   90|  1.25M|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|  1.88M|  {
   80|  1.88M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  1.88M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.88M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  1.88M|    return arrayZ[i];
   82|  1.88M|  }
_Z8hb_arrayIKN2OT8OffsetToINS0_4RuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSB_j:
  316|  32.3k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|  35.5k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  3.22k|  {
   85|  3.22k|    if (unlikely (n > length))
  ------------------
  |  |  259|  3.22k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.22k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  3.22k|    length -= n;
   88|  3.22k|    backwards_length += n;
   89|  3.22k|    arrayZ += n;
   90|  3.22k|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|  29.6k|  {
   80|  29.6k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  29.6k|    return arrayZ[i];
   82|  29.6k|  }
_Z8hb_arrayIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSB_j:
  316|   852k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|  7.72M|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  6.87M|  {
   85|  6.87M|    if (unlikely (n > length))
  ------------------
  |  |  259|  6.87M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.87M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  6.87M|    length -= n;
   88|  6.87M|    backwards_length += n;
   89|  6.87M|    arrayZ += n;
   90|  6.87M|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|  7.07M|  {
   80|  7.07M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  7.07M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.07M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  7.07M|    return arrayZ[i];
   82|  7.07M|  }
_Z8hb_arrayIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSB_j:
  316|   435k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|   529k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  93.9k|  {
   85|  93.9k|    if (unlikely (n > length))
  ------------------
  |  |  259|  93.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 93.9k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  93.9k|    length -= n;
   88|  93.9k|    backwards_length += n;
   89|  93.9k|    arrayZ += n;
   90|  93.9k|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|   493k|  {
   80|   493k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|   493k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 493k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|   493k|    return arrayZ[i];
   82|   493k|  }
_ZNK10hb_array_tIKN2OT7IntTypeItLj2EEEE8get_sizeEv:
  217|  1.88M|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj3EEEEadEv:
  117|  29.6k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj3EEEE8get_sizeEv:
  217|  29.6k|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKcE2asIN2OT6Layout4GPOSELj1ELPv0EEEPKT_v:
  257|  5.02M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  5.02M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  2.12M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 2.12M, False: 2.90M]
  ------------------
_ZNK10hb_array_tIN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE5beginEv:
  111|  54.9k|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE3endEv:
  112|  54.9k|  Type *end () const { return arrayZ + length; }
_Z8hb_arrayIN20hb_aat_map_builder_t15feature_event_tEE10hb_array_tIT_EPS3_j:
  316|  11.1k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN20hb_aat_map_builder_t15feature_event_tEEC2EPS1_j:
   59|  11.1k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIN20hb_aat_map_builder_t15feature_event_tEE5qsortEPFiPKvS4_E:
  199|  11.1k|  {
  200|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  201|  11.1k|    if (likely (length))
  ------------------
  |  |  258|  11.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 11.1k]
  |  |  ------------------
  ------------------
  202|      0|      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
  203|  11.1k|    return hb_sorted_array_t<Type> (*this);
  204|  11.1k|  }
_ZN17hb_sorted_array_tIN20hb_aat_map_builder_t15feature_event_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  11.1k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN17hb_sorted_array_tIN20hb_aat_map_builder_t14feature_info_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  10.5k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIN20hb_aat_map_builder_t14feature_info_tEE7lsearchIS1_EEPS1_RKT_S4_:
  156|  10.5k|  {
  157|  10.5k|    unsigned i;
  158|  10.5k|    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (158:12): [True: 0, False: 10.5k]
  ------------------
  159|  10.5k|  }
_ZNK10hb_array_tIN20hb_aat_map_builder_t14feature_info_tEE5lfindIS1_EEbRKT_Pj14hb_not_found_tj:
  170|  10.5k|  {
  171|  10.5k|    for (unsigned i = 0; i < length; ++i)
  ------------------
  |  Branch (171:26): [True: 0, False: 10.5k]
  ------------------
  172|      0|      if (hb_equal (x, this->arrayZ[i]))
  ------------------
  |  Branch (172:11): [True: 0, False: 0]
  ------------------
  173|      0|      {
  174|      0|	if (pos)
  ------------------
  |  Branch (174:6): [True: 0, False: 0]
  ------------------
  175|      0|	  *pos = i;
  176|      0|	return true;
  177|      0|      }
  178|       |
  179|  10.5k|    if (pos)
  ------------------
  |  Branch (179:9): [True: 10.5k, False: 0]
  ------------------
  180|  10.5k|    {
  181|  10.5k|      switch (not_found)
  ------------------
  |  Branch (181:15): [True: 0, False: 10.5k]
  ------------------
  182|  10.5k|      {
  183|  10.5k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (183:2): [True: 10.5k, False: 0]
  ------------------
  184|  10.5k|	  break;
  185|       |
  186|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (186:2): [True: 0, False: 10.5k]
  ------------------
  187|      0|	  *pos = to_store;
  188|      0|	  break;
  189|       |
  190|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (190:2): [True: 0, False: 10.5k]
  ------------------
  191|      0|	  *pos = length;
  192|      0|	  break;
  193|  10.5k|      }
  194|  10.5k|    }
  195|  10.5k|    return false;
  196|  10.5k|  }
_ZN10hb_array_tIN20hb_user_data_array_t19hb_user_data_item_tEEC2EPS1_j:
   59|  98.0k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT4maxpELj1ELPv0EEEPKT_v:
  257|  98.8k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  98.8k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  88.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 88.5k, False: 10.3k]
  ------------------
_ZN10hb_array_tIKcEC2Ev:
   53|  1.50M|  hb_array_t () = default;
_ZNK10hb_array_tIKcE2asIN2OT9glyf_impl11GlyphHeaderELj1ELPv0EEEPKT_v:
  257|   357k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   357k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   290k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 290k, False: 66.9k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4locaELj1ELPv0EEEPKT_v:
  257|   270k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   270k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 270k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4glyfELj1ELPv0EEEPKT_v:
  257|  83.2k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  83.2k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 83.2k]
  ------------------
_ZNK10hb_array_tIKcE11check_rangeIN2OT9glyf_impl23VarCompositeGlyphRecordELj1ELPv0EEEbPKT_j:
  263|  1.93M|  {
  264|  1.93M|    return arrayZ <= ((const char *) p)
  ------------------
  |  Branch (264:12): [True: 1.93M, False: 0]
  ------------------
  265|  1.93M|	&& ((const char *) p) <= arrayZ + length
  ------------------
  |  Branch (265:5): [True: 1.93M, False: 0]
  ------------------
  266|  1.93M|	&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
  ------------------
  |  Branch (266:5): [True: 1.89M, False: 35.3k]
  ------------------
  267|  1.93M|  }
_ZNK10hb_array_tIKcE9sub_arrayEjj:
  249|  17.3k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKcE9sub_arrayEjPj:
  235|  17.3k|  {
  236|  17.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 549, False: 16.8k]
  |  Branch (236:26): [True: 0, False: 549]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  17.3k|    unsigned int count = length;
  240|  17.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  17.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.62k, False: 15.7k]
  |  |  ------------------
  ------------------
  241|  1.62k|      count = 0;
  242|  15.7k|    else
  243|  15.7k|      count -= start_offset;
  244|  17.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 17.3k, False: 0]
  ------------------
  245|  17.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  17.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  17.3k|  }
_ZNK10hb_array_tIiE7__len__Ev:
   99|   373k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIiEC2EPij:
   59|   216k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE11check_rangeIN2OT7IntTypeItLj2EEELj1ELPv0EEEbPKT_j:
  263|  10.4k|  {
  264|  10.4k|    return arrayZ <= ((const char *) p)
  ------------------
  |  Branch (264:12): [True: 10.4k, False: 0]
  ------------------
  265|  10.4k|	&& ((const char *) p) <= arrayZ + length
  ------------------
  |  Branch (265:5): [True: 10.1k, False: 292]
  ------------------
  266|  10.4k|	&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
  ------------------
  |  Branch (266:5): [True: 10.1k, False: 8]
  ------------------
  267|  10.4k|  }
_ZNK10hb_array_tIKcE11check_rangeIN2OT9glyf_impl20CompositeGlyphRecordELj1ELPv0EEEbPKT_j:
  263|   300k|  {
  264|   300k|    return arrayZ <= ((const char *) p)
  ------------------
  |  Branch (264:12): [True: 300k, False: 0]
  ------------------
  265|   300k|	&& ((const char *) p) <= arrayZ + length
  ------------------
  |  Branch (265:5): [True: 300k, False: 0]
  ------------------
  266|   300k|	&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
  ------------------
  |  Branch (266:5): [True: 294k, False: 5.56k]
  ------------------
  267|   300k|  }
_Z8hb_arrayIN2OT15contour_point_tEE10hb_array_tIT_EPS3_j:
  316|   817k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN2OT15contour_point_tEEC2EPS1_j:
   59|  1.38M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIN2OT15contour_point_tEE9sub_arrayEjj:
  249|   519k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKcE2asIN2OT8hmtxvmtxINS3_4hmtxENS3_4hheaENS3_4HVAREEELj1ELPv0EEEPKT_v:
  257|   377k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   377k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 377k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT8hmtxvmtxINS3_4vmtxENS3_4vheaENS3_4VVAREEELj1ELPv0EEEPKT_v:
  257|  46.6k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  46.6k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 46.6k]
  ------------------
_ZNK10hb_array_tIN2OT15contour_point_tEE11__item_at__Ej:
   79|  2.11M|  {
   80|  2.11M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  2.11M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 215k, False: 1.89M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|   215k|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  1.89M|    return arrayZ[i];
   82|  2.11M|  }
_ZNK10hb_array_tIKcE2asIN2OT4gvarELj1ELPv0EEEPKT_v:
  257|   307k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   307k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   221k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 221k, False: 86.3k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT18GlyphVariationDataELj1ELPv0EEEPKT_v:
  257|  19.1k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  19.1k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  4.00k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 4.00k, False: 15.1k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT18TupleVariationDataELj1ELPv0EEEPKT_v:
  257|  14.7k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  14.7k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 14.7k]
  ------------------
_ZNK10hb_array_tIKcE11check_rangeIN2OT20TupleVariationHeaderELj1ELPv0EEEbPKT_j:
  263|   177k|  {
  264|   177k|    return arrayZ <= ((const char *) p)
  ------------------
  |  Branch (264:12): [True: 177k, False: 0]
  ------------------
  265|   177k|	&& ((const char *) p) <= arrayZ + length
  ------------------
  |  Branch (265:5): [True: 177k, False: 0]
  ------------------
  266|   177k|	&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
  ------------------
  |  Branch (266:5): [True: 173k, False: 4.50k]
  ------------------
  267|   177k|  }
_ZNK10hb_array_tIKN2OT7HBFixedINS0_7IntTypeIsLj2EEELj14EEEE8get_sizeEv:
  217|   165k|  unsigned int get_size () const { return length * this->get_item_size (); }
_Z8hb_arrayIKN2OT7HBFixedINS0_7IntTypeIsLj2EEELj14EEEE10hb_array_tIT_EPS7_j:
  316|   246k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT7HBFixedINS0_7IntTypeIsLj2EEELj14EEEEC2EPS5_j:
   59|   446k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT7HBFixedINS0_7IntTypeIsLj2EEELj14EEEE9sub_arrayEjj:
  249|   199k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN2OT7HBFixedINS0_7IntTypeIsLj2EEELj14EEEE9sub_arrayEjPj:
  235|   199k|  {
  236|   199k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 171k, False: 28.2k]
  |  Branch (236:26): [True: 0, False: 171k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|   199k|    unsigned int count = length;
  240|   199k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|   199k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 199k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|   199k|    else
  243|   199k|      count -= start_offset;
  244|   199k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 199k, False: 0]
  ------------------
  245|   199k|      count = *seg_count = hb_min (count, *seg_count);
  246|   199k|    return hb_array_t (arrayZ + start_offset, count);
  247|   199k|  }
_ZNK10hb_array_tIKcE11check_rangeIN2OT7IntTypeIhLj1EEELj1ELPv0EEEbPKT_j:
  263|  12.2k|  {
  264|  12.2k|    return arrayZ <= ((const char *) p)
  ------------------
  |  Branch (264:12): [True: 11.8k, False: 432]
  ------------------
  265|  12.2k|	&& ((const char *) p) <= arrayZ + length
  ------------------
  |  Branch (265:5): [True: 11.5k, False: 329]
  ------------------
  266|  12.2k|	&& (unsigned int) (arrayZ + length - (const char *) p) >= size;
  ------------------
  |  Branch (266:5): [True: 11.3k, False: 180]
  ------------------
  267|  12.2k|  }
_ZNK10hb_array_tIN2OT15contour_point_tEE8get_sizeEv:
  217|  12.5k|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZN10hb_array_tIjEC2EPjj:
   59|   390k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIN2OT15contour_point_tEE9sub_arrayEjPj:
  235|  1.08M|  {
  236|  1.08M|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 985k, False: 103k]
  |  Branch (236:26): [True: 521k, False: 464k]
  ------------------
  237|   521k|      return *this;
  238|       |
  239|   567k|    unsigned int count = length;
  240|   567k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|   567k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.26k, False: 566k]
  |  |  ------------------
  ------------------
  241|  1.26k|      count = 0;
  242|   566k|    else
  243|   566k|      count -= start_offset;
  244|   567k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 519k, False: 48.0k]
  ------------------
  245|   519k|      count = *seg_count = hb_min (count, *seg_count);
  246|   567k|    return hb_array_t (arrayZ + start_offset, count);
  247|  1.08M|  }
_Z8hb_arrayIiE10hb_array_tIT_Ev:
  313|  41.7k|{ return hb_array_t<T> (); }
_ZN10hb_array_tIiEcvS_IKiEEv:
  118|   333k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZN10hb_array_tIKiEC2EPS0_j:
   59|   333k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIN2OT15contour_point_tEE7__len__Ev:
   99|   333k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIN2OT15contour_point_tEEcvS_IKS1_EEv:
  118|  98.7k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZN10hb_array_tIKN2OT15contour_point_tEEC2EPS2_j:
   59|  98.7k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIN2OT15contour_point_tEE11__forward__Ej:
   84|   318k|  {
   85|   318k|    if (unlikely (n > length))
  ------------------
  |  |  259|   318k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 318k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|   318k|    length -= n;
   88|   318k|    backwards_length += n;
   89|   318k|    arrayZ += n;
   90|   318k|  }
_ZN10hb_array_tIiEC2Ev:
   53|  50.8k|  hb_array_t () = default;
_ZNK10hb_array_tIKcE2asIN2OT4headELj1ELPv0EEEPKT_v:
  257|   131k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   131k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   130k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 130k, False: 1.52k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4hheaELj1ELPv0EEEPKT_v:
  257|   142k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   142k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   127k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 127k, False: 15.2k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4vheaELj1ELPv0EEEPKT_v:
  257|  32.7k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  32.7k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  32.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 32.5k, False: 203]
  ------------------
_ZNK10hb_array_tIKhE9sub_arrayEjPj:
  235|  30.8k|  {
  236|  30.8k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 6.96k, False: 23.8k]
  |  Branch (236:26): [True: 0, False: 6.96k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  30.8k|    unsigned int count = length;
  240|  30.8k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  30.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 30.8k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  30.8k|    else
  243|  30.8k|      count -= start_offset;
  244|  30.8k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 30.8k, False: 0]
  ------------------
  245|  30.8k|      count = *seg_count = hb_min (count, *seg_count);
  246|  30.8k|    return hb_array_t (arrayZ + start_offset, count);
  247|  30.8k|  }
_ZNK10hb_array_tIKhE9sub_arrayEjj:
  249|  30.8k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKcE2asIN2OT4MVARELj1ELPv0EEEPKT_v:
  257|   107k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   107k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   107k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 107k, False: 642]
  ------------------
_Z15hb_sorted_arrayIKN2OT17UnicodeValueRangeEE17hb_sorted_array_tIT_EPS4_j:
  427|  34.3k|{ return hb_sorted_array_t<T> (array, length); }
_ZNK17hb_sorted_array_tIKN2OT17UnicodeValueRangeEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  34.3k|  {
  386|  34.3k|    unsigned pos;
  387|       |
  388|  34.3k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 55, False: 34.3k]
  ------------------
  389|     55|    {
  390|     55|      if (i)
  ------------------
  |  Branch (390:11): [True: 0, False: 55]
  ------------------
  391|      0|	*i = pos;
  392|     55|      return true;
  393|     55|    }
  394|       |
  395|  34.3k|    if (i)
  ------------------
  |  Branch (395:9): [True: 0, False: 34.3k]
  ------------------
  396|      0|    {
  397|      0|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 0]
  ------------------
  398|      0|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 0]
  ------------------
  400|      0|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 0]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 0]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|      0|      }
  410|      0|    }
  411|  34.3k|    return false;
  412|  34.3k|  }
_ZNK17hb_sorted_array_tIKN2OT17UnicodeValueRangeEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  34.3k|  {
  416|  34.3k|    return hb_bsearch_impl (pos,
  417|  34.3k|			    x,
  418|  34.3k|			    this->arrayZ,
  419|  34.3k|			    this->length,
  420|  34.3k|			    sizeof (Type),
  421|  34.3k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  34.3k|			    std::forward<Ts> (ds)...);
  423|  34.3k|  }
_Z15hb_sorted_arrayIKN2OT10UVSMappingEE17hb_sorted_array_tIT_EPS4_j:
  427|  67.6k|{ return hb_sorted_array_t<T> (array, length); }
_ZNK17hb_sorted_array_tIKN2OT10UVSMappingEE5beginEv:
  358|  33.3k|  Type *begin () const { return this->arrayZ; }
_ZNK17hb_sorted_array_tIKN2OT10UVSMappingEE3endEv:
  359|  33.3k|  Type *end () const { return this->arrayZ + this->length; }
_ZN17hb_sorted_array_tIKN2OT10UVSMappingEE7bsearchIjEEPS2_RKT_S5_:
  371|  34.3k|  {
  372|  34.3k|    unsigned int i;
  373|  34.3k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 21, False: 34.3k]
  ------------------
  374|  34.3k|  }
_ZNK17hb_sorted_array_tIKN2OT10UVSMappingEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  34.3k|  {
  386|  34.3k|    unsigned pos;
  387|       |
  388|  34.3k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 21, False: 34.3k]
  ------------------
  389|     21|    {
  390|     21|      if (i)
  ------------------
  |  Branch (390:11): [True: 21, False: 0]
  ------------------
  391|     21|	*i = pos;
  392|     21|      return true;
  393|     21|    }
  394|       |
  395|  34.3k|    if (i)
  ------------------
  |  Branch (395:9): [True: 34.3k, False: 0]
  ------------------
  396|  34.3k|    {
  397|  34.3k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 34.3k]
  ------------------
  398|  34.3k|      {
  399|  34.3k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 34.3k, False: 0]
  ------------------
  400|  34.3k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 34.3k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 34.3k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  34.3k|      }
  410|  34.3k|    }
  411|  34.3k|    return false;
  412|  34.3k|  }
_ZNK17hb_sorted_array_tIKN2OT10UVSMappingEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  34.3k|  {
  416|  34.3k|    return hb_bsearch_impl (pos,
  417|  34.3k|			    x,
  418|  34.3k|			    this->arrayZ,
  419|  34.3k|			    this->length,
  420|  34.3k|			    sizeof (Type),
  421|  34.3k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  34.3k|			    std::forward<Ts> (ds)...);
  423|  34.3k|  }
_ZN17hb_sorted_array_tIKN2OT23VariationSelectorRecordEE7bsearchIjEEPS2_RKT_S5_:
  371|  67.7k|  {
  372|  67.7k|    unsigned int i;
  373|  67.7k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 311, False: 67.4k]
  ------------------
  374|  67.7k|  }
_ZNK17hb_sorted_array_tIKN2OT23VariationSelectorRecordEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  67.7k|  {
  386|  67.7k|    unsigned pos;
  387|       |
  388|  67.7k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 311, False: 67.4k]
  ------------------
  389|    311|    {
  390|    311|      if (i)
  ------------------
  |  Branch (390:11): [True: 311, False: 0]
  ------------------
  391|    311|	*i = pos;
  392|    311|      return true;
  393|    311|    }
  394|       |
  395|  67.4k|    if (i)
  ------------------
  |  Branch (395:9): [True: 67.4k, False: 0]
  ------------------
  396|  67.4k|    {
  397|  67.4k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 67.4k]
  ------------------
  398|  67.4k|      {
  399|  67.4k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 67.4k, False: 0]
  ------------------
  400|  67.4k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 67.4k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 67.4k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  67.4k|      }
  410|  67.4k|    }
  411|  67.4k|    return false;
  412|  67.4k|  }
_ZNK17hb_sorted_array_tIKN2OT23VariationSelectorRecordEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  67.7k|  {
  416|  67.7k|    return hb_bsearch_impl (pos,
  417|  67.7k|			    x,
  418|  67.7k|			    this->arrayZ,
  419|  67.7k|			    this->length,
  420|  67.7k|			    sizeof (Type),
  421|  67.7k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  67.7k|			    std::forward<Ts> (ds)...);
  423|  67.7k|  }
_Z15hb_sorted_arrayIKN2OT23VariationSelectorRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|   101k|{ return hb_sorted_array_t<T> (array, length); }
_ZNK17hb_sorted_array_tIKN2OT23VariationSelectorRecordEE5beginEv:
  358|  33.3k|  Type *begin () const { return this->arrayZ; }
_ZNK17hb_sorted_array_tIKN2OT23VariationSelectorRecordEE3endEv:
  359|  33.3k|  Type *end () const { return this->arrayZ + this->length; }
_Z15hb_sorted_arrayIKN2OT21CmapSubtableLongGroupEE17hb_sorted_array_tIT_EPS4_j:
  427|   199k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT21CmapSubtableLongGroupEE7bsearchIjEEPS2_RKT_S5_:
  371|   199k|  {
  372|   199k|    unsigned int i;
  373|   199k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 144k, False: 54.5k]
  ------------------
  374|   199k|  }
_ZNK17hb_sorted_array_tIKN2OT21CmapSubtableLongGroupEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   199k|  {
  386|   199k|    unsigned pos;
  387|       |
  388|   199k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 144k, False: 54.5k]
  ------------------
  389|   144k|    {
  390|   144k|      if (i)
  ------------------
  |  Branch (390:11): [True: 144k, False: 0]
  ------------------
  391|   144k|	*i = pos;
  392|   144k|      return true;
  393|   144k|    }
  394|       |
  395|  54.5k|    if (i)
  ------------------
  |  Branch (395:9): [True: 54.5k, False: 0]
  ------------------
  396|  54.5k|    {
  397|  54.5k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 54.5k]
  ------------------
  398|  54.5k|      {
  399|  54.5k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 54.5k, False: 0]
  ------------------
  400|  54.5k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 54.5k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 54.5k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  54.5k|      }
  410|  54.5k|    }
  411|  54.5k|    return false;
  412|  54.5k|  }
_ZNK17hb_sorted_array_tIKN2OT21CmapSubtableLongGroupEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   199k|  {
  416|   199k|    return hb_bsearch_impl (pos,
  417|   199k|			    x,
  418|   199k|			    this->arrayZ,
  419|   199k|			    this->length,
  420|   199k|			    sizeof (Type),
  421|   199k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   199k|			    std::forward<Ts> (ds)...);
  423|   199k|  }
_ZNK10hb_array_tIKcE2asIN2OT4cmapELj1ELPv0EEEPKT_v:
  257|  65.6k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  65.6k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  59.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 59.5k, False: 6.11k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT3OS2ELj1ELPv0EEEPKT_v:
  257|   108k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   108k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   100k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 100k, False: 7.70k]
  ------------------
_Z15hb_sorted_arrayIKN2OT14EncodingRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|   316k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT14EncodingRecordEE7bsearchIS1_EEPS2_RKT_S5_:
  371|   316k|  {
  372|   316k|    unsigned int i;
  373|   316k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 3.25k, False: 312k]
  ------------------
  374|   316k|  }
_ZNK17hb_sorted_array_tIKN2OT14EncodingRecordEE5bfindIS1_EEbRKT_Pj14hb_not_found_tj:
  385|   316k|  {
  386|   316k|    unsigned pos;
  387|       |
  388|   316k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 3.25k, False: 312k]
  ------------------
  389|  3.25k|    {
  390|  3.25k|      if (i)
  ------------------
  |  Branch (390:11): [True: 3.25k, False: 0]
  ------------------
  391|  3.25k|	*i = pos;
  392|  3.25k|      return true;
  393|  3.25k|    }
  394|       |
  395|   312k|    if (i)
  ------------------
  |  Branch (395:9): [True: 312k, False: 0]
  ------------------
  396|   312k|    {
  397|   312k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 312k]
  ------------------
  398|   312k|      {
  399|   312k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 312k, False: 0]
  ------------------
  400|   312k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 312k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 312k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   312k|      }
  410|   312k|    }
  411|   312k|    return false;
  412|   312k|  }
_ZNK17hb_sorted_array_tIKN2OT14EncodingRecordEE12bsearch_implIS1_JEEEbRKT_PjDpT0_:
  415|   316k|  {
  416|   316k|    return hb_bsearch_impl (pos,
  417|   316k|			    x,
  418|   316k|			    this->arrayZ,
  419|   316k|			    this->length,
  420|   316k|			    sizeof (Type),
  421|   316k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   316k|			    std::forward<Ts> (ds)...);
  423|   316k|  }
_Z15hb_sorted_arrayIKN2OT10ClipRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|   138k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT10ClipRecordEE7bsearchIjEEPS2_RKT_S5_:
  371|   138k|  {
  372|   138k|    unsigned int i;
  373|   138k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 1.15k, False: 137k]
  ------------------
  374|   138k|  }
_ZNK17hb_sorted_array_tIKN2OT10ClipRecordEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   138k|  {
  386|   138k|    unsigned pos;
  387|       |
  388|   138k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 1.15k, False: 137k]
  ------------------
  389|  1.15k|    {
  390|  1.15k|      if (i)
  ------------------
  |  Branch (390:11): [True: 1.15k, False: 0]
  ------------------
  391|  1.15k|	*i = pos;
  392|  1.15k|      return true;
  393|  1.15k|    }
  394|       |
  395|   137k|    if (i)
  ------------------
  |  Branch (395:9): [True: 137k, False: 0]
  ------------------
  396|   137k|    {
  397|   137k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 137k]
  ------------------
  398|   137k|      {
  399|   137k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 137k, False: 0]
  ------------------
  400|   137k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 137k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 137k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|   137k|      }
  410|   137k|    }
  411|   137k|    return false;
  412|   137k|  }
_ZNK17hb_sorted_array_tIKN2OT10ClipRecordEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   138k|  {
  416|   138k|    return hb_bsearch_impl (pos,
  417|   138k|			    x,
  418|   138k|			    this->arrayZ,
  419|   138k|			    this->length,
  420|   138k|			    sizeof (Type),
  421|   138k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   138k|			    std::forward<Ts> (ds)...);
  423|   138k|  }
_Z15hb_sorted_arrayIKN2OT20BaseGlyphPaintRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|   137k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT15BaseGlyphRecordEE7bsearchIjEEPS2_RKT_S5_:
  371|  34.9k|  {
  372|  34.9k|    unsigned int i;
  373|  34.9k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 163, False: 34.7k]
  ------------------
  374|  34.9k|  }
_ZNK17hb_sorted_array_tIKN2OT15BaseGlyphRecordEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  34.9k|  {
  386|  34.9k|    unsigned pos;
  387|       |
  388|  34.9k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 163, False: 34.7k]
  ------------------
  389|    163|    {
  390|    163|      if (i)
  ------------------
  |  Branch (390:11): [True: 163, False: 0]
  ------------------
  391|    163|	*i = pos;
  392|    163|      return true;
  393|    163|    }
  394|       |
  395|  34.7k|    if (i)
  ------------------
  |  Branch (395:9): [True: 34.7k, False: 0]
  ------------------
  396|  34.7k|    {
  397|  34.7k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 34.7k]
  ------------------
  398|  34.7k|      {
  399|  34.7k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 34.7k, False: 0]
  ------------------
  400|  34.7k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 34.7k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 34.7k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  34.7k|      }
  410|  34.7k|    }
  411|  34.7k|    return false;
  412|  34.7k|  }
_ZNK17hb_sorted_array_tIKN2OT15BaseGlyphRecordEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  34.9k|  {
  416|  34.9k|    return hb_bsearch_impl (pos,
  417|  34.9k|			    x,
  418|  34.9k|			    this->arrayZ,
  419|  34.9k|			    this->length,
  420|  34.9k|			    sizeof (Type),
  421|  34.9k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  34.9k|			    std::forward<Ts> (ds)...);
  423|  34.9k|  }
_Z8hb_arrayIKN2OT11LayerRecordEE10hb_array_tIT_EPS4_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT11LayerRecordEE9sub_arrayEjj:
  249|  33.3k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN2OT11LayerRecordEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 14]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 33.3k]
  |  |  ------------------
  ------------------
  241|     14|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_ZNK10hb_array_tIKcE2asIN2OT4COLRELj1ELPv0EEEPKT_v:
  257|   816k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   816k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   805k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 805k, False: 11.4k]
  ------------------
_Z15hb_sorted_arrayIKN2OT15BaseGlyphRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|  34.9k|{ return hb_sorted_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT11LayerRecordEE5beginEv:
  111|     20|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT11LayerRecordEE3endEv:
  112|     20|  Type *end () const { return arrayZ + length; }
_ZN17hb_sorted_array_tIKN2OT20BaseGlyphPaintRecordEE7bsearchIjEEPS2_RKT_S5_:
  371|   137k|  {
  372|   137k|    unsigned int i;
  373|   137k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 133k, False: 4.55k]
  ------------------
  374|   137k|  }
_ZNK17hb_sorted_array_tIKN2OT20BaseGlyphPaintRecordEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|   137k|  {
  386|   137k|    unsigned pos;
  387|       |
  388|   137k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 133k, False: 4.55k]
  ------------------
  389|   133k|    {
  390|   133k|      if (i)
  ------------------
  |  Branch (390:11): [True: 133k, False: 0]
  ------------------
  391|   133k|	*i = pos;
  392|   133k|      return true;
  393|   133k|    }
  394|       |
  395|  4.55k|    if (i)
  ------------------
  |  Branch (395:9): [True: 4.55k, False: 0]
  ------------------
  396|  4.55k|    {
  397|  4.55k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 4.55k]
  ------------------
  398|  4.55k|      {
  399|  4.55k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 4.55k, False: 0]
  ------------------
  400|  4.55k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 4.55k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 4.55k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  4.55k|      }
  410|  4.55k|    }
  411|  4.55k|    return false;
  412|  4.55k|  }
_ZNK17hb_sorted_array_tIKN2OT20BaseGlyphPaintRecordEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|   137k|  {
  416|   137k|    return hb_bsearch_impl (pos,
  417|   137k|			    x,
  418|   137k|			    this->arrayZ,
  419|   137k|			    this->length,
  420|   137k|			    sizeof (Type),
  421|   137k|			    _hb_cmp_method<T, Type, Ts...>,
  422|   137k|			    std::forward<Ts> (ds)...);
  423|   137k|  }
_ZNK10hb_array_tIKcE8get_sizeEv:
  217|  1.54M|  unsigned int get_size () const { return length * this->get_item_size (); }
_Z8hb_arrayIKN2OT11TableRecordEE10hb_array_tIT_EPS4_j:
  316|  1.25M|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT11TableRecordEEC2EPS2_j:
   59|  1.28M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT11TableRecordEE5lfindINS0_3TagEEEbRKT_Pj14hb_not_found_tj:
  170|  1.25M|  {
  171|  6.17M|    for (unsigned i = 0; i < length; ++i)
  ------------------
  |  Branch (171:26): [True: 4.97M, False: 1.20M]
  ------------------
  172|  4.97M|      if (hb_equal (x, this->arrayZ[i]))
  ------------------
  |  Branch (172:11): [True: 54.7k, False: 4.91M]
  ------------------
  173|  54.7k|      {
  174|  54.7k|	if (pos)
  ------------------
  |  Branch (174:6): [True: 54.7k, False: 0]
  ------------------
  175|  54.7k|	  *pos = i;
  176|  54.7k|	return true;
  177|  54.7k|      }
  178|       |
  179|  1.20M|    if (pos)
  ------------------
  |  Branch (179:9): [True: 1.20M, False: 0]
  ------------------
  180|  1.20M|    {
  181|  1.20M|      switch (not_found)
  ------------------
  |  Branch (181:15): [True: 0, False: 1.20M]
  ------------------
  182|  1.20M|      {
  183|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (183:2): [True: 0, False: 1.20M]
  ------------------
  184|      0|	  break;
  185|       |
  186|  1.20M|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (186:2): [True: 1.20M, False: 0]
  ------------------
  187|  1.20M|	  *pos = to_store;
  188|  1.20M|	  break;
  189|       |
  190|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (190:2): [True: 0, False: 1.20M]
  ------------------
  191|      0|	  *pos = length;
  192|      0|	  break;
  193|  1.20M|      }
  194|  1.20M|    }
  195|  1.20M|    return false;
  196|  1.20M|  }
_Z15hb_sorted_arrayIKN2OT11TableRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|  26.5k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT11TableRecordEEC2EPS2_j:
  337|  26.5k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZNK17hb_sorted_array_tIKN2OT11TableRecordEE5bfindINS0_3TagEEEbRKT_Pj14hb_not_found_tj:
  385|  26.5k|  {
  386|  26.5k|    unsigned pos;
  387|       |
  388|  26.5k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 6.24k, False: 20.3k]
  ------------------
  389|  6.24k|    {
  390|  6.24k|      if (i)
  ------------------
  |  Branch (390:11): [True: 6.24k, False: 0]
  ------------------
  391|  6.24k|	*i = pos;
  392|  6.24k|      return true;
  393|  6.24k|    }
  394|       |
  395|  20.3k|    if (i)
  ------------------
  |  Branch (395:9): [True: 20.3k, False: 0]
  ------------------
  396|  20.3k|    {
  397|  20.3k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 20.3k]
  ------------------
  398|  20.3k|      {
  399|      0|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 0, False: 20.3k]
  ------------------
  400|      0|	  break;
  401|       |
  402|  20.3k|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 20.3k, False: 0]
  ------------------
  403|  20.3k|	  *i = to_store;
  404|  20.3k|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 20.3k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  20.3k|      }
  410|  20.3k|    }
  411|  20.3k|    return false;
  412|  20.3k|  }
_ZNK17hb_sorted_array_tIKN2OT11TableRecordEE12bsearch_implINS0_3TagEJEEEbRKT_PjDpT0_:
  415|  26.5k|  {
  416|  26.5k|    return hb_bsearch_impl (pos,
  417|  26.5k|			    x,
  418|  26.5k|			    this->arrayZ,
  419|  26.5k|			    this->length,
  420|  26.5k|			    sizeof (Type),
  421|  26.5k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  26.5k|			    std::forward<Ts> (ds)...);
  423|  26.5k|  }
_Z8hb_arrayIKN2OT14ResourceRecordEE10hb_array_tIT_EPS4_j:
  316|    417|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT14ResourceRecordEEC2EPS2_j:
   59|    417|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT14ResourceRecordEE11__item_at__Ej:
   79|    417|  {
   80|    417|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|    417|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 417]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|    417|    return arrayZ[i];
   82|    417|  }
_ZN10hb_array_tIN12hb_bit_set_t10page_map_tEEC2EPS1_j:
   59|  1.36M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN12hb_bit_set_t10page_map_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  1.36M|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN12hb_bit_set_t10page_map_tEEC2IS1_LPv0EEERKS_IT_E:
   67|  1.36M|    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
_ZN10hb_array_tIN12hb_hashmap_tIjjLb1EE6item_tEEC2EPS2_j:
   59|  32.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT23VariationSelectorRecordEEC2EPS2_j:
  337|   101k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT23VariationSelectorRecordEEC2EPS2_j:
   59|   101k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT10UVSMappingEEC2EPS2_j:
  337|  67.6k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT10UVSMappingEEC2EPS2_j:
   59|  67.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT16OpenTypeFontFileELj1ELPv0EEEPKT_v:
  257|  1.28M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  1.28M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  24.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 24.8k, False: 1.25M]
  ------------------
_ZN17hb_sorted_array_tIKN2OT14EncodingRecordEEC2EPS2_j:
  337|   316k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT14EncodingRecordEEC2EPS2_j:
   59|   316k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT21CmapSubtableLongGroupEEC2EPS2_j:
  337|   199k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT21CmapSubtableLongGroupEEC2EPS2_j:
   59|   199k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z8hb_arrayIKN2OT10AxisRecordEE10hb_array_tIT_EPS4_j:
  316|  7.43k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT10AxisRecordEEC2EPS2_j:
   59|  7.43k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT10AxisRecordEE11__item_at__Ej:
   79|  5.39k|  {
   80|  5.39k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  5.39k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.39k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  5.39k|    return arrayZ[i];
   82|  5.39k|  }
_ZNK10hb_array_tIKcE2asIN2OT4fvarELj1ELPv0EEEPKT_v:
  257|   205k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   205k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   193k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 193k, False: 11.8k]
  ------------------
_ZNK10hb_array_tIKN2OT10AxisRecordEE8sanitizeI21hb_sanitize_context_tEEbPT_:
  300|  1.10k|  { return c->check_array (arrayZ, length); }
_ZNK10hb_array_tIKN2OT10AxisRecordEEadEv:
  117|    936|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT10AxisRecordEE8get_sizeEv:
  217|    936|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKcE2asIN2OT4avarELj1ELPv0EEEPKT_v:
  257|  99.9k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  99.9k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  99.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 99.4k, False: 479]
  ------------------
_ZN10hb_array_tIKN2OT5IndexEEC2EPS2_j:
   59|   654k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z8hb_arrayIKN2OT7IntTypeIjLj4EEEE10hb_array_tIT_EPS5_j:
  316|     62|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT7IntTypeIjLj4EEEEC2EPS3_j:
   59|  15.9k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT7IntTypeIjLj4EEEE11__item_at__Ej:
   79|    403|  {
   80|    403|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|    403|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 61, False: 342]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|     61|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|    342|    return arrayZ[i];
   82|    403|  }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj4EEEE9sub_arrayEjj:
  249|  5.30k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj4EEEE7__len__Ev:
   99|  5.62k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT7IntTypeIjLj4EEEE11__forward__Ej:
   84|    341|  {
   85|    341|    if (unlikely (n > length))
  ------------------
  |  |  259|    341|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 341]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|    341|    length -= n;
   88|    341|    backwards_length += n;
   89|    341|    arrayZ += n;
   90|    341|  }
_ZNK10hb_array_tIKN2OT7IntTypeIjLj4EEEE9sub_arrayEjPj:
  235|  10.5k|  {
  236|  10.5k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 2.25k, False: 8.32k]
  |  Branch (236:26): [True: 0, False: 2.25k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  10.5k|    unsigned int count = length;
  240|  10.5k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.59k, False: 2.98k]
  |  |  ------------------
  ------------------
  241|  7.59k|      count = 0;
  242|  2.98k|    else
  243|  2.98k|      count -= start_offset;
  244|  10.5k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 10.5k, False: 0]
  ------------------
  245|  10.5k|      count = *seg_count = hb_min (count, *seg_count);
  246|  10.5k|    return hb_array_t (arrayZ + start_offset, count);
  247|  10.5k|  }
_ZN17hb_sorted_array_tIKN2OT20BaseGlyphPaintRecordEEC2EPS2_j:
  337|   137k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT20BaseGlyphPaintRecordEEC2EPS2_j:
   59|   137k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT15BaseGlyphRecordEEC2EPS2_j:
  337|  34.9k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT15BaseGlyphRecordEEC2EPS2_j:
   59|  34.9k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT11LayerRecordEEC2EPS2_j:
   59|  66.7k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT3SVGELj1ELPv0EEEPKT_v:
  257|   100k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   100k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  99.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 99.9k, False: 102]
  ------------------
_Z15hb_sorted_arrayIKN2OT21SVGDocumentIndexEntryEE17hb_sorted_array_tIT_EPS4_j:
  427|  33.3k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT21SVGDocumentIndexEntryEEC2EPS2_j:
  337|  33.3k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT21SVGDocumentIndexEntryEEC2EPS2_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT21SVGDocumentIndexEntryEE7bsearchIjEEPS2_RKT_S5_:
  371|  33.3k|  {
  372|  33.3k|    unsigned int i;
  373|  33.3k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 1, False: 33.3k]
  ------------------
  374|  33.3k|  }
_ZNK17hb_sorted_array_tIKN2OT21SVGDocumentIndexEntryEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  33.3k|  {
  386|  33.3k|    unsigned pos;
  387|       |
  388|  33.3k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 1, False: 33.3k]
  ------------------
  389|      1|    {
  390|      1|      if (i)
  ------------------
  |  Branch (390:11): [True: 1, False: 0]
  ------------------
  391|      1|	*i = pos;
  392|      1|      return true;
  393|      1|    }
  394|       |
  395|  33.3k|    if (i)
  ------------------
  |  Branch (395:9): [True: 33.3k, False: 0]
  ------------------
  396|  33.3k|    {
  397|  33.3k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 33.3k]
  ------------------
  398|  33.3k|      {
  399|  33.3k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 33.3k, False: 0]
  ------------------
  400|  33.3k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 33.3k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 33.3k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  33.3k|      }
  410|  33.3k|    }
  411|  33.3k|    return false;
  412|  33.3k|  }
_ZNK17hb_sorted_array_tIKN2OT21SVGDocumentIndexEntryEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  33.3k|  {
  416|  33.3k|    return hb_bsearch_impl (pos,
  417|  33.3k|			    x,
  418|  33.3k|			    this->arrayZ,
  419|  33.3k|			    this->length,
  420|  33.3k|			    sizeof (Type),
  421|  33.3k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  33.3k|			    std::forward<Ts> (ds)...);
  423|  33.3k|  }
_ZNK10hb_array_tIKcE2asIN2OT4sbixELj1ELPv0EEEPKT_v:
  257|   825k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   825k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   815k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 815k, False: 10.1k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4CBLCELj1ELPv0EEEPKT_v:
  257|  1.50M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  1.50M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  1.49M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 1.49M, False: 1.17k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4CBDTELj1ELPv0EEEPKT_v:
  257|     82|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|     82|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 0, False: 82]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4CPALELj1ELPv0EEEPKT_v:
  257|   247k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   247k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   240k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 240k, False: 6.70k]
  ------------------
_Z8hb_arrayIKN2OT7IntTypeIhLj1EEEE10hb_array_tIT_EPS5_j:
  316|   238k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT7IntTypeIhLj1EEEE8get_sizeEv:
  217|   159k|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKcE2asIN2OT4sbix13accelerator_t9PNGHeaderELj1ELPv0EEEPKT_v:
  257|    516|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|    516|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|    453|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 453, False: 63]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4cff1ELj1ELPv0EEEPKT_v:
  257|  32.7k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  32.7k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  31.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 31.0k, False: 1.69k]
  ------------------
_ZNK10hb_array_tIKhE8sanitizeI21hb_sanitize_context_tEEbPT_:
  300|   143k|  { return c->check_array (arrayZ, length); }
_ZNK10hb_array_tIKhEadEv:
  117|  24.7k|  Type * operator & () const { return arrayZ; }
_Z8hb_arrayIN2OT4cff113accelerator_t7gname_tEE10hb_array_tIT_EPS5_j:
  316|  1.65k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN2OT4cff113accelerator_t7gname_tEE5qsortEPFiPKvS6_E:
  199|    829|  {
  200|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  201|    829|    if (likely (length))
  ------------------
  |  |  258|    829|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 829, False: 0]
  |  |  ------------------
  ------------------
  202|    829|      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
  203|    829|    return hb_sorted_array_t<Type> (*this);
  204|    829|  }
_ZN17hb_sorted_array_tIN2OT4cff113accelerator_t7gname_tEE7bsearchIS3_EEPS3_RKT_S6_:
  371|    829|  {
  372|    829|    unsigned int i;
  373|    829|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 21, False: 808]
  ------------------
  374|    829|  }
_ZNK17hb_sorted_array_tIN2OT4cff113accelerator_t7gname_tEE5bfindIS3_EEbRKT_Pj14hb_not_found_tj:
  385|    829|  {
  386|    829|    unsigned pos;
  387|       |
  388|    829|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 21, False: 808]
  ------------------
  389|     21|    {
  390|     21|      if (i)
  ------------------
  |  Branch (390:11): [True: 21, False: 0]
  ------------------
  391|     21|	*i = pos;
  392|     21|      return true;
  393|     21|    }
  394|       |
  395|    808|    if (i)
  ------------------
  |  Branch (395:9): [True: 808, False: 0]
  ------------------
  396|    808|    {
  397|    808|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 808]
  ------------------
  398|    808|      {
  399|    808|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 808, False: 0]
  ------------------
  400|    808|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 808]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 808]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|    808|      }
  410|    808|    }
  411|    808|    return false;
  412|    808|  }
_ZNK17hb_sorted_array_tIN2OT4cff113accelerator_t7gname_tEE12bsearch_implIS3_JEEEbRKT_PjDpT0_:
  415|    829|  {
  416|    829|    return hb_bsearch_impl (pos,
  417|    829|			    x,
  418|    829|			    this->arrayZ,
  419|    829|			    this->length,
  420|    829|			    sizeof (Type),
  421|    829|			    _hb_cmp_method<T, Type, Ts...>,
  422|    829|			    std::forward<Ts> (ds)...);
  423|    829|  }
_ZNK10hb_array_tIKcE2asIN2OT4cff2ELj1ELPv0EEEPKT_v:
  257|  31.9k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  31.9k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  30.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 30.7k, False: 1.24k]
  ------------------
_ZNK10hb_array_tIKhE11__item_at__Ej:
   79|  46.1k|  {
   80|  46.1k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  46.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 45.0k, False: 1.07k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|  45.0k|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  1.07k|    return arrayZ[i];
   82|  46.1k|  }
_ZNK10hb_array_tIKN2OT7IntTypeIsLj2EEEEadEv:
  117|  79.5k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT7IntTypeIsLj2EEEE8get_sizeEv:
  217|  79.5k|  unsigned int get_size () const { return length * this->get_item_size (); }
_ZNK10hb_array_tIKN2OT7IntTypeIhLj1EEEEadEv:
  117|   159k|  Type * operator & () const { return arrayZ; }
_ZNK10hb_array_tIKN2OT7IntTypeIhLj1EEEE11__item_at__Ej:
   79|   212k|  {
   80|   212k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|   212k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 119k, False: 93.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|   119k|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  93.5k|    return arrayZ[i];
   82|   212k|  }
_ZNK10hb_array_tIKcE2asIN2OT4metaELj1ELPv0EEEPKT_v:
  257|  66.6k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  66.6k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  66.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 66.6k, False: 30]
  ------------------
_ZN10hb_array_tIKN2OT7DataMapEE7lsearchIjEEPS2_RKT_S5_:
  156|  33.3k|  {
  157|  33.3k|    unsigned i;
  158|  33.3k|    return lfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (158:12): [True: 1, False: 33.3k]
  ------------------
  159|  33.3k|  }
_ZNK10hb_array_tIKN2OT7DataMapEE5lfindIjEEbRKT_Pj14hb_not_found_tj:
  170|  33.3k|  {
  171|  37.5k|    for (unsigned i = 0; i < length; ++i)
  ------------------
  |  Branch (171:26): [True: 4.20k, False: 33.3k]
  ------------------
  172|  4.20k|      if (hb_equal (x, this->arrayZ[i]))
  ------------------
  |  Branch (172:11): [True: 1, False: 4.20k]
  ------------------
  173|      1|      {
  174|      1|	if (pos)
  ------------------
  |  Branch (174:6): [True: 1, False: 0]
  ------------------
  175|      1|	  *pos = i;
  176|      1|	return true;
  177|      1|      }
  178|       |
  179|  33.3k|    if (pos)
  ------------------
  |  Branch (179:9): [True: 33.3k, False: 0]
  ------------------
  180|  33.3k|    {
  181|  33.3k|      switch (not_found)
  ------------------
  |  Branch (181:15): [True: 0, False: 33.3k]
  ------------------
  182|  33.3k|      {
  183|  33.3k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (183:2): [True: 33.3k, False: 0]
  ------------------
  184|  33.3k|	  break;
  185|       |
  186|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (186:2): [True: 0, False: 33.3k]
  ------------------
  187|      0|	  *pos = to_store;
  188|      0|	  break;
  189|       |
  190|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (190:2): [True: 0, False: 33.3k]
  ------------------
  191|      0|	  *pos = length;
  192|      0|	  break;
  193|  33.3k|      }
  194|  33.3k|    }
  195|  33.3k|    return false;
  196|  33.3k|  }
_Z8hb_arrayIKN2OT7DataMapEE10hb_array_tIT_EPS4_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKcE2asIN2OT4nameELj1ELPv0EEEPKT_v:
  257|   196k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   196k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   191k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 191k, False: 5.11k]
  ------------------
_ZNK10hb_array_tIKN2OT10NameRecordEE11__item_at__Ej:
   79|  1.70M|  {
   80|  1.70M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  1.70M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  1.70M|    return arrayZ[i];
   82|  1.70M|  }
_Z8hb_arrayI18hb_ot_name_entry_tE10hb_array_tIT_EPS2_j:
  316|  32.6k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tI18hb_ot_name_entry_tE5qsortEPFiPKvS3_E:
  199|  32.6k|  {
  200|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  201|  32.6k|    if (likely (length))
  ------------------
  |  |  258|  32.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 651, False: 32.0k]
  |  |  ------------------
  ------------------
  202|    651|      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
  203|  32.6k|    return hb_sorted_array_t<Type> (*this);
  204|  32.6k|  }
_ZNK10hb_array_tIKcE2asIN2OT4postELj1ELPv0EEEPKT_v:
  257|  33.4k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  33.4k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  32.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 32.0k, False: 1.39k]
  ------------------
_ZNK10hb_array_tIKcE3cmpERKS1_:
  142|  2.66M|  {
  143|  2.66M|    if (length != a.length)
  ------------------
  |  Branch (143:9): [True: 1.11M, False: 1.54M]
  ------------------
  144|  1.11M|      return (int) a.length - (int) length;
  145|  1.54M|    return hb_memcmp (a.arrayZ, arrayZ, get_size ());
  146|  2.66M|  }
_ZNK10hb_array_tIKN2OT11HBGlyphID16EE9sub_arrayEjj:
  249|  20.0k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN2OT11HBGlyphID16EE9sub_arrayEjPj:
  235|  20.0k|  {
  236|  20.0k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 20.0k, False: 0]
  |  Branch (236:26): [True: 0, False: 20.0k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  20.0k|    unsigned int count = length;
  240|  20.0k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  20.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 20.0k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  20.0k|    else
  243|  20.0k|      count -= start_offset;
  244|  20.0k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 20.0k, False: 0]
  ------------------
  245|  20.0k|      count = *seg_count = hb_min (count, *seg_count);
  246|  20.0k|    return hb_array_t (arrayZ + start_offset, count);
  247|  20.0k|  }
_ZNK10hb_array_tIKN2OT11HBGlyphID16EE11__item_at__Ej:
   79|  35.1k|  {
   80|  35.1k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  35.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 35.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  35.1k|    return arrayZ[i];
   82|  35.1k|  }
_ZN10hb_array_tIKN2OT11HBGlyphID16EE11__forward__Ej:
   84|  40.2k|  {
   85|  40.2k|    if (unlikely (n > length))
  ------------------
  |  |  259|  40.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 40.2k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  40.2k|    length -= n;
   88|  40.2k|    backwards_length += n;
   89|  40.2k|    arrayZ += n;
   90|  40.2k|  }
_ZNK10hb_array_tIKjE9sub_arrayEjj:
  249|  5.16k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKjE9sub_arrayEjPj:
  235|  5.16k|  {
  236|  5.16k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 5.16k, False: 0]
  |  Branch (236:26): [True: 0, False: 5.16k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  5.16k|    unsigned int count = length;
  240|  5.16k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.16k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  5.16k|    else
  243|  5.16k|      count -= start_offset;
  244|  5.16k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 5.16k, False: 0]
  ------------------
  245|  5.16k|      count = *seg_count = hb_min (count, *seg_count);
  246|  5.16k|    return hb_array_t (arrayZ + start_offset, count);
  247|  5.16k|  }
_Z8hb_arrayIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSC_j:
  316|  51.9k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|  1.22M|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  1.16M|  {
   85|  1.16M|    if (unlikely (n > length))
  ------------------
  |  |  259|  1.16M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.16M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  1.16M|    length -= n;
   88|  1.16M|    backwards_length += n;
   89|  1.16M|    arrayZ += n;
   90|  1.16M|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|  1.16M|  {
   80|  1.16M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  1.16M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.16M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  1.16M|    return arrayZ[i];
   82|  1.16M|  }
_Z8hb_arrayIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE10hb_array_tIT_EPSC_j:
  316|  3.17k|{ return hb_array_t<T> (array, length); }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE7__len__Ev:
   99|  6.78k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__forward__Ej:
   84|  3.60k|  {
   85|  3.60k|    if (unlikely (n > length))
  ------------------
  |  |  259|  3.60k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.60k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  3.60k|    length -= n;
   88|  3.60k|    backwards_length += n;
   89|  3.60k|    arrayZ += n;
   90|  3.60k|  }
_ZNK10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEE11__item_at__Ej:
   79|  3.61k|  {
   80|  3.61k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  3.61k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.61k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  3.61k|    return arrayZ[i];
   82|  3.61k|  }
_ZNK10hb_array_tIKcE2asIN2OT6Layout4GSUBELj1ELPv0EEEPKT_v:
  257|  8.06M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  8.06M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  1.96M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 1.96M, False: 6.09M]
  ------------------
_ZN17hb_sorted_array_tIKN2OT17UnicodeValueRangeEEC2EPS2_j:
  337|  34.3k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT17UnicodeValueRangeEEC2EPS2_j:
   59|  34.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT4HVARELj1ELPv0EEEPKT_v:
  257|   694k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|   694k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|   687k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 687k, False: 6.10k]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4VVARELj1ELPv0EEEPKT_v:
  257|    225|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|    225|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|    213|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 213, False: 12]
  ------------------
_ZNK10hb_array_tIKcE2asIN2OT4VORGELj1ELPv0EEEPKT_v:
  257|  33.2k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  33.2k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 33.1k, False: 38]
  ------------------
_Z15hb_sorted_arrayIKN2OT16VertOriginMetricEE17hb_sorted_array_tIT_EPS4_j:
  427|     38|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT16VertOriginMetricEEC2EPS2_j:
  337|     38|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT16VertOriginMetricEEC2EPS2_j:
   59|     38|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIKN2OT16VertOriginMetricEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|     38|  {
  386|     38|    unsigned pos;
  387|       |
  388|     38|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 4, False: 34]
  ------------------
  389|      4|    {
  390|      4|      if (i)
  ------------------
  |  Branch (390:11): [True: 4, False: 0]
  ------------------
  391|      4|	*i = pos;
  392|      4|      return true;
  393|      4|    }
  394|       |
  395|     34|    if (i)
  ------------------
  |  Branch (395:9): [True: 34, False: 0]
  ------------------
  396|     34|    {
  397|     34|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 34]
  ------------------
  398|     34|      {
  399|     34|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 34, False: 0]
  ------------------
  400|     34|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 34]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 34]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|     34|      }
  410|     34|    }
  411|     34|    return false;
  412|     34|  }
_ZNK17hb_sorted_array_tIKN2OT16VertOriginMetricEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|     38|  {
  416|     38|    return hb_bsearch_impl (pos,
  417|     38|			    x,
  418|     38|			    this->arrayZ,
  419|     38|			    this->length,
  420|     38|			    sizeof (Type),
  421|     38|			    _hb_cmp_method<T, Type, Ts...>,
  422|     38|			    std::forward<Ts> (ds)...);
  423|     38|  }
_ZN10hb_array_tIKhEC2Ev:
   53|  3.68M|  hb_array_t () = default;
_ZN10hb_array_tIKhEC2EPS0_j:
   59|   464k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT10ClipRecordEEC2EPS2_j:
  337|   138k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT10ClipRecordEEC2EPS2_j:
   59|   138k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIN2OT4cff113accelerator_t7gname_tEEC2EPS3_j:
   59|  1.65k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIN2OT4cff113accelerator_t7gname_tEEC2IS3_LPv0EEERK10hb_array_tIT_E:
  345|  2.48k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN2OT7IntTypeIhLj1EEEEC2EPS3_j:
   59|   238k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT7IntTypeItLj2EEEEC2EPS3_j:
   59|  1.88M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT6RecordINS0_6ScriptEEEEC2EPS4_j:
  337|   385k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT6RecordINS0_6ScriptEEEEC2EPS4_j:
   59|   385k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT6RecordINS0_7LangSysEEEEC2EPS4_j:
  337|  98.6k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT6RecordINS0_7LangSysEEEEC2EPS4_j:
   59|  98.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPSA_j:
   59|  51.9k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPSA_j:
   59|  3.17k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPS9_j:
   59|   990k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEEEC2EPS8_j:
   59|   200k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT7IntTypeIjLj3EEEEC2EPS3_j:
   59|  96.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_4RuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPS9_j:
   59|  32.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPS9_j:
   59|   852k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT8OffsetToINS0_9ChainRuleINS0_6Layout11MediumTypesEEENS0_7IntTypeItLj2EEELb1EEEEC2EPS9_j:
   59|   435k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z15hb_sorted_arrayIKN2OT16BaseScriptRecordEE17hb_sorted_array_tIT_EPS4_j:
  427|  66.6k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT16BaseScriptRecordEEC2EPS2_j:
  337|  66.6k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT16BaseScriptRecordEEC2EPS2_j:
   59|  66.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT16BaseScriptRecordEE7bsearchIjEEPS2_RKT_S5_:
  371|  66.6k|  {
  372|  66.6k|    unsigned int i;
  373|  66.6k|    return bfind (x, &i) ? &this->arrayZ[i] : not_found;
  ------------------
  |  Branch (373:12): [True: 10, False: 66.6k]
  ------------------
  374|  66.6k|  }
_ZNK17hb_sorted_array_tIKN2OT16BaseScriptRecordEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  66.6k|  {
  386|  66.6k|    unsigned pos;
  387|       |
  388|  66.6k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 10, False: 66.6k]
  ------------------
  389|     10|    {
  390|     10|      if (i)
  ------------------
  |  Branch (390:11): [True: 10, False: 0]
  ------------------
  391|     10|	*i = pos;
  392|     10|      return true;
  393|     10|    }
  394|       |
  395|  66.6k|    if (i)
  ------------------
  |  Branch (395:9): [True: 66.6k, False: 0]
  ------------------
  396|  66.6k|    {
  397|  66.6k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 66.6k]
  ------------------
  398|  66.6k|      {
  399|  66.6k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 66.6k, False: 0]
  ------------------
  400|  66.6k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 66.6k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 66.6k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  66.6k|      }
  410|  66.6k|    }
  411|  66.6k|    return false;
  412|  66.6k|  }
_ZNK17hb_sorted_array_tIKN2OT16BaseScriptRecordEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  66.6k|  {
  416|  66.6k|    return hb_bsearch_impl (pos,
  417|  66.6k|			    x,
  418|  66.6k|			    this->arrayZ,
  419|  66.6k|			    this->length,
  420|  66.6k|			    sizeof (Type),
  421|  66.6k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  66.6k|			    std::forward<Ts> (ds)...);
  423|  66.6k|  }
_Z15hb_sorted_arrayIKN2OT3TagEE17hb_sorted_array_tIT_EPS4_j:
  427|      9|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIKN2OT3TagEEC2EPS2_j:
  337|      9|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIKN2OT3TagEEC2EPS2_j:
   59|      9|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIKN2OT3TagEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|      9|  {
  386|      9|    unsigned pos;
  387|       |
  388|      9|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 0, False: 9]
  ------------------
  389|      0|    {
  390|      0|      if (i)
  ------------------
  |  Branch (390:11): [True: 0, False: 0]
  ------------------
  391|      0|	*i = pos;
  392|      0|      return true;
  393|      0|    }
  394|       |
  395|      9|    if (i)
  ------------------
  |  Branch (395:9): [True: 9, False: 0]
  ------------------
  396|      9|    {
  397|      9|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 9]
  ------------------
  398|      9|      {
  399|      9|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 9, False: 0]
  ------------------
  400|      9|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 9]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 9]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|      9|      }
  410|      9|    }
  411|      9|    return false;
  412|      9|  }
_ZNK17hb_sorted_array_tIKN2OT3TagEE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|      9|  {
  416|      9|    return hb_bsearch_impl (pos,
  417|      9|			    x,
  418|      9|			    this->arrayZ,
  419|      9|			    this->length,
  420|      9|			    sizeof (Type),
  421|      9|			    _hb_cmp_method<T, Type, Ts...>,
  422|      9|			    std::forward<Ts> (ds)...);
  423|      9|  }
_ZN10hb_array_tIN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEC2EPS2_j:
   59|  54.9k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT4kernELj1ELPv0EEEPKT_v:
  257|  53.8k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  53.8k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  46.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 46.2k, False: 7.63k]
  ------------------
_ZN10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEC2EPS3_j:
   59|  19.4M|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKcE2asIN2OT4BASEELj1ELPv0EEEPKT_v:
  257|  33.3k|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  33.3k|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 33.1k, False: 204]
  ------------------
_Z8hb_arrayIKN2OT22MathGlyphVariantRecordEE10hb_array_tIT_EPS4_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT22MathGlyphVariantRecordEEC2EPS2_j:
   59|  66.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT22MathGlyphVariantRecordEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 0]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_Z8hb_arrayI26hb_ot_math_glyph_variant_tE10hb_array_tIT_EPS2_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tI26hb_ot_math_glyph_variant_tEC2EPS0_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT22MathGlyphVariantRecordEE11__forward__Ej:
   84|  33.3k|  {
   85|  33.3k|    if (unlikely (n > length))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  33.3k|    length -= n;
   88|  33.3k|    backwards_length += n;
   89|  33.3k|    arrayZ += n;
   90|  33.3k|  }
_ZNK10hb_array_tIKN2OT22MathGlyphVariantRecordEE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tI26hb_ot_math_glyph_variant_tE11__forward__Ej:
   84|  33.3k|  {
   85|  33.3k|    if (unlikely (n > length))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  33.3k|    length -= n;
   88|  33.3k|    backwards_length += n;
   89|  33.3k|    arrayZ += n;
   90|  33.3k|  }
_ZNK10hb_array_tI26hb_ot_math_glyph_variant_tE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tIKN2OT22MathGlyphVariantRecordEEneERKS3_:
  108|  33.3k|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (108:12): [True: 29, False: 33.3k]
  |  Branch (108:40): [True: 0, False: 33.3k]
  ------------------
_ZNK10hb_array_tI26hb_ot_math_glyph_variant_tEneERKS1_:
  108|     29|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (108:12): [True: 29, False: 0]
  |  Branch (108:40): [True: 0, False: 0]
  ------------------
_ZNK10hb_array_tIKN2OT22MathGlyphVariantRecordEE11__item_at__Ej:
   79|     29|  {
   80|     29|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     29|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     29|    return arrayZ[i];
   82|     29|  }
_ZNK10hb_array_tI26hb_ot_math_glyph_variant_tE11__item_at__Ej:
   79|     29|  {
   80|     29|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     29|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     29|    return arrayZ[i];
   82|     29|  }
_Z8hb_arrayIKN2OT19MathGlyphPartRecordEE10hb_array_tIT_EPS4_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIKN2OT19MathGlyphPartRecordEEC2EPS2_j:
   59|  66.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN2OT19MathGlyphPartRecordEE9sub_arrayEjPj:
  235|  33.3k|  {
  236|  33.3k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 33.3k, False: 0]
  |  Branch (236:26): [True: 0, False: 33.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  33.3k|    unsigned int count = length;
  240|  33.3k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  33.3k|    else
  243|  33.3k|      count -= start_offset;
  244|  33.3k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 33.3k, False: 0]
  ------------------
  245|  33.3k|      count = *seg_count = hb_min (count, *seg_count);
  246|  33.3k|    return hb_array_t (arrayZ + start_offset, count);
  247|  33.3k|  }
_Z8hb_arrayI23hb_ot_math_glyph_part_tE10hb_array_tIT_EPS2_j:
  316|  33.3k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tI23hb_ot_math_glyph_part_tEC2EPS0_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT19MathGlyphPartRecordEE11__forward__Ej:
   84|  33.3k|  {
   85|  33.3k|    if (unlikely (n > length))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  33.3k|    length -= n;
   88|  33.3k|    backwards_length += n;
   89|  33.3k|    arrayZ += n;
   90|  33.3k|  }
_ZNK10hb_array_tIKN2OT19MathGlyphPartRecordEE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZN10hb_array_tI23hb_ot_math_glyph_part_tE11__forward__Ej:
   84|  33.3k|  {
   85|  33.3k|    if (unlikely (n > length))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  33.3k|    length -= n;
   88|  33.3k|    backwards_length += n;
   89|  33.3k|    arrayZ += n;
   90|  33.3k|  }
_ZNK10hb_array_tI23hb_ot_math_glyph_part_tE7__len__Ev:
   99|  33.3k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tIKN2OT19MathGlyphPartRecordEEneERKS3_:
  108|  33.3k|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (108:12): [True: 22, False: 33.3k]
  |  Branch (108:40): [True: 0, False: 33.3k]
  ------------------
_ZNK10hb_array_tI23hb_ot_math_glyph_part_tEneERKS1_:
  108|     22|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (108:12): [True: 22, False: 0]
  |  Branch (108:40): [True: 0, False: 0]
  ------------------
_ZNK10hb_array_tIKN2OT19MathGlyphPartRecordEE11__item_at__Ej:
   79|     22|  {
   80|     22|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     22|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     22|    return arrayZ[i];
   82|     22|  }
_ZNK10hb_array_tI23hb_ot_math_glyph_part_tE11__item_at__Ej:
   79|     22|  {
   80|     22|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|     22|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|     22|    return arrayZ[i];
   82|     22|  }
_ZNK10hb_array_tIKcE2asIN2OT4MATHELj1ELPv0EEEPKT_v:
  257|  2.33M|  { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |   99|  2.33M|#define hb_min_size(T) hb_min_size<T>::value
  ------------------
                { return length < hb_min_size (T) ? &Null (T) : reinterpret_cast<const T *> (arrayZ); }
  ------------------
  |  |  124|  2.30M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (257:12): [True: 2.30M, False: 31.5k]
  ------------------
_ZN10hb_array_tIKN2OT7DataMapEEC2EPS2_j:
   59|  33.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKN2OT10NameRecordEEC2EPS2_j:
   59|  33.1k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tI18hb_ot_name_entry_tEC2EPS0_j:
   59|  32.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tI18hb_ot_name_entry_tEC2IS0_LPv0EEERK10hb_array_tIT_E:
  345|  32.6k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIN11hb_ot_map_t13feature_map_tEEC2EPS1_j:
   59|   511k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN11hb_ot_map_t13feature_map_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|   511k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN11hb_ot_map_t13feature_map_tEEC2IS1_LPv0EEERKS_IT_E:
   67|   511k|    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
_Z15hb_sorted_arrayIK7LangTagE17hb_sorted_array_tIT_EPS3_j:
  427|  49.3k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIK7LangTagEC2EPS1_j:
  337|  49.3k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIK7LangTagEC2EPS1_j:
   59|  49.3k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK17hb_sorted_array_tIK7LangTagE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  385|  49.3k|  {
  386|  49.3k|    unsigned pos;
  387|       |
  388|  49.3k|    if (bsearch_impl (x, &pos))
  ------------------
  |  Branch (388:9): [True: 0, False: 49.3k]
  ------------------
  389|      0|    {
  390|      0|      if (i)
  ------------------
  |  Branch (390:11): [True: 0, False: 0]
  ------------------
  391|      0|	*i = pos;
  392|      0|      return true;
  393|      0|    }
  394|       |
  395|  49.3k|    if (i)
  ------------------
  |  Branch (395:9): [True: 49.3k, False: 0]
  ------------------
  396|  49.3k|    {
  397|  49.3k|      switch (not_found)
  ------------------
  |  Branch (397:15): [True: 0, False: 49.3k]
  ------------------
  398|  49.3k|      {
  399|  49.3k|	case HB_NOT_FOUND_DONT_STORE:
  ------------------
  |  Branch (399:2): [True: 49.3k, False: 0]
  ------------------
  400|  49.3k|	  break;
  401|       |
  402|      0|	case HB_NOT_FOUND_STORE:
  ------------------
  |  Branch (402:2): [True: 0, False: 49.3k]
  ------------------
  403|      0|	  *i = to_store;
  404|      0|	  break;
  405|       |
  406|      0|	case HB_NOT_FOUND_STORE_CLOSEST:
  ------------------
  |  Branch (406:2): [True: 0, False: 49.3k]
  ------------------
  407|      0|	  *i = pos;
  408|      0|	  break;
  409|  49.3k|      }
  410|  49.3k|    }
  411|  49.3k|    return false;
  412|  49.3k|  }
_ZNK17hb_sorted_array_tIK7LangTagE12bsearch_implIjJEEEbRKT_PjDpT0_:
  415|  49.3k|  {
  416|  49.3k|    return hb_bsearch_impl (pos,
  417|  49.3k|			    x,
  418|  49.3k|			    this->arrayZ,
  419|  49.3k|			    this->length,
  420|  49.3k|			    sizeof (Type),
  421|  49.3k|			    _hb_cmp_method<T, Type, Ts...>,
  422|  49.3k|			    std::forward<Ts> (ds)...);
  423|  49.3k|  }
_ZN10hb_array_tIKN3CFF8number_tEEC2ILj513EEERAT__S2_:
   61|  3.87k|  constexpr hb_array_t (Type (&array_)[length_]) : hb_array_t (array_, length_) {}
_ZN10hb_array_tIKN3CFF8number_tEEC2EPS2_j:
   59|  7.74k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIKN3CFF8number_tEE9sub_arrayEjj:
  249|  3.87k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIKN3CFF8number_tEE9sub_arrayEjPj:
  235|  3.87k|  {
  236|  3.87k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 0, False: 3.87k]
  |  Branch (236:26): [True: 0, False: 0]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  3.87k|    unsigned int count = length;
  240|  3.87k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  3.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.87k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  3.87k|    else
  243|  3.87k|      count -= start_offset;
  244|  3.87k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 3.87k, False: 0]
  ------------------
  245|  3.87k|      count = *seg_count = hb_min (count, *seg_count);
  246|  3.87k|    return hb_array_t (arrayZ + start_offset, count);
  247|  3.87k|  }
_Z8hb_arrayIN19hb_ot_map_builder_t14feature_info_tEE10hb_array_tIT_EPS3_j:
  316|  48.6k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIN19hb_ot_map_builder_t14feature_info_tEEC2EPS1_j:
   59|  48.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIN19hb_ot_map_builder_t14feature_info_tEE5qsortEPFiPKvS4_E:
  199|  48.6k|  {
  200|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  201|  48.6k|    if (likely (length))
  ------------------
  |  |  258|  48.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 48.6k, False: 0]
  |  |  ------------------
  ------------------
  202|  48.6k|      hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
  203|  48.6k|    return hb_sorted_array_t<Type> (*this);
  204|  48.6k|  }
_ZN17hb_sorted_array_tIN19hb_ot_map_builder_t14feature_info_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  48.6k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIN11hb_ot_map_t12lookup_map_tEEC2EPS1_j:
   59|  28.6k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIN11hb_ot_map_t12lookup_map_tEE9sub_arrayEjj:
  249|  13.7k|  { return sub_array (start_offset, &seg_count); }
_ZNK10hb_array_tIN11hb_ot_map_t12lookup_map_tEE9sub_arrayEjPj:
  235|  13.7k|  {
  236|  13.7k|    if (!start_offset && !seg_count)
  ------------------
  |  Branch (236:9): [True: 12.3k, False: 1.43k]
  |  Branch (236:26): [True: 0, False: 12.3k]
  ------------------
  237|      0|      return *this;
  238|       |
  239|  13.7k|    unsigned int count = length;
  240|  13.7k|    if (unlikely (start_offset > count))
  ------------------
  |  |  259|  13.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 13.7k]
  |  |  ------------------
  ------------------
  241|      0|      count = 0;
  242|  13.7k|    else
  243|  13.7k|      count -= start_offset;
  244|  13.7k|    if (seg_count)
  ------------------
  |  Branch (244:9): [True: 13.7k, False: 0]
  ------------------
  245|  13.7k|      count = *seg_count = hb_min (count, *seg_count);
  246|  13.7k|    return hb_array_t (arrayZ + start_offset, count);
  247|  13.7k|  }
_ZN10hb_array_tIN11hb_ot_map_t12lookup_map_tEE5qsortEv:
  206|  13.7k|  {
  207|       |    //static_assert (hb_enable_if (hb_is_trivially_copy_assignable(Type)), "");
  208|  13.7k|    if (likely (length))
  ------------------
  |  |  258|  13.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 13.7k, False: 0]
  |  |  ------------------
  ------------------
  209|  13.7k|      hb_qsort (arrayZ, length, this->get_item_size (), Type::cmp);
  210|  13.7k|    return hb_sorted_array_t<Type> (*this);
  211|  13.7k|  }
_ZN17hb_sorted_array_tIN11hb_ot_map_t12lookup_map_tEEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  13.7k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIPN22hb_serialize_context_t8object_tEEC2EPS2_j:
   59|  4.86k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKPN22hb_serialize_context_t8object_tEEC2EPS3_j:
   59|  4.86k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tIN2OT11HBGlyphID16EE7__len__Ev:
   99|  70.0k|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tIN2OT11HBGlyphID16EE11__item_at__Ej:
   79|   239k|  {
   80|   239k|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|   239k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 239k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|      0|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|   239k|    return arrayZ[i];
   82|   239k|  }
_ZN10hb_array_tIN2OT11HBGlyphID16EE11__forward__Ej:
   84|   241k|  {
   85|   241k|    if (unlikely (n > length))
  ------------------
  |  |  259|   241k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 241k]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|   241k|    length -= n;
   88|   241k|    backwards_length += n;
   89|   241k|    arrayZ += n;
   90|   241k|  }
_ZN17hb_sorted_array_tIN2OT11HBGlyphID16EEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|  1.28k|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZNK17hb_sorted_array_tIN2OT11HBGlyphID16EEneERKS2_:
  355|  50.9k|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (355:12): [True: 49.6k, False: 1.28k]
  |  Branch (355:40): [True: 0, False: 1.28k]
  ------------------
_ZNK10hb_array_tIN2OT11HBGlyphID16EEneERKS2_:
  108|  49.6k|  { return this->arrayZ != o.arrayZ || this->length != o.length; }
  ------------------
  |  Branch (108:12): [True: 49.6k, False: 0]
  |  Branch (108:40): [True: 0, False: 0]
  ------------------
_ZN17hb_sorted_array_tIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEEC2EPS5_j:
  337|     66|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEEC2EPS5_j:
   59|     66|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEEC2IS5_LPv0EEERK10hb_array_tIT_E:
  345|     66|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_tEEC2EPS6_j:
   59|  1.99k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z15hb_sorted_arrayIN2OT11HBGlyphID16EE17hb_sorted_array_tIT_EPS3_j:
  427|  1.71k|{ return hb_sorted_array_t<T> (array, length); }
_ZN17hb_sorted_array_tIN2OT11HBGlyphID16EEC2EPS1_j:
  337|  1.71k|  constexpr hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
_ZN10hb_array_tIN2OT11HBGlyphID16EEC2EPS1_j:
   59|  4.33k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_Z8hb_arrayIN2OT11HBGlyphID16EE10hb_array_tIT_EPS3_j:
  316|  2.61k|{ return hb_array_t<T> (array, length); }
_ZN10hb_array_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEEC2EPS5_j:
   59|  1.71k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEEC2EPS6_j:
   59|  1.71k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN10hb_array_tIKjEC2EPS0_j:
   59|  6.96k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZN17hb_sorted_array_tIKN2OT11HBGlyphID16EEC2IS1_LPv0EEERK10hb_array_tIT_E:
  345|    900|    hb_iter_t<hb_sorted_array_t, Type&> () {}
_ZN10hb_array_tIKN2OT11HBGlyphID16EEC2IS1_LPv0EEERKS_IT_E:
   67|    900|    arrayZ (o.arrayZ), length (o.length), backwards_length (o.backwards_length) {}
_ZN10hb_array_tIN2OT11HBGlyphID16EEcvS_IKS1_EEv:
  118|  1.80k|  operator hb_array_t<const Type> () { return hb_array_t<const Type> (arrayZ, length); }
_ZNK10hb_array_tIKN11hb_ot_map_t12lookup_map_tEE5beginEv:
  111|   470k|  Type *begin () const { return arrayZ; }
_ZNK10hb_array_tIKN11hb_ot_map_t12lookup_map_tEE3endEv:
  112|   470k|  Type *end () const { return arrayZ + length; }
_ZN10hb_array_tIKN11hb_ot_map_t12lookup_map_tEEC2EPS2_j:
   59|  14.2k|  constexpr hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
_ZNK10hb_array_tI15hb_glyph_info_tE7__len__Ev:
   99|  20.0M|  unsigned __len__ () const { return length; }
_ZNK10hb_array_tI15hb_glyph_info_tE11__item_at__Ej:
   79|  28.5M|  {
   80|  28.5M|    if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  259|  28.5M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.95M, False: 26.6M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= length)) return CrapOrNull (Type);
  ------------------
  |  |  198|  1.95M|#define CrapOrNull(Type) CrapOrNullHelper<Type>::get ()
  ------------------
   81|  26.6M|    return arrayZ[i];
   82|  28.5M|  }
_ZN10hb_array_tI15hb_glyph_info_tE11__forward__Ej:
   84|  6.23M|  {
   85|  6.23M|    if (unlikely (n > length))
  ------------------
  |  |  259|  6.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.23M]
  |  |  ------------------
  ------------------
   86|      0|      n = length;
   87|  6.23M|    length -= n;
   88|  6.23M|    backwards_length += n;
   89|  6.23M|    arrayZ += n;
   90|  6.23M|  }
_ZN10hb_array_tI15hb_glyph_info_tE10__rewind__Ej:
   92|   933k|  {
   93|   933k|    if (unlikely (n > backwards_length))
  ------------------
  |  |  259|   933k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 933k]
  |  |  ------------------
  ------------------
   94|      0|      n = backwards_length;
   95|   933k|    length += n;
   96|   933k|    backwards_length -= n;
   97|   933k|    arrayZ -= n;
   98|   933k|  }

_ZNK15hb_atomic_int_tcviEv:
  188|  33.3M|  operator int () const { return get_relaxed (); }
_ZNK15hb_atomic_int_t11get_relaxedEv:
  192|  33.3M|  int get_relaxed () const { return hb_atomic_int_impl_get_relaxed (&v); }
  ------------------
  |  |   62|  33.3M|#define hb_atomic_int_impl_get_relaxed(AI)	__atomic_load_n ((AI), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GDEF_accelerator_tEE11get_acquireEv:
  211|  2.04M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  2.04M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN17hb_atomic_short_tC2Ev:
  166|  8.41M|  hb_atomic_short_t () = default;
_ZN17hb_atomic_short_taSEs:
  169|  8.89M|  hb_atomic_short_t& operator = (short v_) { set_relaxed (v_); return *this; }
_ZN17hb_atomic_short_t11set_relaxedEs:
  172|  8.89M|  void set_relaxed (short v_) { hb_atomic_int_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   60|  8.89M|#define hb_atomic_int_impl_set_relaxed(AI, V)	__atomic_store_n ((AI), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GDEF_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-aat-layout.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   199k|{
   71|   199k|  const void *O = O_; // Need lvalue
   72|   199k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   199k|}
_ZNK15hb_atomic_ptr_tIP9hb_blob_tE11get_acquireEv:
  211|  6.16M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  6.16M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP9hb_blob_tE7cmpexchEPKS0_S1_:
  212|   662k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|   662k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK17hb_atomic_short_tcvsEv:
  170|  5.02M|  operator short () const { return get_relaxed (); }
_ZNK17hb_atomic_short_t11get_relaxedEv:
  174|  5.02M|  short get_relaxed () const { return hb_atomic_int_impl_get_relaxed (&v); }
  ------------------
  |  |   62|  5.02M|#define hb_atomic_int_impl_get_relaxed(AI)	__atomic_load_n ((AI), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_int_tC2Ei:
  185|   622k|  constexpr hb_atomic_int_t (int v) : v (v) {}
_ZN15hb_atomic_int_taSEi:
  187|  13.2M|  hb_atomic_int_t& operator = (int v_) { set_relaxed (v_); return *this; }
_ZN15hb_atomic_int_t11set_relaxedEi:
  190|  13.2M|  void set_relaxed (int v_) { hb_atomic_int_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   60|  13.2M|#define hb_atomic_int_impl_set_relaxed(AI, V)	__atomic_store_n ((AI), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_int_t11set_releaseEi:
  191|  1.98k|  void set_release (int v_) { hb_atomic_int_impl_set (&v, v_); }
  ------------------
  |  |   61|  1.98k|#define hb_atomic_int_impl_set(AI, V)		__atomic_store_n ((AI), (V), __ATOMIC_RELEASE)
  ------------------
_ZNK15hb_atomic_int_t11get_acquireEv:
  193|  20.1k|  int get_acquire () const { return hb_atomic_int_impl_get (&v); }
  ------------------
  |  |   63|  20.1k|#define hb_atomic_int_impl_get(AI)		__atomic_load_n ((AI), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_int_t3incEv:
  194|  1.11M|  int inc () { return hb_atomic_int_impl_add (&v,  1); }
  ------------------
  |  |   59|  1.11M|#define hb_atomic_int_impl_add(AI, V)		__atomic_fetch_add ((AI), (V), __ATOMIC_ACQ_REL)
  ------------------
_ZN15hb_atomic_int_t3decEv:
  195|  1.63M|  int dec () { return hb_atomic_int_impl_add (&v, -1); }
  ------------------
  |  |   59|  1.63M|#define hb_atomic_int_impl_add(AI, V)		__atomic_fetch_add ((AI), (V), __ATOMIC_ACQ_REL)
  ------------------
_ZN15hb_atomic_ptr_tI20hb_user_data_array_tE4initEPS0_:
  208|   656k|  void init (T* v_ = nullptr) { set_relaxed (v_); }
_ZN15hb_atomic_ptr_tI20hb_user_data_array_tE11set_relaxedEPS0_:
  209|   689k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|   689k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tI20hb_user_data_array_tE11get_acquireEv:
  211|   791k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   791k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP17hb_ot_font_data_tE11get_acquireEv:
  211|   664k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   664k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIP17hb_ot_font_data_tE11set_relaxedES1_:
  209|  99.7k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  99.7k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIP23hb_fallback_font_data_tE11get_acquireEv:
  211|  99.7k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  99.7k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIP23hb_fallback_font_data_tE11set_relaxedES1_:
  209|  99.7k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  99.7k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIN2OT33hb_ot_layout_lookup_accelerator_tEEcvPT_IvEEv:
  215|   342k|  template <typename C> operator C * () const { return get_acquire (); }
_ZNK15hb_atomic_ptr_tIN2OT33hb_ot_layout_lookup_accelerator_tEE11get_acquireEv:
  211|  6.55M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  6.55M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GPOS_accelerator_tEE11get_relaxedEv:
  210|  2.42M|  T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
  ------------------
  |  |   66|  2.42M|#define hb_atomic_ptr_impl_get_relaxed(P)	__atomic_load_n ((P), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIN2OT33hb_ot_layout_lookup_accelerator_tEE7cmpexchEPKS1_PS1_:
  212|  53.5k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  53.5k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZN15hb_atomic_int_tC2Ev:
  184|   590k|  hb_atomic_int_t () = default;
_ZN15hb_atomic_ptr_tI20hb_user_data_array_tEC2Ev:
  205|   523k|  hb_atomic_ptr_t () = default;
_ZNK15hb_atomic_ptr_tI20hb_user_data_array_tE7cmpexchEPKS0_PS0_:
  212|  33.1k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.1k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tI18hb_language_item_tEcvPT_IS0_EEv:
  215|   138k|  template <typename C> operator C * () const { return get_acquire (); }
_ZNK15hb_atomic_ptr_tI18hb_language_item_tE11get_acquireEv:
  211|   138k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   138k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tI18hb_language_item_tE7cmpexchEPKS0_PS0_:
  212|    179|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|    179|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-common.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   298k|{
   71|   298k|  const void *O = O_; // Need lvalue
   72|   298k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   298k|}
_ZNK15hb_atomic_ptr_tIPK18hb_language_impl_tEcvPT_IS1_EEv:
  215|  65.4k|  template <typename C> operator C * () const { return get_acquire (); }
_ZNK15hb_atomic_ptr_tIPK18hb_language_impl_tE11get_acquireEv:
  211|  65.4k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  65.4k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPK18hb_language_impl_tE7cmpexchES2_S2_:
  212|      1|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      1|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18glyf_accelerator_tEE11get_acquireEv:
  211|   955k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   955k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18gvar_accelerator_tEE11get_acquireEv:
  211|  66.0k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  66.0k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18gvar_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  32.7k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  32.7k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18hmtx_accelerator_tEE11get_acquireEv:
  211|   758k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   758k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18hmtx_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18vmtx_accelerator_tEE11get_acquireEv:
  211|  99.9k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  99.9k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18vmtx_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18glyf_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZN15hb_atomic_ptr_tIP17hb_ot_face_data_tEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIP23hb_fallback_face_data_tEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIP9hb_blob_tEC2Ev:
  205|   799k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18cmap_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18hmtx_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18post_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18name_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18meta_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18vmtx_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18glyf_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18cff1_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18cff2_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18gvar_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18GDEF_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18GSUB_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18GPOS_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18CBDT_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT18sbix_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIPN2OT17SVG_accelerator_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIN9hb_face_t11plan_node_tEEC2Ev:
  205|  33.3k|  hb_atomic_ptr_t () = default;
_ZNK15hb_atomic_ptr_tIN9hb_face_t11plan_node_tEEcvPT_IS1_EEv:
  215|   599k|  template <typename C> operator C * () const { return get_acquire (); }
_ZNK15hb_atomic_ptr_tIN9hb_face_t11plan_node_tEE11get_acquireEv:
  211|   599k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   599k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP17hb_ot_face_data_tE11get_acquireEv:
  211|   648k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   648k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIP17hb_ot_face_data_tE11set_relaxedES1_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIP23hb_fallback_face_data_tE11get_acquireEv:
  211|  33.4k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  33.4k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIP23hb_fallback_face_data_tE11set_relaxedES1_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
hb-face.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  99.6k|{
   71|  99.6k|  const void *O = O_; // Need lvalue
   72|  99.6k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  99.6k|}
_ZNK15hb_atomic_ptr_tIPN2OT18cmap_accelerator_tEE11get_acquireEv:
  211|  2.89M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  2.89M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18cmap_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZN15hb_atomic_ptr_tIP17hb_ot_font_data_tEC2Ev:
  205|  33.2k|  hb_atomic_ptr_t () = default;
_ZN15hb_atomic_ptr_tIP23hb_fallback_font_data_tEC2Ev:
  205|  33.2k|  hb_atomic_ptr_t () = default;
hb-font.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  66.5k|{
   71|  66.5k|  const void *O = O_; // Need lvalue
   72|  66.5k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  66.5k|}
hb-ot-color.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   166k|{
   71|   166k|  const void *O = O_; // Need lvalue
   72|   166k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   166k|}
_ZNK15hb_atomic_ptr_tIPN2OT17SVG_accelerator_tEE11get_acquireEv:
  211|   100k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   100k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT17SVG_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18CBDT_accelerator_tEE11get_acquireEv:
  211|   850k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   850k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18CBDT_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18sbix_accelerator_tEE11get_acquireEv:
  211|   850k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   850k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18sbix_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZN15hb_atomic_ptr_tIP9hb_blob_tE11set_relaxedES1_:
  209|   799k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|   799k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18cmap_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18hmtx_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPtE11get_acquireEv:
  211|  32.9k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  32.9k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18post_accelerator_tEE11get_acquireEv:
  211|  99.7k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  99.7k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18post_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18name_accelerator_tEE11get_acquireEv:
  211|   166k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   166k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18name_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18meta_accelerator_tEE11get_acquireEv:
  211|   100k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   100k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18meta_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18vmtx_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18glyf_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tI11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EEE11get_relaxedEv:
  210|  32.7k|  T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
  ------------------
  |  |   66|  32.7k|#define hb_atomic_ptr_impl_get_relaxed(P)	__atomic_load_n ((P), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18cff1_accelerator_tEE11get_acquireEv:
  211|   812k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   812k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18cff1_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18cff2_accelerator_tEE11get_acquireEv:
  211|   594k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   594k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18cff2_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18gvar_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18GDEF_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GSUB_accelerator_tEE11get_acquireEv:
  211|  8.37M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  8.37M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18GSUB_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GPOS_accelerator_tEE11get_acquireEv:
  211|  2.62M|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  2.62M|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18GPOS_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18CBDT_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT18sbix_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tIPN2OT17SVG_accelerator_tEE11set_relaxedES2_:
  209|  33.3k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  33.3k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZN15hb_atomic_ptr_tI11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EEE11set_relaxedEPS5_:
  209|  32.7k|  void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
  ------------------
  |  |   65|  32.7k|#define hb_atomic_ptr_impl_set_relaxed(P, V)	__atomic_store_n ((P), (V), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tI11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EEE11get_acquireEv:
  211|    829|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|    829|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tI11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EEE7cmpexchEPKS5_PS5_:
  212|    829|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|    829|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPtE7cmpexchEPKtS0_:
  212|    210|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|    210|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GSUB_accelerator_tEE11get_relaxedEv:
  210|  3.51M|  T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
  ------------------
  |  |   66|  3.51M|#define hb_atomic_ptr_impl_get_relaxed(P)	__atomic_load_n ((P), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIP15hb_font_funcs_tE11get_acquireEv:
  211|  98.6k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  98.6k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
hb-ot-font.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   135k|{
   71|   135k|  const void *O = O_; // Need lvalue
   72|   135k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   135k|}
_ZNK15hb_atomic_ptr_tI10hb_cache_tILj24ELj16ELj8ELb1EEE11get_acquireEv:
  211|  88.8k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  88.8k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tI10hb_cache_tILj24ELj16ELj8ELb1EEE7cmpexchEPKS1_PS1_:
  212|  1.98k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  1.98k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tI10hb_cache_tILj24ELj16ELj8ELb1EEEptEv:
  214|  68.5k|  T * operator -> () const                    { return get_acquire (); }
_ZN15hb_atomic_ptr_tI11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EEEC2Ev:
  205|  32.7k|  hb_atomic_ptr_t () = default;
_ZNK15hb_atomic_ptr_tIPN2OT18cff1_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18cff2_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  32.5k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  32.5k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZN15hb_atomic_ptr_tIPtEC2Ev:
  205|  32.7k|  hb_atomic_ptr_t () = default;
_ZNK15hb_atomic_ptr_tIPN2OT18post_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIP15hb_font_funcs_tE7cmpexchEPKS0_S1_:
  212|      2|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      2|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tI10hb_cache_tILj24ELj16ELj8ELb1EEE11get_relaxedEv:
  210|  98.6k|  T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); }
  ------------------
  |  |   66|  98.6k|#define hb_atomic_ptr_impl_get_relaxed(P)	__atomic_load_n ((P), __ATOMIC_RELAXED)
  ------------------
_ZNK15hb_atomic_ptr_tIP15hb_draw_funcs_tE11get_acquireEv:
  211|   106k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   106k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP15hb_draw_funcs_tE7cmpexchEPKS0_S1_:
  212|      2|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      2|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-ot-layout.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   184k|{
   71|   184k|  const void *O = O_; // Need lvalue
   72|   184k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   184k|}
_ZNK15hb_atomic_ptr_tIPN2OT18GSUB_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIPN2OT18GPOS_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-ot-math.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  33.2k|{
   71|  33.2k|  const void *O = O_; // Need lvalue
   72|  33.2k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  33.2k|}
_ZNK15hb_atomic_ptr_tIPN2OT18meta_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-ot-meta.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  33.2k|{
   71|  33.2k|  const void *O = O_; // Need lvalue
   72|  33.2k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  33.2k|}
hb-ot-metrics.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  33.2k|{
   71|  33.2k|  const void *O = O_; // Need lvalue
   72|  33.2k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  33.2k|}
hb-ot-name.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  33.2k|{
   71|  33.2k|  const void *O = O_; // Need lvalue
   72|  33.2k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  33.2k|}
_ZNK15hb_atomic_ptr_tIPN2OT18name_accelerator_tEE7cmpexchEPKS1_S2_:
  212|  33.2k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.2k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIP17hb_ot_font_data_tE7cmpexchEPKS0_S1_:
  212|  33.0k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.0k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-shape-plan.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|   115k|{
   71|   115k|  const void *O = O_; // Need lvalue
   72|   115k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|   115k|}
_ZNK15hb_atomic_ptr_tIP17hb_ot_face_data_tE7cmpexchEPKS0_S1_:
  212|  33.1k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  33.1k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIN9hb_face_t11plan_node_tEE7cmpexchEPKS1_PS1_:
  212|  48.9k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  48.9k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tIP17hb_shaper_entry_tE11get_acquireEv:
  211|   615k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   615k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP17hb_shaper_entry_tE7cmpexchEPKS0_S1_:
  212|      1|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      1|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-shaper.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|      1|{
   71|      1|  const void *O = O_; // Need lvalue
   72|      1|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|      1|}
_ZNK15hb_atomic_ptr_tIP16hb_paint_funcs_tE11get_acquireEv:
  211|  11.1k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  11.1k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
hb-paint-extents.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|      4|{
   71|      4|  const void *O = O_; // Need lvalue
   72|      4|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|      4|}
_ZNK15hb_atomic_ptr_tIP16hb_paint_funcs_tE7cmpexchEPKS0_S1_:
  212|      2|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      2|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
_ZNK15hb_atomic_ptr_tI22arabic_fallback_plan_tE7cmpexchEPKS0_PS0_:
  212|  1.05k|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|  1.05k|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-ot-shaper-arabic.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|  1.05k|{
   71|  1.05k|  const void *O = O_; // Need lvalue
   72|  1.05k|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|  1.05k|}
_ZNK15hb_atomic_ptr_tI22arabic_fallback_plan_tEcvPT_IS0_EEv:
  215|  2.79k|  template <typename C> operator C * () const { return get_acquire (); }
_ZNK15hb_atomic_ptr_tI22arabic_fallback_plan_tE11get_acquireEv:
  211|  2.79k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|  2.79k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP18hb_unicode_funcs_tE11get_acquireEv:
  211|   154k|  T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); }
  ------------------
  |  |   67|   154k|#define hb_atomic_ptr_impl_get(P)		__atomic_load_n ((P), __ATOMIC_ACQUIRE)
  ------------------
_ZNK15hb_atomic_ptr_tIP18hb_unicode_funcs_tE7cmpexchEPKS0_S1_:
  212|      2|  bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); }
  ------------------
  |  |   74|      2|#define hb_atomic_ptr_impl_cmpexch(P,O,N)	_hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N))
  ------------------
hb-ucd.cc:_ZL28_hb_atomic_ptr_impl_cmplexchPPKvS0_S0_:
   70|      2|{
   71|      2|  const void *O = O_; // Need lvalue
   72|      2|  return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);
   73|      2|}

_ZN13hb_bit_page_t5init0Ev:
   92|   880k|  void init0 () { v.init0 (); }
_ZN13hb_bit_page_t5init1Ev:
   93|  1.23M|  void init1 () { v.init1 (); }
_ZN13hb_bit_page_t3addEj:
  110|  80.4k|  void add (hb_codepoint_t g) { elt (g) |= mask (g); }
_ZN13hb_bit_page_t3delEj:
  111|  5.21M|  void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
_ZN13hb_bit_page_t9add_rangeEjj:
  116|  77.5k|  {
  117|  77.5k|    elt_t *la = &elt (a);
  118|  77.5k|    elt_t *lb = &elt (b);
  119|  77.5k|    if (la == lb)
  ------------------
  |  Branch (119:9): [True: 31.2k, False: 46.2k]
  ------------------
  120|  31.2k|      *la |= (mask (b) << 1) - mask(a);
  121|  46.2k|    else
  122|  46.2k|    {
  123|  46.2k|      *la |= ~(mask (a) - 1);
  124|  46.2k|      la++;
  125|       |
  126|  46.2k|      hb_memset (la, 0xff, (char *) lb - (char *) la);
  127|       |
  128|  46.2k|      *lb |= ((mask (b) << 1) - 1);
  129|  46.2k|    }
  130|  77.5k|  }
_ZN13hb_bit_page_t9del_rangeEjj:
  132|  29.1k|  {
  133|  29.1k|    elt_t *la = &elt (a);
  134|  29.1k|    elt_t *lb = &elt (b);
  135|  29.1k|    if (la == lb)
  ------------------
  |  Branch (135:9): [True: 8.83k, False: 20.3k]
  ------------------
  136|  8.83k|      *la &= ~((mask (b) << 1) - mask(a));
  137|  20.3k|    else
  138|  20.3k|    {
  139|  20.3k|      *la &= mask (a) - 1;
  140|  20.3k|      la++;
  141|       |
  142|  20.3k|      hb_memset (la, 0, (char *) lb - (char *) la);
  143|       |
  144|  20.3k|      *lb &= ~((mask (b) << 1) - 1);
  145|  20.3k|    }
  146|  29.1k|  }
_ZN13hb_bit_page_t3eltEj:
  328|  5.50M|  elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; }
_ZN13hb_bit_page_t4maskEj:
  330|  5.50M|  static constexpr elt_t mask (hb_codepoint_t g) { return elt_t (1) << (g & ELT_MASK); }
_ZN16hb_vector_size_tIyLj64EE5init0Ev:
   46|   880k|  {
   47|  7.92M|    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
  ------------------
  |  Branch (47:30): [True: 7.04M, False: 880k]
  ------------------
   48|  7.04M|      v[i] = 0;
   49|   880k|  }
_ZN16hb_vector_size_tIyLj64EE5init1Ev:
   51|  1.23M|  {
   52|  11.1M|    for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
  ------------------
  |  Branch (52:30): [True: 9.90M, False: 1.23M]
  ------------------
   53|  9.90M|      v[i] = (elt_t) -1;
   54|  1.23M|  }
_ZN16hb_vector_size_tIyLj64EEixEj:
   42|  5.50M|  elt_t& operator [] (unsigned int i) { return v[i]; }

_ZN23hb_bit_set_invertible_t4initEv:
   53|  98.5k|  void init () { s.init (); inverted = false; }
_ZN23hb_bit_set_invertible_t4finiEv:
   54|  98.5k|  void fini () { s.fini (); }
_ZN23hb_bit_set_invertible_t3addEj:
  106|  85.8k|  void add (hb_codepoint_t g) { unlikely (inverted) ? s.del (g) : s.add (g); }
  ------------------
  |  |  259|  85.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 85.8k]
  |  |  ------------------
  ------------------
_ZN23hb_bit_set_invertible_t9add_rangeEjj:
  108|  87.1k|  { return unlikely (inverted) ? ((void) s.del_range (a, b), true) : s.add_range (a, b); }
  ------------------
  |  |  259|  87.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 87.1k]
  |  |  ------------------
  ------------------
_ZN23hb_bit_set_invertible_t3delEj:
  124|  5.83M|  void del (hb_codepoint_t g) { unlikely (inverted) ? s.add (g) : s.del (g); }
  ------------------
  |  |  259|  5.83M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.83M]
  |  |  ------------------
  ------------------
_ZN23hb_bit_set_invertible_t9del_rangeEjj:
  126|  24.6k|  { unlikely (inverted) ? (void) s.add_range (a, b) : s.del_range (a, b); }
  ------------------
  |  |  259|  24.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 24.6k]
  |  |  ------------------
  ------------------
_ZN23hb_bit_set_invertible_tC2Ev:
   40|  98.5k|  hb_bit_set_invertible_t () = default;

_ZN12hb_bit_set_t4initEv:
   56|  98.5k|  {
   57|  98.5k|    successful = true;
   58|  98.5k|    population = 0;
   59|  98.5k|    last_page_lookup = 0;
   60|  98.5k|    page_map.init ();
   61|  98.5k|    pages.init ();
   62|  98.5k|  }
_ZN12hb_bit_set_t4finiEv:
   64|  98.5k|  {
   65|  98.5k|    page_map.fini ();
   66|  98.5k|    pages.fini ();
   67|  98.5k|  }
_ZNK12hb_bit_set_t10page_map_t3cmpERKS0_:
   72|  8.11M|    int cmp (const page_map_t &o) const { return cmp (o.major); }
_ZNK12hb_bit_set_t10page_map_t3cmpEj:
   73|  8.11M|    int cmp (uint32_t o_major) const { return (int) o_major - (int) major; }
_ZN12hb_bit_set_t6resizeEjbb:
   89|   896k|  {
   90|   896k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|   896k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 896k]
  |  |  ------------------
  ------------------
   91|       |
   92|   896k|    if (pages.length == 0 && count == 1)
  ------------------
  |  Branch (92:9): [True: 35.2k, False: 861k]
  |  Branch (92:30): [True: 35.2k, False: 0]
  ------------------
   93|  35.2k|      exact_size = true; // Most sets are small and local
   94|       |
   95|   896k|    if (unlikely (!pages.resize (count, clear, exact_size) || !page_map.resize (count, clear, exact_size)))
  ------------------
  |  |  259|  1.79M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 959, False: 895k]
  |  |  |  Branch (259:47): [True: 567, False: 895k]
  |  |  |  Branch (259:47): [True: 392, False: 895k]
  |  |  ------------------
  ------------------
   96|    959|    {
   97|    959|      pages.resize (page_map.length, clear, exact_size);
   98|    959|      successful = false;
   99|    959|      return false;
  100|    959|    }
  101|   895k|    return true;
  102|   896k|  }
_ZN12hb_bit_set_t5dirtyEv:
  146|  5.36M|  void dirty () { population = UINT_MAX; }
_ZN12hb_bit_set_t3addEj:
  150|  85.8k|  {
  151|  85.8k|    if (unlikely (!successful)) return;
  ------------------
  |  |  259|  85.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.53k, False: 81.3k]
  |  |  ------------------
  ------------------
  152|  81.3k|    if (unlikely (g == INVALID)) return;
  ------------------
  |  |  259|  81.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 81.3k]
  |  |  ------------------
  ------------------
  153|  81.3k|    dirty ();
  154|  81.3k|    page_t *page = page_for (g, true); if (unlikely (!page)) return;
  ------------------
  |  |  259|  81.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 868, False: 80.4k]
  |  |  ------------------
  ------------------
  155|  80.4k|    page->add (g);
  156|  80.4k|  }
_ZN12hb_bit_set_t9add_rangeEjj:
  158|  87.1k|  {
  159|  87.1k|    if (unlikely (!successful)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
  ------------------
  |  |  259|  87.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.97k, False: 79.1k]
  |  |  ------------------
  ------------------
  160|  79.1k|    if (unlikely (a > b || a == INVALID || b == INVALID)) return false;
  ------------------
  |  |  259|   264k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25.7k, False: 53.3k]
  |  |  |  Branch (259:47): [True: 25.7k, False: 53.3k]
  |  |  |  Branch (259:47): [True: 0, False: 53.3k]
  |  |  |  Branch (259:47): [True: 0, False: 53.3k]
  |  |  ------------------
  ------------------
  161|  53.3k|    dirty ();
  162|  53.3k|    unsigned int ma = get_major (a);
  163|  53.3k|    unsigned int mb = get_major (b);
  164|  53.3k|    if (ma == mb)
  ------------------
  |  Branch (164:9): [True: 29.0k, False: 24.3k]
  ------------------
  165|  29.0k|    {
  166|  29.0k|      page_t *page = page_for (a, true); if (unlikely (!page)) return false;
  ------------------
  |  |  259|  29.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 29.0k]
  |  |  ------------------
  ------------------
  167|  29.0k|      page->add_range (a, b);
  168|  29.0k|    }
  169|  24.3k|    else
  170|  24.3k|    {
  171|  24.3k|      page_t *page = page_for (a, true); if (unlikely (!page)) return false;
  ------------------
  |  |  259|  24.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18, False: 24.2k]
  |  |  ------------------
  ------------------
  172|  24.2k|      page->add_range (a, major_start (ma + 1) - 1);
  173|       |
  174|  1.26M|      for (unsigned int m = ma + 1; m < mb; m++)
  ------------------
  |  Branch (174:37): [True: 1.23M, False: 24.2k]
  ------------------
  175|  1.23M|      {
  176|  1.23M|	page = page_for (major_start (m), true); if (unlikely (!page)) return false;
  ------------------
  |  |  259|  1.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 58, False: 1.23M]
  |  |  ------------------
  ------------------
  177|  1.23M|	page->init1 ();
  178|  1.23M|      }
  179|       |
  180|  24.2k|      page = page_for (b, true); if (unlikely (!page)) return false;
  ------------------
  |  |  259|  24.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 24.2k]
  |  |  ------------------
  ------------------
  181|  24.2k|      page->add_range (major_start (mb), b);
  182|  24.2k|    }
  183|  53.2k|    return true;
  184|  53.3k|  }
_ZN12hb_bit_set_t3delEj:
  269|  5.83M|  {
  270|  5.83M|    if (unlikely (!successful)) return;
  ------------------
  |  |  259|  5.83M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 619k, False: 5.21M]
  |  |  ------------------
  ------------------
  271|  5.21M|    page_t *page = page_for (g);
  272|  5.21M|    if (!page)
  ------------------
  |  Branch (272:9): [True: 0, False: 5.21M]
  ------------------
  273|      0|      return;
  274|  5.21M|    dirty ();
  275|  5.21M|    page->del (g);
  276|  5.21M|  }
_ZN12hb_bit_set_t9del_pagesEii:
  280|  21.6k|  {
  281|  21.6k|    if (ds <= de)
  ------------------
  |  Branch (281:9): [True: 14.5k, False: 7.04k]
  ------------------
  282|  14.5k|    {
  283|       |      // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
  284|       |      // before attempting to rewrite the page map.
  285|  14.5k|      hb_vector_t<unsigned> compact_workspace;
  286|  14.5k|      if (unlikely (!allocate_compact_workspace (compact_workspace))) return;
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 14.5k]
  |  |  ------------------
  ------------------
  287|       |
  288|  14.5k|      unsigned int write_index = 0;
  289|   985k|      for (unsigned int i = 0; i < page_map.length; i++)
  ------------------
  |  Branch (289:32): [True: 971k, False: 14.5k]
  ------------------
  290|   971k|      {
  291|   971k|	int m = (int) page_map[i].major;
  292|   971k|	if (m < ds || de < m)
  ------------------
  |  Branch (292:6): [True: 55.0k, False: 916k]
  |  Branch (292:16): [True: 154k, False: 761k]
  ------------------
  293|   209k|	  page_map[write_index++] = page_map[i];
  294|   971k|      }
  295|  14.5k|      compact (compact_workspace, write_index);
  296|  14.5k|      resize (write_index);
  297|  14.5k|    }
  298|  21.6k|  }
_ZN12hb_bit_set_t9del_rangeEjj:
  303|  24.6k|  {
  304|  24.6k|    if (unlikely (!successful)) return;
  ------------------
  |  |  259|  24.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.04k, False: 21.6k]
  |  |  ------------------
  ------------------
  305|  21.6k|    if (unlikely (a > b || a == INVALID)) return;
  ------------------
  |  |  259|  43.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 21.6k]
  |  |  |  Branch (259:47): [True: 0, False: 21.6k]
  |  |  |  Branch (259:47): [True: 0, False: 21.6k]
  |  |  ------------------
  ------------------
  306|  21.6k|    dirty ();
  307|  21.6k|    unsigned int ma = get_major (a);
  308|  21.6k|    unsigned int mb = get_major (b);
  309|       |    /* Delete pages from ds through de if ds <= de. */
  310|  21.6k|    int ds = (a == major_start (ma))? (int) ma: (int) (ma + 1);
  ------------------
  |  Branch (310:14): [True: 10.1k, False: 11.5k]
  ------------------
  311|  21.6k|    int de = (b + 1 == major_start (mb + 1))? (int) mb: ((int) mb - 1);
  ------------------
  |  Branch (311:14): [True: 2.18k, False: 19.4k]
  ------------------
  312|  21.6k|    if (ds > de || (int) ma < ds)
  ------------------
  |  Branch (312:9): [True: 7.04k, False: 14.5k]
  |  Branch (312:20): [True: 9.02k, False: 5.57k]
  ------------------
  313|  16.0k|    {
  314|  16.0k|      page_t *page = page_for (a);
  315|  16.0k|      if (page)
  ------------------
  |  Branch (315:11): [True: 16.0k, False: 0]
  ------------------
  316|  16.0k|      {
  317|  16.0k|	if (ma == mb)
  ------------------
  |  Branch (317:6): [True: 6.47k, False: 9.59k]
  ------------------
  318|  6.47k|	  page->del_range (a, b);
  319|  9.59k|	else
  320|  9.59k|	  page->del_range (a, major_start (ma + 1) - 1);
  321|  16.0k|      }
  322|  16.0k|    }
  323|  21.6k|    if (de < (int) mb && ma != mb)
  ------------------
  |  Branch (323:9): [True: 19.4k, False: 2.18k]
  |  Branch (323:26): [True: 13.1k, False: 6.34k]
  ------------------
  324|  13.1k|    {
  325|  13.1k|      page_t *page = page_for (b);
  326|  13.1k|      if (page)
  ------------------
  |  Branch (326:11): [True: 13.1k, False: 0]
  ------------------
  327|  13.1k|	page->del_range (major_start (mb), b);
  328|  13.1k|    }
  329|  21.6k|    del_pages (ds, de);
  330|  21.6k|  }
_ZN12hb_bit_set_t26allocate_compact_workspaceER11hb_vector_tIjLb0EE:
  432|  14.5k|  {
  433|  14.5k|    if (unlikely (!workspace.resize_exact (pages.length)))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 14.5k]
  |  |  ------------------
  ------------------
  434|     10|    {
  435|     10|      successful = false;
  436|     10|      return false;
  437|     10|    }
  438|       |
  439|  14.5k|    return true;
  440|  14.5k|  }
_ZN12hb_bit_set_t7compactER11hb_vector_tIjLb0EEj:
  448|  14.5k|  {
  449|  14.5k|    assert(workspace.length == pages.length);
  450|      0|    hb_vector_t<unsigned>& old_index_to_page_map_index = workspace;
  451|       |
  452|  14.5k|    hb_fill (old_index_to_page_map_index.writer(), 0xFFFFFFFF);
  453|   224k|    for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (453:26): [True: 209k, False: 14.5k]
  ------------------
  454|   209k|      old_index_to_page_map_index[page_map[i].index] =  i;
  455|       |
  456|  14.5k|    compact_pages (old_index_to_page_map_index);
  457|  14.5k|  }
_ZN12hb_bit_set_t13compact_pagesERK11hb_vector_tIjLb0EE:
  459|  14.5k|  {
  460|  14.5k|    unsigned int write_index = 0;
  461|   985k|    for (unsigned int i = 0; i < pages.length; i++)
  ------------------
  |  Branch (461:30): [True: 971k, False: 14.5k]
  ------------------
  462|   971k|    {
  463|   971k|      if (old_index_to_page_map_index[i] == 0xFFFFFFFF) continue;
  ------------------
  |  Branch (463:11): [True: 761k, False: 209k]
  ------------------
  464|       |
  465|   209k|      if (write_index < i)
  ------------------
  |  Branch (465:11): [True: 73.6k, False: 136k]
  ------------------
  466|  73.6k|	pages[write_index] = pages[i];
  467|       |
  468|   209k|      page_map[old_index_to_page_map_index[i]].index = write_index;
  469|   209k|      write_index++;
  470|   209k|    }
  471|  14.5k|  }
_ZN12hb_bit_set_t8page_forEjb:
  900|  6.63M|  {
  901|  6.63M|    unsigned major = get_major (g);
  902|       |
  903|       |    /* The extra page_map length is necessary; can't just rely on vector here,
  904|       |     * since the next check would be tricked because a null page also has
  905|       |     * major==0, which we can't distinguish from an actualy major==0 page... */
  906|  6.63M|    unsigned i = last_page_lookup;
  907|  6.63M|    if (likely (i < page_map.length))
  ------------------
  |  |  258|  6.63M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 6.59M, False: 44.9k]
  |  |  ------------------
  ------------------
  908|  6.59M|    {
  909|  6.59M|      auto &cached_page = page_map.arrayZ[i];
  910|  6.59M|      if (cached_page.major == major)
  ------------------
  |  Branch (910:11): [True: 5.26M, False: 1.32M]
  ------------------
  911|  5.26M|	return &pages.arrayZ[cached_page.index];
  912|  6.59M|    }
  913|       |
  914|  1.36M|    page_map_t map = {major, pages.length};
  915|  1.36M|    if (!page_map.bfind (map, &i, HB_NOT_FOUND_STORE_CLOSEST))
  ------------------
  |  Branch (915:9): [True: 881k, False: 486k]
  ------------------
  916|   881k|    {
  917|   881k|      if (!insert)
  ------------------
  |  Branch (917:11): [True: 0, False: 881k]
  ------------------
  918|      0|        return nullptr;
  919|       |
  920|   881k|      if (unlikely (!resize (pages.length + 1)))
  ------------------
  |  |  259|   881k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 959, False: 880k]
  |  |  ------------------
  ------------------
  921|    959|	return nullptr;
  922|       |
  923|   880k|      pages.arrayZ[map.index].init0 ();
  924|   880k|      memmove (page_map.arrayZ + i + 1,
  925|   880k|	       page_map.arrayZ + i,
  926|   880k|	       (page_map.length - 1 - i) * page_map.item_size);
  927|   880k|      page_map.arrayZ[i] = map;
  928|   880k|    }
  929|       |
  930|  1.36M|    last_page_lookup = i;
  931|  1.36M|    return &pages.arrayZ[page_map.arrayZ[i].index];
  932|  1.36M|  }
_ZNK12hb_bit_set_t9get_majorEj:
  965|  6.78M|  unsigned int get_major (hb_codepoint_t g) const { return g >> page_t::PAGE_BITS_LOG_2; }
_ZNK12hb_bit_set_t11major_startEj:
  967|  1.35M|  hb_codepoint_t major_start (unsigned int major) const { return major << page_t::PAGE_BITS_LOG_2; }
_ZN12hb_bit_set_tC2Ev:
   38|  98.5k|  hb_bit_set_t () = default;
_ZN12hb_bit_set_tD2Ev:
   39|  98.5k|  ~hb_bit_set_t () = default;

hb_blob_create:
   74|  86.7k|{
   75|  86.7k|  if (!length)
  ------------------
  |  Branch (75:7): [True: 0, False: 86.7k]
  ------------------
   76|      0|  {
   77|      0|    if (destroy)
  ------------------
  |  Branch (77:9): [True: 0, False: 0]
  ------------------
   78|      0|      destroy (user_data);
   79|      0|    return hb_blob_get_empty ();
   80|      0|  }
   81|       |
   82|  86.7k|  hb_blob_t *blob = hb_blob_create_or_fail (data, length, mode,
   83|  86.7k|					    user_data, destroy);
   84|  86.7k|  return likely (blob) ? blob : hb_blob_get_empty ();
  ------------------
  |  |  258|  86.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 86.5k, False: 230]
  |  |  ------------------
  ------------------
   85|  86.7k|}
hb_blob_create_or_fail:
  112|  86.7k|{
  113|  86.7k|  hb_blob_t *blob;
  114|       |
  115|  86.7k|  if (length >= 1u << 31 ||
  ------------------
  |  Branch (115:7): [True: 0, False: 86.7k]
  ------------------
  116|  86.7k|      !(blob = hb_object_create<hb_blob_t> ()))
  ------------------
  |  Branch (116:7): [True: 230, False: 86.5k]
  ------------------
  117|    230|  {
  118|    230|    if (destroy)
  ------------------
  |  Branch (118:9): [True: 201, False: 29]
  ------------------
  119|    201|      destroy (user_data);
  120|    230|    return nullptr;
  121|    230|  }
  122|       |
  123|  86.5k|  blob->data = data;
  124|  86.5k|  blob->length = length;
  125|  86.5k|  blob->mode = mode;
  126|       |
  127|  86.5k|  blob->user_data = user_data;
  128|  86.5k|  blob->destroy = destroy;
  129|       |
  130|  86.5k|  if (blob->mode == HB_MEMORY_MODE_DUPLICATE) {
  ------------------
  |  Branch (130:7): [True: 0, False: 86.5k]
  ------------------
  131|      0|    blob->mode = HB_MEMORY_MODE_READONLY;
  132|      0|    if (!blob->try_make_writable ())
  ------------------
  |  Branch (132:9): [True: 0, False: 0]
  ------------------
  133|      0|    {
  134|      0|      hb_blob_destroy (blob);
  135|      0|      return nullptr;
  136|      0|    }
  137|      0|  }
  138|       |
  139|  86.5k|  return blob;
  140|  86.5k|}
hb_blob_create_sub_blob:
  172|  1.35M|{
  173|  1.35M|  hb_blob_t *blob;
  174|       |
  175|  1.35M|  if (!length || !parent || offset >= parent->length)
  ------------------
  |  Branch (175:7): [True: 1.28M, False: 60.9k]
  |  Branch (175:18): [True: 0, False: 60.9k]
  |  Branch (175:29): [True: 7.47k, False: 53.4k]
  ------------------
  176|  1.29M|    return hb_blob_get_empty ();
  177|       |
  178|  53.4k|  hb_blob_make_immutable (parent);
  179|       |
  180|  53.4k|  blob = hb_blob_create (parent->data + offset,
  181|  53.4k|			 hb_min (length, parent->length - offset),
  182|  53.4k|			 HB_MEMORY_MODE_READONLY,
  183|  53.4k|			 hb_blob_reference (parent),
  184|  53.4k|			 _hb_blob_destroy);
  185|       |
  186|  53.4k|  return blob;
  187|  1.35M|}
hb_blob_get_empty:
  227|  2.01M|{
  228|  2.01M|  return const_cast<hb_blob_t *> (&Null (hb_blob_t));
  ------------------
  |  |  124|  2.01M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  229|  2.01M|}
hb_blob_reference:
  245|  1.49M|{
  246|  1.49M|  return hb_object_reference (blob);
  247|  1.49M|}
hb_blob_destroy:
  263|  2.40M|{
  264|  2.40M|  if (!hb_object_destroy (blob)) return;
  ------------------
  |  Branch (264:7): [True: 2.31M, False: 86.5k]
  ------------------
  265|       |
  266|  86.5k|  hb_free (blob);
  ------------------
  |  |  236|  86.5k|#define hb_free hb_free_impl
  ------------------
  267|  86.5k|}
hb_blob_make_immutable:
  323|   129k|{
  324|   129k|  if (hb_object_is_immutable (blob))
  ------------------
  |  Branch (324:7): [True: 53.4k, False: 75.9k]
  ------------------
  325|  53.4k|    return;
  326|       |
  327|  75.9k|  hb_object_make_immutable (blob);
  328|  75.9k|}
hb_blob_get_data_writable:
  401|  22.7k|{
  402|  22.7k|  if (hb_object_is_immutable (blob) ||
  ------------------
  |  Branch (402:7): [True: 0, False: 22.7k]
  ------------------
  403|  22.7k|     !blob->try_make_writable ())
  ------------------
  |  Branch (403:6): [True: 169, False: 22.6k]
  ------------------
  404|    169|  {
  405|    169|    if (length) *length = 0;
  ------------------
  |  Branch (405:9): [True: 0, False: 169]
  ------------------
  406|    169|    return nullptr;
  407|    169|  }
  408|       |
  409|  22.6k|  if (length) *length = blob->length;
  ------------------
  |  Branch (409:7): [True: 0, False: 22.6k]
  ------------------
  410|  22.6k|  return const_cast<char *> (blob->data);
  411|  22.7k|}
_ZN9hb_blob_t17try_make_writableEv:
  474|  22.7k|{
  475|  22.7k|  if (unlikely (!length))
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22.7k]
  |  |  ------------------
  ------------------
  476|      0|    mode = HB_MEMORY_MODE_WRITABLE;
  477|       |
  478|  22.7k|  if (this->mode == HB_MEMORY_MODE_WRITABLE)
  ------------------
  |  Branch (478:7): [True: 0, False: 22.7k]
  ------------------
  479|      0|    return true;
  480|       |
  481|  22.7k|  if (this->mode == HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE && this->try_make_writable_inplace ())
  ------------------
  |  Branch (481:7): [True: 0, False: 22.7k]
  |  Branch (481:66): [True: 0, False: 0]
  ------------------
  482|      0|    return true;
  483|       |
  484|  22.7k|  if (this->mode == HB_MEMORY_MODE_WRITABLE)
  ------------------
  |  Branch (484:7): [True: 0, False: 22.7k]
  ------------------
  485|      0|    return true;
  486|       |
  487|       |
  488|  22.7k|  DEBUG_MSG_FUNC (BLOB, this, "current data is -> %p\n", this->data);
  ------------------
  |  |  233|  22.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  22.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  489|       |
  490|  22.7k|  char *new_data;
  491|       |
  492|  22.7k|  new_data = (char *) hb_malloc (this->length);
  ------------------
  |  |  233|  22.7k|#define hb_malloc hb_malloc_impl
  ------------------
  493|  22.7k|  if (unlikely (!new_data))
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 169, False: 22.6k]
  |  |  ------------------
  ------------------
  494|    169|    return false;
  495|       |
  496|  22.6k|  DEBUG_MSG_FUNC (BLOB, this, "dupped successfully -> %p\n", this->data);
  ------------------
  |  |  233|  22.6k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  22.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  497|       |
  498|  22.6k|  hb_memcpy (new_data, this->data, this->length);
  499|  22.6k|  this->destroy_user_data ();
  500|  22.6k|  this->mode = HB_MEMORY_MODE_WRITABLE;
  501|  22.6k|  this->data = new_data;
  502|  22.6k|  this->user_data = new_data;
  503|  22.6k|  this->destroy = hb_free;
  ------------------
  |  |  236|  22.6k|#define hb_free hb_free_impl
  ------------------
  504|       |
  505|  22.6k|  return true;
  506|  22.7k|}
hb-blob.cc:_ZL16_hb_blob_destroyPv:
  144|  53.4k|{
  145|  53.4k|  hb_blob_destroy ((hb_blob_t *) data);
  146|  53.4k|}

_ZN13hb_blob_ptr_tIN2OT4GDEFEEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4GDEFEEaSEP9hb_blob_t:
   83|  32.8k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT4GDEFEEptEv:
   84|  1.03M|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4GDEFEE3getEv:
   88|  1.71M|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4GDEFEEEPKT_v:
   59|  1.71M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t8as_bytesEv:
   57|  26.0M|  hb_bytes_t as_bytes () const { return hb_bytes_t (data, length); }
_ZNK13hb_blob_ptr_tIN2OT4GDEFEE8get_blobEv:
   89|   917k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZN13hb_blob_ptr_tIN2OT4GDEFEE7destroyEv:
   91|  32.8k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK13hb_blob_ptr_tIN2OT4GDEFEEcvPKT_IS1_EEv:
   86|  28.2k|  template <typename C> operator const C * () const { return get (); }
_ZNK9hb_blob_t2asIN3AAT4ltagEEEPKT_v:
   59|   507k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN3AAT4morxEEEPKT_v:
   59|  71.0k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN3AAT4mortEEEPKT_v:
   59|  58.7k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN3AAT4kerxEEEPKT_v:
   59|  60.2k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN3AAT4ankrEEEPKT_v:
   59|  10.9k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4GDEFEEdeEv:
   85|   649k|  const T & operator * () const  { return *get (); }
_ZNK9hb_blob_t2asIN3AAT4trakEEEPKT_v:
   59|  49.1k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN3AAT4featEEEPKT_v:
   59|   100k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN9hb_blob_tD2Ev:
   41|  86.5k|  ~hb_blob_t () { destroy_user_data (); }
_ZN9hb_blob_t17destroy_user_dataEv:
   44|   109k|  {
   45|   109k|    if (destroy)
  ------------------
  |  Branch (45:9): [True: 75.8k, False: 33.3k]
  ------------------
   46|  75.8k|    {
   47|  75.8k|      destroy (user_data);
   48|  75.8k|      user_data = nullptr;
   49|  75.8k|      destroy = nullptr;
   50|  75.8k|    }
   51|   109k|  }
_ZN13hb_blob_ptr_tIN2OT6Layout4GPOSEEaSEP9hb_blob_t:
   83|  33.1k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GPOSEE8get_blobEv:
   89|  32.8k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZN13hb_blob_ptr_tIN2OT6Layout4GPOSEE7destroyEv:
   91|  33.1k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GPOSEEptEv:
   84|  2.63M|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GPOSEE3getEv:
   88|  5.02M|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT6Layout4GPOSEEEPKT_v:
   59|  5.02M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4maxpEEEPKT_v:
   59|  98.8k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4locaEEptEv:
   84|   270k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4locaEE3getEv:
   88|   270k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4locaEEEPKT_v:
   59|   270k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4glyfEE10get_lengthEv:
   90|   156k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT4glyfEEcvPKcEv:
   87|  83.2k|  operator const char * () const { return (const char *) get (); }
_ZNK13hb_blob_ptr_tIN2OT4glyfEE3getEv:
   88|  83.2k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4glyfEEEPKT_v:
   59|  83.2k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEEptEv:
   84|   377k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEE3getEv:
   88|   377k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT8hmtxvmtxINS1_4hmtxENS1_4hheaENS1_4HVAREEEEEPKT_v:
   59|   377k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEEptEv:
   84|  46.6k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEE3getEv:
   88|  46.6k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT8hmtxvmtxINS1_4vmtxENS1_4vheaENS1_4VVAREEEEEPKT_v:
   59|  46.6k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4gvarEEptEv:
   84|   263k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4gvarEE3getEv:
   88|   307k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4gvarEEEPKT_v:
   59|   307k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4gvarEE8get_blobEv:
   89|  19.1k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZNK13hb_blob_ptr_tIN2OT4gvarEEcvPKT_IvEEv:
   86|  44.3k|  template <typename C> operator const C * () const { return get (); }
_ZNK9hb_blob_t2asIN2OT4headEEEPKT_v:
   59|   131k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4locaEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4glyfEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4locaEEaSEP9hb_blob_t:
   83|  65.4k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4glyfEEaSEP9hb_blob_t:
   83|  65.4k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4gvarEEC2EP9hb_blob_t:
   82|  32.1k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4gvarEEaSEP9hb_blob_t:
   83|  32.1k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4gvarEE7destroyEv:
   91|  32.1k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4HVAREEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEEaSEP9hb_blob_t:
   83|  32.8k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4HVAREEaSEP9hb_blob_t:
   83|  32.8k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEE10get_lengthEv:
   90|  32.8k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK9hb_blob_t2asIN2OT4hheaEEEPKT_v:
   59|   142k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4hmtxENS0_4hheaENS0_4HVAREEEE7destroyEv:
   91|  32.8k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4HVAREE7destroyEv:
   91|  32.8k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4VVAREEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEEaSEP9hb_blob_t:
   83|  32.7k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4VVAREEaSEP9hb_blob_t:
   83|  32.7k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEE10get_lengthEv:
   90|  32.7k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK9hb_blob_t2asIN2OT4vheaEEEPKT_v:
   59|  32.7k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT8hmtxvmtxINS0_4vmtxENS0_4vheaENS0_4VVAREEEE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4VVAREE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK13hb_blob_ptr_tIN2OT4locaEE10get_lengthEv:
   90|  32.7k|  unsigned int get_length () const { return b.get ()->length; }
_ZN13hb_blob_ptr_tIN2OT4glyfEE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK9hb_blob_t2asIN2OT4MVAREEEPKT_v:
   59|   107k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4cmapEE3getEv:
   88|  65.6k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4cmapEEEPKT_v:
   59|  65.6k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4cmapEE7destroyEv:
   91|  32.8k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4cmapEEaSEP9hb_blob_t:
   83|  32.8k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT4cmapEEptEv:
   84|  65.6k|  const T * operator -> () const { return get (); }
_ZNK9hb_blob_t2asIN2OT3OS2EEEPKT_v:
   59|   108k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4COLREEEPKT_v:
   59|   816k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT16OpenTypeFontFileEEEPKT_v:
   59|  1.28M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4cmapEEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZNK9hb_blob_t2asIN2OT4fvarEEEPKT_v:
   59|   205k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4avarEEEPKT_v:
   59|  99.9k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT3SVGEEptEv:
   84|   100k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT3SVGEE3getEv:
   88|   100k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT3SVGEEEPKT_v:
   59|   100k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT3SVGEE8get_blobEv:
   89|  33.3k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZNK13hb_blob_ptr_tIN2OT4CBDTEE10get_lengthEv:
   90|  66.8k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT4sbixEEptEv:
   84|   825k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4sbixEE3getEv:
   88|   825k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4sbixEEEPKT_v:
   59|   825k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4sbixEE8get_blobEv:
   89|    694|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZNK13hb_blob_ptr_tIN2OT4CBLCEEptEv:
   84|   750k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4CBLCEE3getEv:
   88|  1.50M|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4CBLCEEEPKT_v:
   59|  1.50M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4CBLCEEcvPKT_IvEEv:
   86|   750k|  template <typename C> operator const C * () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4CBDTEEcvPKT_IvEEv:
   86|     82|  template <typename C> operator const C * () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4CBDTEE3getEv:
   88|     82|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4CBDTEEEPKT_v:
   59|     82|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4CBDTEE8get_blobEv:
   89|      6|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZNK9hb_blob_t2asIN2OT4CPALEEEPKT_v:
   59|   247k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT3SVGEEC2EP9hb_blob_t:
   82|  32.5k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT3SVGEEaSEP9hb_blob_t:
   83|  32.5k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT3SVGEE7destroyEv:
   91|  32.5k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4CBLCEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4CBDTEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4CBLCEEaSEP9hb_blob_t:
   83|  32.7k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4CBDTEEaSEP9hb_blob_t:
   83|  32.7k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4CBLCEE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4CBDTEE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4sbixEEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4sbixEEaSEP9hb_blob_t:
   83|  32.8k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZN13hb_blob_ptr_tIN2OT4sbixEE7destroyEv:
   91|  32.8k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK9hb_blob_t2asIN2OT4sbix13accelerator_t9PNGHeaderEEEPKT_v:
   59|    516|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4postEE7destroyEv:
   91|  32.7k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4nameEE7destroyEv:
   91|  32.6k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT4metaEE7destroyEv:
   91|  32.6k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZN13hb_blob_ptr_tIN2OT6Layout4GSUBEE7destroyEv:
   91|  33.6k|  void destroy () { hb_blob_destroy (b.get_raw ()); b = nullptr; }
_ZNK9hb_blob_t2asIN2OT4cff1EEEPKT_v:
   59|  32.7k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4cff2EEEPKT_v:
   59|  31.9k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4metaEEaSEP9hb_blob_t:
   83|  32.6k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT4metaEEptEv:
   84|  66.6k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4metaEE3getEv:
   88|  66.6k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4metaEEEPKT_v:
   59|  66.6k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4metaEE8get_blobEv:
   89|  33.3k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZN13hb_blob_ptr_tIN2OT4nameEEaSEP9hb_blob_t:
   83|  32.6k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT4nameEE10get_lengthEv:
   90|  65.3k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT4nameEEptEv:
   84|   164k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4nameEE3getEv:
   88|   196k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4nameEEEPKT_v:
   59|   196k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4nameEEcvPKT_IvEEv:
   86|  32.6k|  template <typename C> operator const C * () const { return get (); }
_ZN13hb_blob_ptr_tIN2OT4postEEaSEP9hb_blob_t:
   83|  32.7k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT4postEE10get_lengthEv:
   90|  32.7k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT4postEEptEv:
   84|  33.0k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4postEE3getEv:
   88|  33.4k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4postEEEPKT_v:
   59|  33.4k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4postEEcvPKT_IvEEv:
   86|    375|  template <typename C> operator const C * () const { return get (); }
_ZN13hb_blob_ptr_tIN2OT6Layout4GSUBEEaSEP9hb_blob_t:
   83|  33.6k|  hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GSUBEE8get_blobEv:
   89|  32.9k|  hb_blob_t * get_blob () const { return b.get_raw (); }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GSUBEEptEv:
   84|  5.54M|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GSUBEE3getEv:
   88|  8.06M|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT6Layout4GSUBEEEPKT_v:
   59|  8.06M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4HVAREEdeEv:
   85|   692k|  const T & operator * () const  { return *get (); }
_ZNK13hb_blob_ptr_tIN2OT4HVAREE3getEv:
   88|   694k|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4HVAREEEPKT_v:
   59|   694k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT4HVAREE10get_lengthEv:
   90|  5.75k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT4HVAREEptEv:
   84|  1.12k|  const T * operator -> () const { return get (); }
_ZNK13hb_blob_ptr_tIN2OT4VVAREEdeEv:
   85|    225|  const T & operator * () const  { return *get (); }
_ZNK13hb_blob_ptr_tIN2OT4VVAREE3getEv:
   88|    225|  const T * get () const { return b->as<T> (); }
_ZNK9hb_blob_t2asIN2OT4VVAREEEPKT_v:
   59|    225|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4VORGEEEPKT_v:
   59|  33.2k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4postEEC2EP9hb_blob_t:
   82|  32.7k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT6Layout4GSUBEEC2EP9hb_blob_t:
   82|  32.9k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT6Layout4GPOSEEC2EP9hb_blob_t:
   82|  32.8k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZNK9hb_blob_t2asIN2OT4kernEEEPKT_v:
   59|  53.8k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GSUBEE10get_lengthEv:
   90|  32.8k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GPOSEE10get_lengthEv:
   90|  32.8k|  unsigned int get_length () const { return b.get ()->length; }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GSUBEEdeEv:
   85|  2.51M|  const T & operator * () const  { return *get (); }
_ZNK13hb_blob_ptr_tIN2OT6Layout4GPOSEEdeEv:
   85|  2.38M|  const T & operator * () const  { return *get (); }
_ZNK9hb_blob_t2asIN2OT4BASEEEEPKT_v:
   59|  33.3k|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZNK9hb_blob_t2asIN2OT4MATHEEEPKT_v:
   59|  2.33M|  const Type* as () const { return as_bytes ().as<Type> (); }
_ZN13hb_blob_ptr_tIN2OT4metaEEC2EP9hb_blob_t:
   82|  32.6k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
_ZN13hb_blob_ptr_tIN2OT4nameEEC2EP9hb_blob_t:
   82|  32.6k|  hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}

hb_buffer_serialize_unicode:
  569|    766|{
  570|    766|  end = hb_clamp (end, start, buffer->len);
  571|    766|  start = hb_min (start, end);
  572|       |
  573|    766|  unsigned int sconsumed;
  574|    766|  if (!buf_consumed)
  ------------------
  |  Branch (574:7): [True: 0, False: 766]
  ------------------
  575|      0|    buf_consumed = &sconsumed;
  576|    766|  *buf_consumed = 0;
  577|    766|  if (buf_size)
  ------------------
  |  Branch (577:7): [True: 766, False: 0]
  ------------------
  578|    766|    *buf = '\0';
  579|       |
  580|    766|  buffer->assert_unicode ();
  581|       |
  582|    766|  if (unlikely (start == end))
  ------------------
  |  |  259|    766|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 766]
  |  |  ------------------
  ------------------
  583|      0|    return 0;
  584|       |
  585|    766|  switch (format)
  586|    766|  {
  587|    766|    case HB_BUFFER_SERIALIZE_FORMAT_TEXT:
  ------------------
  |  Branch (587:5): [True: 766, False: 0]
  ------------------
  588|    766|      return _hb_buffer_serialize_unicode_text (buffer, start, end,
  589|    766|                                                buf, buf_size, buf_consumed, flags);
  590|       |
  591|      0|    case HB_BUFFER_SERIALIZE_FORMAT_JSON:
  ------------------
  |  Branch (591:5): [True: 0, False: 766]
  ------------------
  592|      0|      return _hb_buffer_serialize_unicode_json (buffer, start, end,
  593|      0|                                                buf, buf_size, buf_consumed, flags);
  594|       |
  595|      0|    default:
  ------------------
  |  Branch (595:5): [True: 0, False: 766]
  ------------------
  596|      0|    case HB_BUFFER_SERIALIZE_FORMAT_INVALID:
  ------------------
  |  Branch (596:5): [True: 0, False: 766]
  ------------------
  597|      0|      return 0;
  598|       |
  599|    766|  }
  600|    766|}
hb-buffer-serialize.cc:_ZL33_hb_buffer_serialize_unicode_textP11hb_buffer_tjjPcjPj27hb_buffer_serialize_flags_t:
  359|    766|{
  360|    766|  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, nullptr);
  361|    766|  *buf_consumed = 0;
  362|  15.3k|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (362:32): [True: 14.5k, False: 766]
  ------------------
  363|  14.5k|  {
  364|  14.5k|    char b[1024];
  365|  14.5k|    char *p = b;
  366|       |
  367|  14.5k|    if (i)
  ------------------
  |  Branch (367:9): [True: 13.7k, False: 766]
  ------------------
  368|  13.7k|      *p++ = '|';
  369|    766|    else
  370|    766|      *p++ = '<';
  371|       |
  372|  14.5k|    p += hb_max (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "U+%04X", info[i].codepoint));
  373|       |
  374|  14.5k|    if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS)) {
  ------------------
  |  Branch (374:9): [True: 0, False: 14.5k]
  ------------------
  375|      0|      p += hb_max (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "=%u", info[i].cluster));
  376|      0|    }
  377|       |
  378|  14.5k|    if (i == end-1)
  ------------------
  |  Branch (378:9): [True: 766, False: 13.7k]
  ------------------
  379|    766|      *p++ = '>';
  380|       |
  381|  14.5k|    unsigned int l = p - b;
  382|  14.5k|    if (buf_size > l)
  ------------------
  |  Branch (382:9): [True: 14.5k, False: 0]
  ------------------
  383|  14.5k|    {
  384|  14.5k|      hb_memcpy (buf, b, l);
  385|  14.5k|      buf += l;
  386|  14.5k|      buf_size -= l;
  387|  14.5k|      *buf_consumed += l;
  388|  14.5k|      *buf = '\0';
  389|  14.5k|    } else
  390|      0|      return i - start;
  391|  14.5k|  }
  392|    766|  return end - start;
  393|    766|}

_ZN11hb_buffer_t6verifyEPS_P9hb_font_tPK12hb_feature_tjPKPKc:
  409|  29.4k|{
  410|  29.4k|  bool ret = true;
  411|  29.4k|  if (!buffer_verify_monotone (this, font))
  ------------------
  |  Branch (411:7): [True: 0, False: 29.4k]
  ------------------
  412|      0|    ret = false;
  413|  29.4k|  if (!buffer_verify_unsafe_to_break (this, text_buffer, font, features, num_features, shapers))
  ------------------
  |  Branch (413:7): [True: 834, False: 28.5k]
  ------------------
  414|    834|    ret = false;
  415|  29.4k|  if ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) != 0 &&
  ------------------
  |  Branch (415:7): [True: 0, False: 29.4k]
  ------------------
  416|  29.4k|      !buffer_verify_unsafe_to_concat (this, text_buffer, font, features, num_features, shapers))
  ------------------
  |  Branch (416:7): [True: 0, False: 0]
  ------------------
  417|      0|    ret = false;
  418|  29.4k|  if (!ret)
  ------------------
  |  Branch (418:7): [True: 834, False: 28.5k]
  ------------------
  419|    834|  {
  420|    834|#ifndef HB_NO_BUFFER_SERIALIZE
  421|    834|    unsigned len = text_buffer->len;
  422|    834|    hb_vector_t<char> bytes;
  423|    834|    if (likely (bytes.resize (len * 10 + 16)))
  ------------------
  |  |  258|    834|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 766, False: 68]
  |  |  ------------------
  ------------------
  424|    766|    {
  425|    766|      hb_buffer_serialize_unicode (text_buffer,
  426|    766|				   0, len,
  427|    766|				   bytes.arrayZ, bytes.length,
  428|    766|				   &len,
  429|    766|				   HB_BUFFER_SERIALIZE_FORMAT_TEXT,
  430|    766|				   HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS);
  431|    766|      buffer_verify_error (this, font, BUFFER_VERIFY_ERROR "text was: %s.", bytes.arrayZ);
  ------------------
  |  |   34|    766|#define BUFFER_VERIFY_ERROR "buffer verify error: "
  ------------------
  432|    766|    }
  433|    834|#endif
  434|    834|  }
  435|  29.4k|  return ret;
  436|  29.4k|}
hb-buffer-verify.cc:_ZL22buffer_verify_monotoneP11hb_buffer_tP9hb_font_t:
   65|  29.4k|{
   66|       |  /* Check that clusters are monotone. */
   67|  29.4k|  if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES ||
  ------------------
  |  Branch (67:7): [True: 29.4k, False: 0]
  ------------------
   68|  29.4k|      buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
  ------------------
  |  Branch (68:7): [True: 0, False: 0]
  ------------------
   69|  29.4k|  {
   70|  29.4k|    bool is_forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
  ------------------
  |  |  289|  29.4k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  ------------------
   71|       |
   72|  29.4k|    unsigned int num_glyphs;
   73|  29.4k|    hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
   74|       |
   75|  7.41M|    for (unsigned int i = 1; i < num_glyphs; i++)
  ------------------
  |  Branch (75:30): [True: 7.38M, False: 29.4k]
  ------------------
   76|  7.38M|      if (info[i-1].cluster != info[i].cluster &&
  ------------------
  |  Branch (76:11): [True: 514k, False: 6.87M]
  ------------------
   77|  7.38M|	  (info[i-1].cluster < info[i].cluster) != is_forward)
  ------------------
  |  Branch (77:4): [True: 0, False: 514k]
  ------------------
   78|      0|      {
   79|      0|	buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "clusters are not monotone.");
  ------------------
  |  |   34|      0|#define BUFFER_VERIFY_ERROR "buffer verify error: "
  ------------------
   80|      0|	return false;
   81|      0|      }
   82|  29.4k|  }
   83|       |
   84|  29.4k|  return true;
   85|  29.4k|}
hb-buffer-verify.cc:_ZL29buffer_verify_unsafe_to_breakP11hb_buffer_tS0_P9hb_font_tPK12hb_feature_tjPKPKc:
   94|  29.4k|{
   95|  29.4k|  if (buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES &&
  ------------------
  |  Branch (95:7): [True: 0, False: 29.4k]
  ------------------
   96|  29.4k|      buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
  ------------------
  |  Branch (96:7): [True: 0, False: 0]
  ------------------
   97|      0|  {
   98|       |    /* Cannot perform this check without monotone clusters. */
   99|      0|    return true;
  100|      0|  }
  101|       |
  102|       |  /* Check that breaking up shaping at safe-to-break is indeed safe. */
  103|       |
  104|  29.4k|  hb_buffer_t *fragment = hb_buffer_create_similar (buffer);
  105|  29.4k|  hb_buffer_set_flags (fragment, (hb_buffer_flags_t (hb_buffer_get_flags (fragment) & ~HB_BUFFER_FLAG_VERIFY)));
  106|  29.4k|  hb_buffer_t *reconstruction = hb_buffer_create_similar (buffer);
  107|  29.4k|  hb_buffer_set_flags (reconstruction, (hb_buffer_flags_t (hb_buffer_get_flags (reconstruction) & ~HB_BUFFER_FLAG_VERIFY)));
  108|       |
  109|  29.4k|  unsigned int num_glyphs;
  110|  29.4k|  hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
  111|       |
  112|  29.4k|  unsigned int num_chars;
  113|  29.4k|  hb_glyph_info_t *text = hb_buffer_get_glyph_infos (text_buffer, &num_chars);
  114|       |
  115|       |  /* Chop text and shape fragments. */
  116|  29.4k|  bool forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
  ------------------
  |  |  289|  29.4k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  ------------------
  117|  29.4k|  unsigned int start = 0;
  118|  29.4k|  unsigned int text_start = forward ? 0 : num_chars;
  ------------------
  |  Branch (118:29): [True: 29.4k, False: 0]
  ------------------
  119|  29.4k|  unsigned int text_end = text_start;
  120|  7.41M|  for (unsigned int end = 1; end < num_glyphs + 1; end++)
  ------------------
  |  Branch (120:30): [True: 7.38M, False: 28.4k]
  ------------------
  121|  7.38M|  {
  122|  7.38M|    if (end < num_glyphs &&
  ------------------
  |  Branch (122:9): [True: 7.35M, False: 28.4k]
  ------------------
  123|  7.38M|	(info[end].cluster == info[end-1].cluster ||
  ------------------
  |  Branch (123:3): [True: 6.85M, False: 501k]
  ------------------
  124|  7.35M|	 info[end-(forward?0:1)].mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK))
  ------------------
  |  Branch (124:3): [True: 27.5k, False: 474k]
  |  Branch (124:13): [True: 501k, False: 0]
  ------------------
  125|  6.88M|	continue;
  126|       |
  127|       |    /* Shape segment corresponding to glyphs start..end. */
  128|   502k|    if (end == num_glyphs)
  ------------------
  |  Branch (128:9): [True: 28.4k, False: 474k]
  ------------------
  129|  28.4k|    {
  130|  28.4k|      if (forward)
  ------------------
  |  Branch (130:11): [True: 28.4k, False: 0]
  ------------------
  131|  28.4k|	text_end = num_chars;
  132|      0|      else
  133|      0|	text_start = 0;
  134|  28.4k|    }
  135|   474k|    else
  136|   474k|    {
  137|   474k|      if (forward)
  ------------------
  |  Branch (137:11): [True: 474k, False: 0]
  ------------------
  138|   474k|      {
  139|   474k|	unsigned int cluster = info[end].cluster;
  140|   960k|	while (text_end < num_chars && text[text_end].cluster < cluster)
  ------------------
  |  Branch (140:9): [True: 960k, False: 0]
  |  Branch (140:33): [True: 485k, False: 474k]
  ------------------
  141|   485k|	  text_end++;
  142|   474k|      }
  143|      0|      else
  144|      0|      {
  145|      0|	unsigned int cluster = info[end - 1].cluster;
  146|      0|	while (text_start && text[text_start - 1].cluster >= cluster)
  ------------------
  |  Branch (146:9): [True: 0, False: 0]
  |  Branch (146:23): [True: 0, False: 0]
  ------------------
  147|      0|	  text_start--;
  148|      0|      }
  149|   474k|    }
  150|   502k|    assert (text_start < text_end);
  151|       |
  152|   502k|    if (0)
  ------------------
  |  Branch (152:9): [Folded - Ignored]
  ------------------
  153|      0|      printf("start %u end %u text start %u end %u\n", start, end, text_start, text_end);
  154|       |
  155|   502k|    hb_buffer_clear_contents (fragment);
  156|       |
  157|   502k|    hb_buffer_flags_t flags = hb_buffer_get_flags (fragment);
  158|   502k|    if (0 < text_start)
  ------------------
  |  Branch (158:9): [True: 473k, False: 29.2k]
  ------------------
  159|   473k|      flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_BOT);
  160|   502k|    if (text_end < num_chars)
  ------------------
  |  Branch (160:9): [True: 474k, False: 28.4k]
  ------------------
  161|   474k|      flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_EOT);
  162|   502k|    hb_buffer_set_flags (fragment, flags);
  163|       |
  164|   502k|    hb_buffer_append (fragment, text_buffer, text_start, text_end);
  165|   502k|    if (!hb_shape_full (font, fragment, features, num_features, shapers))
  ------------------
  |  Branch (165:9): [True: 36, False: 502k]
  ------------------
  166|     36|    {
  167|     36|      buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
  ------------------
  |  |   34|     36|#define BUFFER_VERIFY_ERROR "buffer verify error: "
  ------------------
  168|     36|      hb_buffer_destroy (reconstruction);
  169|     36|      hb_buffer_destroy (fragment);
  170|     36|      return false;
  171|     36|    }
  172|   502k|    else if (!fragment->successful || fragment->shaping_failed)
  ------------------
  |  Branch (172:14): [True: 909, False: 501k]
  |  Branch (172:39): [True: 2, False: 501k]
  ------------------
  173|    911|    {
  174|    911|      hb_buffer_destroy (reconstruction);
  175|    911|      hb_buffer_destroy (fragment);
  176|    911|      return true;
  177|    911|    }
  178|   501k|    hb_buffer_append (reconstruction, fragment, 0, -1);
  179|       |
  180|   501k|    start = end;
  181|   501k|    if (forward)
  ------------------
  |  Branch (181:9): [True: 501k, False: 0]
  ------------------
  182|   501k|      text_start = text_end;
  183|      0|    else
  184|      0|      text_end = text_start;
  185|   501k|  }
  186|       |
  187|  28.4k|  bool ret = true;
  188|  28.4k|  hb_buffer_diff_flags_t diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
  189|  28.4k|  if (diff & ~HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH)
  ------------------
  |  Branch (189:7): [True: 798, False: 27.6k]
  ------------------
  190|    798|  {
  191|    798|    buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "unsafe-to-break test failed.");
  ------------------
  |  |   34|    798|#define BUFFER_VERIFY_ERROR "buffer verify error: "
  ------------------
  192|    798|    ret = false;
  193|       |
  194|       |    /* Return the reconstructed result instead so it can be inspected. */
  195|    798|    hb_buffer_set_length (buffer, 0);
  196|    798|    hb_buffer_append (buffer, reconstruction, 0, -1);
  197|    798|  }
  198|       |
  199|  28.4k|  hb_buffer_destroy (reconstruction);
  200|  28.4k|  hb_buffer_destroy (fragment);
  201|       |
  202|  28.4k|  return ret;
  203|  29.4k|}
hb-buffer-verify.cc:_ZL19buffer_verify_errorP11hb_buffer_tP9hb_font_tPKcz:
   46|  1.60k|{
   47|  1.60k|  va_list ap;
   48|  1.60k|  va_start (ap, fmt);
   49|  1.60k|  if (buffer->messaging ())
  ------------------
  |  Branch (49:7): [True: 0, False: 1.60k]
  ------------------
   50|      0|  {
   51|      0|    buffer->message_impl (font, fmt, ap);
   52|      0|  }
   53|  1.60k|  else
   54|  1.60k|  {
   55|  1.60k|    fprintf (stderr, "harfbuzz ");
   56|  1.60k|    vfprintf (stderr, fmt, ap);
   57|  1.60k|    fprintf (stderr, "\n");
   58|  1.60k|  }
   59|  1.60k|  va_end (ap);
   60|  1.60k|}

hb_segment_properties_equal:
   66|  1.09M|{
   67|  1.09M|  return a->direction == b->direction &&
  ------------------
  |  Branch (67:10): [True: 1.09M, False: 3.01k]
  ------------------
   68|  1.09M|	 a->script    == b->script    &&
  ------------------
  |  Branch (68:3): [True: 1.08M, False: 13.0k]
  ------------------
   69|  1.09M|	 a->language  == b->language  &&
  ------------------
  |  Branch (69:3): [True: 1.08M, False: 0]
  ------------------
   70|  1.09M|	 a->reserved1 == b->reserved1 &&
  ------------------
  |  Branch (70:3): [True: 1.08M, False: 0]
  ------------------
   71|  1.09M|	 a->reserved2 == b->reserved2;
  ------------------
  |  Branch (71:3): [True: 1.08M, False: 0]
  ------------------
   72|       |
   73|  1.09M|}
hb_segment_properties_overlay:
  115|  1.02M|{
  116|  1.02M|  if (unlikely (!p || !src))
  ------------------
  |  |  259|  2.04M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.02M]
  |  |  |  Branch (259:47): [True: 0, False: 1.02M]
  |  |  |  Branch (259:47): [True: 0, False: 1.02M]
  |  |  ------------------
  ------------------
  117|      0|    return;
  118|       |
  119|  1.02M|  if (!p->direction)
  ------------------
  |  Branch (119:7): [True: 560k, False: 464k]
  ------------------
  120|   560k|    p->direction = src->direction;
  121|       |
  122|  1.02M|  if (p->direction != src->direction)
  ------------------
  |  Branch (122:7): [True: 0, False: 1.02M]
  ------------------
  123|      0|    return;
  124|       |
  125|  1.02M|  if (!p->script)
  ------------------
  |  Branch (125:7): [True: 560k, False: 464k]
  ------------------
  126|   560k|    p->script = src->script;
  127|       |
  128|  1.02M|  if (p->script != src->script)
  ------------------
  |  Branch (128:7): [True: 0, False: 1.02M]
  ------------------
  129|      0|    return;
  130|       |
  131|  1.02M|  if (!p->language)
  ------------------
  |  Branch (131:7): [True: 560k, False: 464k]
  ------------------
  132|   560k|    p->language = src->language;
  133|  1.02M|}
_ZN11hb_buffer_t7enlargeEj:
  160|   231k|{
  161|   231k|  if (unlikely (!successful))
  ------------------
  |  |  259|   231k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26.7k, False: 204k]
  |  |  ------------------
  ------------------
  162|  26.7k|    return false;
  163|   204k|  if (unlikely (size > max_len))
  ------------------
  |  |  259|   204k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 452, False: 204k]
  |  |  ------------------
  ------------------
  164|    452|  {
  165|    452|    successful = false;
  166|    452|    return false;
  167|    452|  }
  168|       |
  169|   204k|  unsigned int new_allocated = allocated;
  170|   204k|  hb_glyph_position_t *new_pos = nullptr;
  171|   204k|  hb_glyph_info_t *new_info = nullptr;
  172|   204k|  bool separate_out = out_info != info;
  173|       |
  174|   204k|  if (unlikely (hb_unsigned_mul_overflows (size, sizeof (info[0]))))
  ------------------
  |  |  259|   204k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 204k]
  |  |  ------------------
  ------------------
  175|      0|    goto done;
  176|       |
  177|   415k|  while (size >= new_allocated)
  ------------------
  |  Branch (177:10): [True: 210k, False: 204k]
  ------------------
  178|   210k|    new_allocated += (new_allocated >> 1) + 32;
  179|       |
  180|   204k|  unsigned new_bytes;
  181|   204k|  if (unlikely (hb_unsigned_mul_overflows (new_allocated, sizeof (info[0]), &new_bytes)))
  ------------------
  |  |  259|   204k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 204k]
  |  |  ------------------
  ------------------
  182|      0|    goto done;
  183|       |
  184|   204k|  static_assert (sizeof (info[0]) == sizeof (pos[0]), "");
  185|   204k|  new_pos = (hb_glyph_position_t *) hb_realloc (pos, new_bytes);
  ------------------
  |  |  235|   204k|#define hb_realloc hb_realloc_impl
  ------------------
  186|   204k|  new_info = (hb_glyph_info_t *) hb_realloc (info, new_bytes);
  ------------------
  |  |  235|   204k|#define hb_realloc hb_realloc_impl
  ------------------
  187|       |
  188|   204k|done:
  189|   204k|  if (unlikely (!new_pos || !new_info))
  ------------------
  |  |  259|   406k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.71k, False: 200k]
  |  |  |  Branch (259:47): [True: 2.13k, False: 202k]
  |  |  |  Branch (259:47): [True: 1.58k, False: 200k]
  |  |  ------------------
  ------------------
  190|  3.71k|    successful = false;
  191|       |
  192|   204k|  if (likely (new_pos))
  ------------------
  |  |  258|   204k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 202k, False: 2.13k]
  |  |  ------------------
  ------------------
  193|   202k|    pos = new_pos;
  194|       |
  195|   204k|  if (likely (new_info))
  ------------------
  |  |  258|   204k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 202k, False: 1.75k]
  |  |  ------------------
  ------------------
  196|   202k|    info = new_info;
  197|       |
  198|   204k|  out_info = separate_out ? (hb_glyph_info_t *) pos : info;
  ------------------
  |  Branch (198:14): [True: 43.8k, False: 160k]
  ------------------
  199|   204k|  if (likely (successful))
  ------------------
  |  |  258|   204k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 200k, False: 3.71k]
  |  |  ------------------
  ------------------
  200|   200k|    allocated = new_allocated;
  201|       |
  202|   204k|  return likely (successful);
  ------------------
  |  |  258|   204k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  203|   204k|}
_ZN11hb_buffer_t13make_room_forEjj:
  208|  51.2M|{
  209|  51.2M|  if (unlikely (!ensure (out_len + num_out))) return false;
  ------------------
  |  |  259|  51.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.9k, False: 51.2M]
  |  |  ------------------
  ------------------
  210|       |
  211|  51.2M|  if (out_info == info &&
  ------------------
  |  Branch (211:7): [True: 5.26M, False: 45.9M]
  ------------------
  212|  51.2M|      out_len + num_out > idx + num_in)
  ------------------
  |  Branch (212:7): [True: 54.6k, False: 5.20M]
  ------------------
  213|  54.6k|  {
  214|  54.6k|    assert (have_output);
  215|       |
  216|      0|    out_info = (hb_glyph_info_t *) pos;
  217|  54.6k|    hb_memcpy (out_info, info, out_len * sizeof (out_info[0]));
  218|  54.6k|  }
  219|       |
  220|      0|  return true;
  221|  51.2M|}
_ZN11hb_buffer_t13shift_forwardEj:
  225|   297k|{
  226|   297k|  assert (have_output);
  227|   297k|  if (unlikely (!ensure (len + count))) return false;
  ------------------
  |  |  259|   297k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 297k]
  |  |  ------------------
  ------------------
  228|       |
  229|   297k|  memmove (info + idx + count, info + idx, (len - idx) * sizeof (info[0]));
  230|   297k|  if (idx + count > len)
  ------------------
  |  Branch (230:7): [True: 21.9k, False: 275k]
  ------------------
  231|  21.9k|  {
  232|       |    /* Under memory failure we might expose this area.  At least
  233|       |     * clean it up.  Oh well...
  234|       |     *
  235|       |     * Ideally, we should at least set Default_Ignorable bits on
  236|       |     * these, as well as consistent cluster values.  But the former
  237|       |     * is layering violation... */
  238|  21.9k|    hb_memset (info + len, 0, (idx + count - len) * sizeof (info[0]));
  239|  21.9k|  }
  240|   297k|  len += count;
  241|   297k|  idx += count;
  242|       |
  243|   297k|  return true;
  244|   297k|}
_ZN11hb_buffer_t7similarERKS_:
  266|  58.8k|{
  267|  58.8k|  hb_unicode_funcs_destroy (unicode);
  268|  58.8k|  unicode = hb_unicode_funcs_reference (src.unicode);
  269|  58.8k|  flags = src.flags;
  270|  58.8k|  cluster_level = src.cluster_level;
  271|  58.8k|  replacement = src.replacement;
  272|  58.8k|  invisible = src.invisible;
  273|  58.8k|  not_found = src.not_found;
  274|  58.8k|}
_ZN11hb_buffer_t5resetEv:
  278|   154k|{
  279|   154k|  hb_unicode_funcs_destroy (unicode);
  280|   154k|  unicode = hb_unicode_funcs_reference (hb_unicode_funcs_get_default ());
  281|   154k|  flags = HB_BUFFER_FLAG_DEFAULT;
  282|   154k|  cluster_level = HB_BUFFER_CLUSTER_LEVEL_DEFAULT;
  283|   154k|  replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
  ------------------
  |  |  467|   154k|#define HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT 0xFFFDu
  ------------------
  284|   154k|  invisible = 0;
  285|   154k|  not_found = 0;
  286|       |
  287|   154k|  clear ();
  288|   154k|}
_ZN11hb_buffer_t5clearEv:
  292|   657k|{
  293|   657k|  content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
  294|   657k|  hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
  ------------------
  |  |  225|   657k|#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, \
  |  |  226|   657k|				       HB_SCRIPT_INVALID, \
  |  |  227|   657k|				       HB_LANGUAGE_INVALID, \
  |  |  ------------------
  |  |  |  |  334|   657k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  |  |  ------------------
  |  |  228|   657k|				       (void *) 0, \
  |  |  229|   657k|				       (void *) 0}
  ------------------
  295|   657k|  props = default_props;
  296|       |
  297|   657k|  successful = true;
  298|   657k|  shaping_failed = false;
  299|   657k|  have_output = false;
  300|   657k|  have_positions = false;
  301|       |
  302|   657k|  idx = 0;
  303|   657k|  len = 0;
  304|   657k|  out_len = 0;
  305|   657k|  out_info = info;
  306|       |
  307|   657k|  hb_memset (context, 0, sizeof context);
  308|   657k|  hb_memset (context_len, 0, sizeof context_len);
  309|       |
  310|   657k|  deallocate_var_all ();
  311|   657k|  serial = 0;
  312|   657k|  scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
  313|   657k|}
_ZN11hb_buffer_t5enterEv:
  317|   565k|{
  318|   565k|  deallocate_var_all ();
  319|   565k|  serial = 0;
  320|   565k|  shaping_failed = false;
  321|   565k|  scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
  322|   565k|  unsigned mul;
  323|   565k|  if (likely (!hb_unsigned_mul_overflows (len, HB_BUFFER_MAX_LEN_FACTOR, &mul)))
  ------------------
  |  |  258|   565k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 565k, False: 0]
  |  |  ------------------
  ------------------
  324|   565k|  {
  325|   565k|    max_len = hb_max (mul, (unsigned) HB_BUFFER_MAX_LEN_MIN);
  ------------------
  |  |   35|   565k|#define HB_BUFFER_MAX_LEN_MIN 16384
  ------------------
  326|   565k|  }
  327|   565k|  if (likely (!hb_unsigned_mul_overflows (len, HB_BUFFER_MAX_OPS_FACTOR, &mul)))
  ------------------
  |  |  258|   565k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 565k, False: 0]
  |  |  ------------------
  ------------------
  328|   565k|  {
  329|   565k|    max_ops = hb_max (mul, (unsigned) HB_BUFFER_MAX_OPS_MIN);
  ------------------
  |  |   45|   565k|#define HB_BUFFER_MAX_OPS_MIN 16384
  ------------------
  330|   565k|  }
  331|   565k|}
_ZN11hb_buffer_t5leaveEv:
  334|  1.13M|{
  335|  1.13M|  max_len = HB_BUFFER_MAX_LEN_DEFAULT;
  ------------------
  |  |   38|  1.13M|#define HB_BUFFER_MAX_LEN_DEFAULT 0x3FFFFFFF /* Shaping more than a billion chars? Let us know! */
  ------------------
  336|  1.13M|  max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
  ------------------
  |  |   48|  1.13M|#define HB_BUFFER_MAX_OPS_DEFAULT 0x1FFFFFFF /* Shaping more than a billion operations? Let us know! */
  ------------------
  337|  1.13M|  deallocate_var_all ();
  338|  1.13M|  serial = 0;
  339|       |  // Intentionally not reseting shaping_failed, such that it can be inspected.
  340|  1.13M|}
_ZN11hb_buffer_t3addEjj:
  346|  1.11M|{
  347|  1.11M|  hb_glyph_info_t *glyph;
  348|       |
  349|  1.11M|  if (unlikely (!ensure (len + 1))) return;
  ------------------
  |  |  259|  1.11M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.11M]
  |  |  ------------------
  ------------------
  350|       |
  351|  1.11M|  glyph = &info[len];
  352|       |
  353|  1.11M|  hb_memset (glyph, 0, sizeof (*glyph));
  354|  1.11M|  glyph->codepoint = codepoint;
  355|  1.11M|  glyph->mask = 0;
  356|  1.11M|  glyph->cluster = cluster;
  357|       |
  358|  1.11M|  len++;
  359|  1.11M|}
_ZN11hb_buffer_t12clear_outputEv:
  374|   710k|{
  375|   710k|  have_output = true;
  376|   710k|  have_positions = false;
  377|       |
  378|   710k|  idx = 0;
  379|   710k|  out_len = 0;
  380|   710k|  out_info = info;
  381|   710k|}
_ZN11hb_buffer_t15clear_positionsEv:
  385|   592k|{
  386|   592k|  have_output = false;
  387|   592k|  have_positions = true;
  388|       |
  389|   592k|  out_len = 0;
  390|   592k|  out_info = info;
  391|       |
  392|   592k|  hb_memset (pos, 0, sizeof (pos[0]) * len);
  393|   592k|}
_ZN11hb_buffer_t4syncEv:
  397|   710k|{
  398|   710k|  bool ret = false;
  399|       |
  400|   710k|  assert (have_output);
  401|       |
  402|      0|  assert (idx <= len);
  403|       |
  404|   710k|  if (unlikely (!successful || !next_glyphs (len - idx)))
  ------------------
  |  |  259|  1.41M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.45k, False: 708k]
  |  |  |  Branch (259:47): [True: 1.45k, False: 708k]
  |  |  |  Branch (259:47): [True: 0, False: 708k]
  |  |  ------------------
  ------------------
  405|  1.45k|    goto reset;
  406|       |
  407|   708k|  if (out_info != info)
  ------------------
  |  Branch (407:7): [True: 53.7k, False: 654k]
  ------------------
  408|  53.7k|  {
  409|  53.7k|    pos = (hb_glyph_position_t *) info;
  410|  53.7k|    info = out_info;
  411|  53.7k|  }
  412|   708k|  len = out_len;
  413|   708k|  ret = true;
  414|       |
  415|   710k|reset:
  416|   710k|  have_output = false;
  417|   710k|  out_len = 0;
  418|   710k|  out_info = info;
  419|   710k|  idx = 0;
  420|       |
  421|   710k|  return ret;
  422|   708k|}
_ZN11hb_buffer_t7move_toEj:
  450|  32.5M|{
  451|  32.5M|  if (!have_output)
  ------------------
  |  Branch (451:7): [True: 3.87M, False: 28.6M]
  ------------------
  452|  3.87M|  {
  453|  3.87M|    assert (i <= len);
  454|      0|    idx = i;
  455|  3.87M|    return true;
  456|  3.87M|  }
  457|  28.6M|  if (unlikely (!successful))
  ------------------
  |  |  259|  28.6M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.74k, False: 28.6M]
  |  |  ------------------
  ------------------
  458|  1.74k|    return false;
  459|       |
  460|  28.6M|  assert (i <= out_len + (len - idx));
  461|       |
  462|  28.6M|  if (out_len < i)
  ------------------
  |  Branch (462:7): [True: 3.01M, False: 25.6M]
  ------------------
  463|  3.01M|  {
  464|  3.01M|    unsigned int count = i - out_len;
  465|  3.01M|    if (unlikely (!make_room_for (count, count))) return false;
  ------------------
  |  |  259|  3.01M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 83, False: 3.01M]
  |  |  ------------------
  ------------------
  466|       |
  467|  3.01M|    memmove (out_info + out_len, info + idx, count * sizeof (out_info[0]));
  468|  3.01M|    idx += count;
  469|  3.01M|    out_len += count;
  470|  3.01M|  }
  471|  25.6M|  else if (out_len > i)
  ------------------
  |  Branch (471:12): [True: 6.32M, False: 19.3M]
  ------------------
  472|  6.32M|  {
  473|       |    /* Tricky part: rewinding... */
  474|  6.32M|    unsigned int count = out_len - i;
  475|       |
  476|       |    /* This will blow in our face if memory allocation fails later
  477|       |     * in this same lookup...
  478|       |     *
  479|       |     * We used to shift with extra 32 items.
  480|       |     * But that would leave empty slots in the buffer in case of allocation
  481|       |     * failures.  See comments in shift_forward().  This can cause O(N^2)
  482|       |     * behavior more severely than adding 32 empty slots can... */
  483|  6.32M|    if (unlikely (idx < count && !shift_forward (count - idx))) return false;
  ------------------
  |  |  259|  6.62M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 6.32M]
  |  |  |  Branch (259:47): [True: 297k, False: 6.02M]
  |  |  |  Branch (259:47): [True: 151, False: 297k]
  |  |  ------------------
  ------------------
  484|       |
  485|  6.32M|    assert (idx >= count);
  486|       |
  487|      0|    idx -= count;
  488|  6.32M|    out_len -= count;
  489|  6.32M|    memmove (info + idx, out_info + out_len, count * sizeof (out_info[0]));
  490|  6.32M|  }
  491|       |
  492|  28.6M|  return true;
  493|  28.6M|}
_ZN11hb_buffer_t19merge_clusters_implEjj:
  517|   547k|{
  518|   547k|  if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
  ------------------
  |  Branch (518:7): [True: 0, False: 547k]
  ------------------
  519|      0|  {
  520|      0|    unsafe_to_break (start, end);
  521|      0|    return;
  522|      0|  }
  523|       |
  524|   547k|  unsigned int cluster = info[start].cluster;
  525|       |
  526|  5.42M|  for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (526:36): [True: 4.87M, False: 547k]
  ------------------
  527|  4.87M|    cluster = hb_min (cluster, info[i].cluster);
  528|       |
  529|       |  /* Extend end */
  530|   547k|  if (cluster != info[end - 1].cluster)
  ------------------
  |  Branch (530:7): [True: 43.2k, False: 504k]
  ------------------
  531|   187k|    while (end < len && info[end - 1].cluster == info[end].cluster)
  ------------------
  |  Branch (531:12): [True: 181k, False: 5.85k]
  |  Branch (531:25): [True: 144k, False: 37.4k]
  ------------------
  532|   144k|      end++;
  533|       |
  534|       |  /* Extend start */
  535|   547k|  if (cluster != info[start].cluster)
  ------------------
  |  Branch (535:7): [True: 805, False: 546k]
  ------------------
  536|  1.87k|    while (idx < start && info[start - 1].cluster == info[start].cluster)
  ------------------
  |  Branch (536:12): [True: 1.06k, False: 802]
  |  Branch (536:27): [True: 1.06k, False: 3]
  ------------------
  537|  1.06k|      start--;
  538|       |
  539|       |  /* If we hit the start of buffer, continue in out-buffer. */
  540|   547k|  if (idx == start && info[start].cluster != cluster)
  ------------------
  |  Branch (540:7): [True: 495k, False: 52.5k]
  |  Branch (540:23): [True: 39, False: 495k]
  ------------------
  541|     39|    for (unsigned int i = out_len; i && out_info[i - 1].cluster == info[start].cluster; i--)
  ------------------
  |  Branch (541:36): [True: 1, False: 38]
  |  Branch (541:41): [True: 0, False: 1]
  ------------------
  542|      0|      set_cluster (out_info[i - 1], cluster);
  543|       |
  544|  6.12M|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (544:32): [True: 5.57M, False: 547k]
  ------------------
  545|  5.57M|    set_cluster (info[i], cluster);
  546|   547k|}
_ZN11hb_buffer_t18merge_out_clustersEjj:
  550|   175k|{
  551|   175k|  if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
  ------------------
  |  Branch (551:7): [True: 0, False: 175k]
  ------------------
  552|      0|    return;
  553|       |
  554|   175k|  if (unlikely (end - start < 2))
  ------------------
  |  |  259|   175k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 169k, False: 6.52k]
  |  |  ------------------
  ------------------
  555|   169k|    return;
  556|       |
  557|  6.52k|  unsigned int cluster = out_info[start].cluster;
  558|       |
  559|  20.7k|  for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (559:36): [True: 14.2k, False: 6.52k]
  ------------------
  560|  14.2k|    cluster = hb_min (cluster, out_info[i].cluster);
  561|       |
  562|       |  /* Extend start */
  563|  20.6M|  while (start && out_info[start - 1].cluster == out_info[start].cluster)
  ------------------
  |  Branch (563:10): [True: 20.6M, False: 2.05k]
  |  Branch (563:19): [True: 20.6M, False: 4.47k]
  ------------------
  564|  20.6M|    start--;
  565|       |
  566|       |  /* Extend end */
  567|  6.52k|  while (end < out_len && out_info[end - 1].cluster == out_info[end].cluster)
  ------------------
  |  Branch (567:10): [True: 0, False: 6.52k]
  |  Branch (567:27): [True: 0, False: 0]
  ------------------
  568|      0|    end++;
  569|       |
  570|       |  /* If we hit the end of out-buffer, continue in buffer. */
  571|  6.52k|  if (end == out_len)
  ------------------
  |  Branch (571:7): [True: 6.52k, False: 0]
  ------------------
  572|  19.4M|    for (unsigned int i = idx; i < len && info[i].cluster == out_info[end - 1].cluster; i++)
  ------------------
  |  Branch (572:32): [True: 19.4M, False: 3.34k]
  |  Branch (572:43): [True: 19.4M, False: 3.17k]
  ------------------
  573|  19.4M|      set_cluster (info[i], cluster);
  574|       |
  575|  20.6M|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (575:32): [True: 20.6M, False: 6.52k]
  ------------------
  576|  20.6M|    set_cluster (out_info[i], cluster);
  577|  6.52k|}
_ZN11hb_buffer_t12delete_glyphEv:
  580|   734k|{
  581|       |  /* The logic here is duplicated in hb_ot_hide_default_ignorables(). */
  582|       |
  583|   734k|  unsigned int cluster = info[idx].cluster;
  584|   734k|  if ((idx + 1 < len && cluster == info[idx + 1].cluster) ||
  ------------------
  |  Branch (584:8): [True: 730k, False: 4.32k]
  |  Branch (584:25): [True: 715k, False: 14.6k]
  ------------------
  585|   734k|      (out_len && cluster == out_info[out_len - 1].cluster))
  ------------------
  |  Branch (585:8): [True: 12.6k, False: 6.35k]
  |  Branch (585:19): [True: 10.6k, False: 2.02k]
  ------------------
  586|   726k|  {
  587|       |    /* Cluster survives; do nothing. */
  588|   726k|    goto done;
  589|   726k|  }
  590|       |
  591|  8.37k|  if (out_len)
  ------------------
  |  Branch (591:7): [True: 2.02k, False: 6.35k]
  ------------------
  592|  2.02k|  {
  593|       |    /* Merge cluster backward. */
  594|  2.02k|    if (cluster < out_info[out_len - 1].cluster)
  ------------------
  |  Branch (594:9): [True: 0, False: 2.02k]
  ------------------
  595|      0|    {
  596|      0|      unsigned int mask = info[idx].mask;
  597|      0|      unsigned int old_cluster = out_info[out_len - 1].cluster;
  598|      0|      for (unsigned i = out_len; i && out_info[i - 1].cluster == old_cluster; i--)
  ------------------
  |  Branch (598:34): [True: 0, False: 0]
  |  Branch (598:39): [True: 0, False: 0]
  ------------------
  599|      0|	set_cluster (out_info[i - 1], cluster, mask);
  600|      0|    }
  601|  2.02k|    goto done;
  602|  2.02k|  }
  603|       |
  604|  6.35k|  if (idx + 1 < len)
  ------------------
  |  Branch (604:7): [True: 5.75k, False: 601]
  ------------------
  605|  5.75k|  {
  606|       |    /* Merge cluster forward. */
  607|  5.75k|    merge_clusters (idx, idx + 2);
  608|  5.75k|    goto done;
  609|  5.75k|  }
  610|       |
  611|   734k|done:
  612|   734k|  skip_glyph ();
  613|   734k|}
_ZN11hb_buffer_t21delete_glyphs_inplaceEPFbPK15hb_glyph_info_tE:
  617|  14.4k|{
  618|       |  /* Merge clusters and delete filtered glyphs.
  619|       |   * NOTE! We can't use out-buffer as we have positioning data. */
  620|  14.4k|  unsigned int j = 0;
  621|  14.4k|  unsigned int count = len;
  622|  7.47M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (622:28): [True: 7.46M, False: 14.4k]
  ------------------
  623|  7.46M|  {
  624|  7.46M|    if (filter (&info[i]))
  ------------------
  |  Branch (624:9): [True: 319k, False: 7.14M]
  ------------------
  625|   319k|    {
  626|       |      /* Merge clusters.
  627|       |       * Same logic as delete_glyph(), but for in-place removal. */
  628|       |
  629|   319k|      unsigned int cluster = info[i].cluster;
  630|   319k|      if (i + 1 < count && cluster == info[i + 1].cluster)
  ------------------
  |  Branch (630:11): [True: 318k, False: 945]
  |  Branch (630:28): [True: 314k, False: 3.90k]
  ------------------
  631|   314k|	continue; /* Cluster survives; do nothing. */
  632|       |
  633|  4.85k|      if (j)
  ------------------
  |  Branch (633:11): [True: 3.96k, False: 890]
  ------------------
  634|  3.96k|      {
  635|       |	/* Merge cluster backward. */
  636|  3.96k|	if (cluster < info[j - 1].cluster)
  ------------------
  |  Branch (636:6): [True: 169, False: 3.79k]
  ------------------
  637|    169|	{
  638|    169|	  unsigned int mask = info[i].mask;
  639|    169|	  unsigned int old_cluster = info[j - 1].cluster;
  640|  4.47k|	  for (unsigned k = j; k && info[k - 1].cluster == old_cluster; k--)
  ------------------
  |  Branch (640:25): [True: 4.44k, False: 33]
  |  Branch (640:30): [True: 4.30k, False: 136]
  ------------------
  641|  4.30k|	    set_cluster (info[k - 1], cluster, mask);
  642|    169|	}
  643|  3.96k|	continue;
  644|  3.96k|      }
  645|       |
  646|    890|      if (i + 1 < count)
  ------------------
  |  Branch (646:11): [True: 728, False: 162]
  ------------------
  647|    728|	merge_clusters (i, i + 2); /* Merge cluster forward. */
  648|       |
  649|    890|      continue;
  650|  4.85k|    }
  651|       |
  652|  7.14M|    if (j != i)
  ------------------
  |  Branch (652:9): [True: 1.85M, False: 5.29M]
  ------------------
  653|  1.85M|    {
  654|  1.85M|      info[j] = info[i];
  655|  1.85M|      pos[j] = pos[i];
  656|  1.85M|    }
  657|  7.14M|    j++;
  658|  7.14M|  }
  659|  14.4k|  len = j;
  660|  14.4k|}
_ZN11hb_buffer_t24guess_segment_propertiesEv:
  664|  66.6k|{
  665|  66.6k|  assert_unicode ();
  666|       |
  667|       |  /* If script is set to INVALID, guess from buffer contents */
  668|  66.6k|  if (props.script == HB_SCRIPT_INVALID) {
  ------------------
  |  Branch (668:7): [True: 66.6k, False: 0]
  ------------------
  669|   224k|    for (unsigned int i = 0; i < len; i++) {
  ------------------
  |  Branch (669:30): [True: 221k, False: 3.05k]
  ------------------
  670|   221k|      hb_script_t script = unicode->script (info[i].codepoint);
  671|   221k|      if (likely (script != HB_SCRIPT_COMMON &&
  ------------------
  |  |  258|   591k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 63.6k, False: 158k]
  |  |  |  Branch (258:45): [True: 75.0k, False: 146k]
  |  |  |  Branch (258:45): [True: 72.5k, False: 2.48k]
  |  |  |  Branch (258:45): [True: 63.6k, False: 8.97k]
  |  |  ------------------
  ------------------
  672|   221k|		  script != HB_SCRIPT_INHERITED &&
  673|   221k|		  script != HB_SCRIPT_UNKNOWN)) {
  674|  63.6k|	props.script = script;
  675|  63.6k|	break;
  676|  63.6k|      }
  677|   221k|    }
  678|  66.6k|  }
  679|       |
  680|       |  /* If direction is set to INVALID, guess from script */
  681|  66.6k|  if (props.direction == HB_DIRECTION_INVALID) {
  ------------------
  |  Branch (681:7): [True: 65.4k, False: 1.22k]
  ------------------
  682|  65.4k|    props.direction = hb_script_get_horizontal_direction (props.script);
  683|  65.4k|    if (props.direction == HB_DIRECTION_INVALID)
  ------------------
  |  Branch (683:9): [True: 24, False: 65.4k]
  ------------------
  684|     24|      props.direction = HB_DIRECTION_LTR;
  685|  65.4k|  }
  686|       |
  687|       |  /* If language is not set, use default language from locale */
  688|  66.6k|  if (props.language == HB_LANGUAGE_INVALID) {
  ------------------
  |  |  334|  66.6k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  |  Branch (688:7): [True: 65.4k, False: 1.22k]
  ------------------
  689|       |    /* TODO get_default_for_script? using $LANGUAGE */
  690|  65.4k|    props.language = hb_language_get_default ();
  691|  65.4k|  }
  692|  66.6k|}
hb_buffer_create:
  737|   156k|{
  738|   156k|  hb_buffer_t *buffer;
  739|       |
  740|   156k|  if (!(buffer = hb_object_create<hb_buffer_t> ()))
  ------------------
  |  Branch (740:7): [True: 2.04k, False: 154k]
  ------------------
  741|  2.04k|    return hb_buffer_get_empty ();
  742|       |
  743|   154k|  buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
  ------------------
  |  |   38|   154k|#define HB_BUFFER_MAX_LEN_DEFAULT 0x3FFFFFFF /* Shaping more than a billion chars? Let us know! */
  ------------------
  744|   154k|  buffer->max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
  ------------------
  |  |   48|   154k|#define HB_BUFFER_MAX_OPS_DEFAULT 0x1FFFFFFF /* Shaping more than a billion operations? Let us know! */
  ------------------
  745|       |
  746|   154k|  buffer->reset ();
  747|       |
  748|   154k|  return buffer;
  749|   156k|}
hb_buffer_create_similar:
  765|  58.8k|{
  766|  58.8k|  hb_buffer_t *buffer = hb_buffer_create ();
  767|       |
  768|  58.8k|  buffer->similar (*src);
  769|       |
  770|  58.8k|  return buffer;
  771|  58.8k|}
hb_buffer_get_empty:
  802|  2.04k|{
  803|  2.04k|  return const_cast<hb_buffer_t *> (&Null (hb_buffer_t));
  ------------------
  |  |  124|  2.04k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  804|  2.04k|}
hb_buffer_destroy:
  836|   156k|{
  837|   156k|  if (!hb_object_destroy (buffer)) return;
  ------------------
  |  Branch (837:7): [True: 2.04k, False: 154k]
  ------------------
  838|       |
  839|   154k|  hb_unicode_funcs_destroy (buffer->unicode);
  840|       |
  841|   154k|  hb_free (buffer->info);
  ------------------
  |  |  236|   154k|#define hb_free hb_free_impl
  ------------------
  842|   154k|  hb_free (buffer->pos);
  ------------------
  |  |  236|   154k|#define hb_free hb_free_impl
  ------------------
  843|   154k|#ifndef HB_NO_BUFFER_MESSAGE
  844|   154k|  if (buffer->message_destroy)
  ------------------
  |  Branch (844:7): [True: 0, False: 154k]
  ------------------
  845|      0|    buffer->message_destroy (buffer->message_data);
  846|   154k|#endif
  847|       |
  848|   154k|  hb_free (buffer);
  ------------------
  |  |  236|   154k|#define hb_free hb_free_impl
  ------------------
  849|   154k|}
hb_buffer_get_direction:
 1036|  58.8k|{
 1037|  58.8k|  return buffer->props.direction;
 1038|  58.8k|}
hb_buffer_set_flags:
 1178|   594k|{
 1179|   594k|  if (unlikely (hb_object_is_immutable (buffer)))
  ------------------
  |  |  259|   594k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.69k, False: 593k]
  |  |  ------------------
  ------------------
 1180|  1.69k|    return;
 1181|       |
 1182|   593k|  buffer->flags = flags;
 1183|   593k|}
hb_buffer_get_flags:
 1198|   561k|{
 1199|   561k|  return buffer->flags;
 1200|   561k|}
hb_buffer_clear_contents:
 1374|   502k|{
 1375|   502k|  if (unlikely (hb_object_is_immutable (buffer)))
  ------------------
  |  |  259|   502k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 275, False: 502k]
  |  |  ------------------
  ------------------
 1376|    275|    return;
 1377|       |
 1378|   502k|  buffer->clear ();
 1379|   502k|}
hb_buffer_set_length:
 1458|  1.03M|{
 1459|  1.03M|  if (unlikely (hb_object_is_immutable (buffer)))
  ------------------
  |  |  259|  1.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.83k, False: 1.03M]
  |  |  ------------------
  ------------------
 1460|  3.83k|    return length == 0;
 1461|       |
 1462|  1.03M|  if (unlikely (!buffer->ensure (length)))
  ------------------
  |  |  259|  1.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.22k, False: 1.02M]
  |  |  ------------------
  ------------------
 1463|  7.22k|    return false;
 1464|       |
 1465|       |  /* Wipe the new space */
 1466|  1.02M|  if (length > buffer->len) {
  ------------------
  |  Branch (1466:7): [True: 1.02M, False: 798]
  ------------------
 1467|  1.02M|    hb_memset (buffer->info + buffer->len, 0, sizeof (buffer->info[0]) * (length - buffer->len));
 1468|  1.02M|    if (buffer->have_positions)
  ------------------
  |  Branch (1468:9): [True: 464k, False: 560k]
  ------------------
 1469|   464k|      hb_memset (buffer->pos + buffer->len, 0, sizeof (buffer->pos[0]) * (length - buffer->len));
 1470|  1.02M|  }
 1471|       |
 1472|  1.02M|  buffer->len = length;
 1473|       |
 1474|  1.02M|  if (!length)
  ------------------
  |  Branch (1474:7): [True: 798, False: 1.02M]
  ------------------
 1475|    798|  {
 1476|    798|    buffer->content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
 1477|    798|    buffer->clear_context (0);
 1478|    798|  }
 1479|  1.02M|  buffer->clear_context (1);
 1480|       |
 1481|  1.02M|  return true;
 1482|  1.03M|}
hb_buffer_get_glyph_infos:
 1519|  88.9k|{
 1520|  88.9k|  if (length)
  ------------------
  |  Branch (1520:7): [True: 88.2k, False: 766]
  ------------------
 1521|  88.2k|    *length = buffer->len;
 1522|       |
 1523|  88.9k|  return (hb_glyph_info_t *) buffer->info;
 1524|  88.9k|}
hb_buffer_get_glyph_positions:
 1548|   565k|{
 1549|   565k|  if (length)
  ------------------
  |  Branch (1549:7): [True: 565k, False: 0]
  ------------------
 1550|   565k|    *length = buffer->len;
 1551|       |
 1552|   565k|  if (!buffer->have_positions)
  ------------------
  |  Branch (1552:7): [True: 0, False: 565k]
  ------------------
 1553|      0|  {
 1554|      0|    if (unlikely (buffer->message_depth))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1555|      0|      return nullptr;
 1556|       |
 1557|      0|    buffer->clear_positions ();
 1558|      0|  }
 1559|       |
 1560|   565k|  return (hb_glyph_position_t *) buffer->pos;
 1561|   565k|}
hb_buffer_reverse:
 1609|  3.00k|{
 1610|  3.00k|  buffer->reverse ();
 1611|  3.00k|}
hb_buffer_guess_segment_properties:
 1676|  66.6k|{
 1677|  66.6k|  buffer->guess_segment_properties ();
 1678|  66.6k|}
hb_buffer_add_utf8:
 1774|  33.3k|{
 1775|  33.3k|  hb_buffer_add_utf<hb_utf8_t> (buffer, (const uint8_t *) text, text_length, item_offset, item_length);
 1776|  33.3k|}
hb_buffer_add_utf32:
 1826|  33.3k|{
 1827|  33.3k|  hb_buffer_add_utf<hb_utf32_t> (buffer, text, text_length, item_offset, item_length);
 1828|  33.3k|}
hb_buffer_append:
 1910|  1.03M|{
 1911|  1.03M|  assert (!buffer->have_output && !source->have_output);
 1912|      0|  assert (buffer->have_positions == source->have_positions ||
 1913|  1.03M|	  !buffer->len || !source->len);
 1914|      0|  assert (buffer->content_type == source->content_type ||
 1915|  1.03M|	  !buffer->len || !source->len);
 1916|       |
 1917|  1.03M|  if (end > source->len)
  ------------------
  |  Branch (1917:7): [True: 534k, False: 502k]
  ------------------
 1918|   534k|    end = source->len;
 1919|  1.03M|  if (start > end)
  ------------------
  |  Branch (1919:7): [True: 0, False: 1.03M]
  ------------------
 1920|      0|    start = end;
 1921|  1.03M|  if (start == end)
  ------------------
  |  Branch (1921:7): [True: 1.09k, False: 1.03M]
  ------------------
 1922|  1.09k|    return;
 1923|       |
 1924|  1.03M|  if (buffer->len + (end - start) < buffer->len) /* Overflows. */
  ------------------
  |  Branch (1924:7): [True: 0, False: 1.03M]
  ------------------
 1925|      0|  {
 1926|      0|    buffer->successful = false;
 1927|      0|    return;
 1928|      0|  }
 1929|       |
 1930|  1.03M|  unsigned int orig_len = buffer->len;
 1931|  1.03M|  hb_buffer_set_length (buffer, buffer->len + (end - start));
 1932|  1.03M|  if (unlikely (!buffer->successful))
  ------------------
  |  |  259|  1.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.0k, False: 1.02M]
  |  |  ------------------
  ------------------
 1933|  11.0k|    return;
 1934|       |
 1935|  1.02M|  if (!orig_len)
  ------------------
  |  Branch (1935:7): [True: 560k, False: 464k]
  ------------------
 1936|   560k|    buffer->content_type = source->content_type;
 1937|  1.02M|  if (!buffer->have_positions && source->have_positions)
  ------------------
  |  Branch (1937:7): [True: 560k, False: 464k]
  |  Branch (1937:34): [True: 27.7k, False: 532k]
  ------------------
 1938|  27.7k|    buffer->clear_positions ();
 1939|       |
 1940|  1.02M|  hb_segment_properties_overlay (&buffer->props, &source->props);
 1941|       |
 1942|  1.02M|  hb_memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
 1943|  1.02M|  if (buffer->have_positions)
  ------------------
  |  Branch (1943:7): [True: 492k, False: 532k]
  ------------------
 1944|   492k|    hb_memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));
 1945|       |
 1946|  1.02M|  if (source->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE)
  ------------------
  |  Branch (1946:7): [True: 532k, False: 492k]
  ------------------
 1947|   532k|  {
 1948|       |    /* See similar logic in add_utf. */
 1949|       |
 1950|       |    /* pre-context */
 1951|   532k|    if (!orig_len && start + source->context_len[0] > 0)
  ------------------
  |  Branch (1951:9): [True: 532k, False: 0]
  |  Branch (1951:22): [True: 473k, False: 58.8k]
  ------------------
 1952|   473k|    {
 1953|   473k|      buffer->clear_context (0);
 1954|  2.57M|      while (start > 0 && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1954:14): [True: 2.44M, False: 131k]
  |  Branch (1954:27): [True: 2.10M, False: 342k]
  ------------------
 1955|  2.10M|	buffer->context[0][buffer->context_len[0]++] = source->info[--start].codepoint;
 1956|   473k|      for (auto i = 0u; i < source->context_len[0] && buffer->context_len[0] < buffer->CONTEXT_LENGTH; i++)
  ------------------
  |  Branch (1956:25): [True: 0, False: 473k]
  |  Branch (1956:55): [True: 0, False: 0]
  ------------------
 1957|      0|	buffer->context[0][buffer->context_len[0]++] = source->context[0][i];
 1958|   473k|    }
 1959|       |
 1960|       |    /* post-context */
 1961|   532k|    buffer->clear_context (1);
 1962|  2.63M|    while (end < source->len && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1962:12): [True: 2.44M, False: 190k]
  |  Branch (1962:33): [True: 2.10M, False: 341k]
  ------------------
 1963|  2.10M|      buffer->context[1][buffer->context_len[1]++] = source->info[end++].codepoint;
 1964|   532k|    for (auto i = 0u; i < source->context_len[1] && buffer->context_len[1] < buffer->CONTEXT_LENGTH; i++)
  ------------------
  |  Branch (1964:23): [True: 0, False: 532k]
  |  Branch (1964:53): [True: 0, False: 0]
  ------------------
 1965|      0|      buffer->context[1][buffer->context_len[1]++] = source->context[1][i];
 1966|   532k|  }
 1967|  1.02M|}
_ZN11hb_buffer_t4sortEjjPFiPK15hb_glyph_info_tS2_E:
 2051|  36.0k|{
 2052|  36.0k|  assert (!have_positions);
 2053|  68.6k|  for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (2053:36): [True: 32.6k, False: 36.0k]
  ------------------
 2054|  32.6k|  {
 2055|  32.6k|    unsigned int j = i;
 2056|   506k|    while (j > start && compar (&info[j - 1], &info[i]) > 0)
  ------------------
  |  Branch (2056:12): [True: 505k, False: 414]
  |  Branch (2056:25): [True: 473k, False: 32.2k]
  ------------------
 2057|   473k|      j--;
 2058|  32.6k|    if (i == j)
  ------------------
  |  Branch (2058:9): [True: 24.7k, False: 7.87k]
  ------------------
 2059|  24.7k|      continue;
 2060|       |    /* Move item i to occupy place for item j, shift what's in between. */
 2061|  7.87k|    merge_clusters (j, i + 1);
 2062|  7.87k|    {
 2063|  7.87k|      hb_glyph_info_t t = info[i];
 2064|  7.87k|      memmove (&info[j + 1], &info[j], (i - j) * sizeof (hb_glyph_info_t));
 2065|  7.87k|      info[j] = t;
 2066|  7.87k|    }
 2067|  7.87k|  }
 2068|  36.0k|}
hb_buffer_diff:
 2093|  28.4k|{
 2094|  28.4k|  if (buffer->content_type != reference->content_type && buffer->len && reference->len)
  ------------------
  |  Branch (2094:7): [True: 731, False: 27.7k]
  |  Branch (2094:58): [True: 0, False: 731]
  |  Branch (2094:73): [True: 0, False: 0]
  ------------------
 2095|      0|    return HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH;
 2096|       |
 2097|  28.4k|  hb_buffer_diff_flags_t result = HB_BUFFER_DIFF_FLAG_EQUAL;
 2098|  28.4k|  bool contains = dottedcircle_glyph != (hb_codepoint_t) -1;
 2099|       |
 2100|  28.4k|  unsigned int count = reference->len;
 2101|       |
 2102|  28.4k|  if (buffer->len != count)
  ------------------
  |  Branch (2102:7): [True: 719, False: 27.7k]
  ------------------
 2103|    719|  {
 2104|       |    /*
 2105|       |     * we can't compare glyph-by-glyph, but we do want to know if there
 2106|       |     * are .notdef or dottedcircle glyphs present in the reference buffer
 2107|       |     */
 2108|    719|    const hb_glyph_info_t *info = reference->info;
 2109|    719|    unsigned int i;
 2110|   145k|    for (i = 0; i < count; i++)
  ------------------
  |  Branch (2110:17): [True: 145k, False: 719]
  ------------------
 2111|   145k|    {
 2112|   145k|      if (contains && info[i].codepoint == dottedcircle_glyph)
  ------------------
  |  Branch (2112:11): [True: 0, False: 145k]
  |  Branch (2112:23): [True: 0, False: 0]
  ------------------
 2113|      0|	result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
 2114|   145k|      if (contains && info[i].codepoint == 0)
  ------------------
  |  Branch (2114:11): [True: 0, False: 145k]
  |  Branch (2114:23): [True: 0, False: 0]
  ------------------
 2115|      0|	result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
 2116|   145k|    }
 2117|    719|    result |= HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH;
 2118|    719|    return hb_buffer_diff_flags_t (result);
 2119|    719|  }
 2120|       |
 2121|  27.7k|  if (!count)
  ------------------
  |  Branch (2121:7): [True: 145, False: 27.5k]
  ------------------
 2122|    145|    return hb_buffer_diff_flags_t (result);
 2123|       |
 2124|  27.5k|  const hb_glyph_info_t *buf_info = buffer->info;
 2125|  27.5k|  const hb_glyph_info_t *ref_info = reference->info;
 2126|  7.09M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (2126:28): [True: 7.06M, False: 27.5k]
  ------------------
 2127|  7.06M|  {
 2128|  7.06M|    if (buf_info->codepoint != ref_info->codepoint)
  ------------------
  |  Branch (2128:9): [True: 878, False: 7.06M]
  ------------------
 2129|    878|      result |= HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH;
 2130|  7.06M|    if (buf_info->cluster != ref_info->cluster)
  ------------------
  |  Branch (2130:9): [True: 596, False: 7.06M]
  ------------------
 2131|    596|      result |= HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH;
 2132|  7.06M|    if ((buf_info->mask ^ ref_info->mask) & HB_GLYPH_FLAG_DEFINED)
  ------------------
  |  Branch (2132:9): [True: 1.52k, False: 7.06M]
  ------------------
 2133|  1.52k|      result |= HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH;
 2134|  7.06M|    if (contains && ref_info->codepoint == dottedcircle_glyph)
  ------------------
  |  Branch (2134:9): [True: 0, False: 7.06M]
  |  Branch (2134:21): [True: 0, False: 0]
  ------------------
 2135|      0|      result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
 2136|  7.06M|    if (contains && ref_info->codepoint == 0)
  ------------------
  |  Branch (2136:9): [True: 0, False: 7.06M]
  |  Branch (2136:21): [True: 0, False: 0]
  ------------------
 2137|      0|      result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
 2138|  7.06M|    buf_info++;
 2139|  7.06M|    ref_info++;
 2140|  7.06M|  }
 2141|       |
 2142|  27.5k|  if (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS)
  ------------------
  |  Branch (2142:7): [True: 27.5k, False: 0]
  ------------------
 2143|  27.5k|  {
 2144|  27.5k|    assert (buffer->have_positions);
 2145|      0|    const hb_glyph_position_t *buf_pos = buffer->pos;
 2146|  27.5k|    const hb_glyph_position_t *ref_pos = reference->pos;
 2147|  7.06M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (2147:30): [True: 7.04M, False: 27.5k]
  ------------------
 2148|  7.04M|    {
 2149|  7.04M|      if ((unsigned int) abs (buf_pos->x_advance - ref_pos->x_advance) > position_fuzz ||
  ------------------
  |  Branch (2149:11): [True: 20, False: 7.04M]
  ------------------
 2150|  7.04M|	  (unsigned int) abs (buf_pos->y_advance - ref_pos->y_advance) > position_fuzz ||
  ------------------
  |  Branch (2150:4): [True: 0, False: 7.04M]
  ------------------
 2151|  7.04M|	  (unsigned int) abs (buf_pos->x_offset - ref_pos->x_offset) > position_fuzz ||
  ------------------
  |  Branch (2151:4): [True: 2, False: 7.04M]
  ------------------
 2152|  7.04M|	  (unsigned int) abs (buf_pos->y_offset - ref_pos->y_offset) > position_fuzz)
  ------------------
  |  Branch (2152:4): [True: 11, False: 7.04M]
  ------------------
 2153|     33|      {
 2154|     33|	result |= HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH;
 2155|     33|	break;
 2156|     33|      }
 2157|  7.04M|      buf_pos++;
 2158|  7.04M|      ref_pos++;
 2159|  7.04M|    }
 2160|  27.5k|  }
 2161|       |
 2162|      0|  return result;
 2163|  27.7k|}
hb-buffer.cc:_ZL17hb_buffer_add_utfI9hb_utf8_tEvP11hb_buffer_tPKNT_11codepoint_tEiji:
 1687|  33.3k|{
 1688|  33.3k|  typedef typename utf_t::codepoint_t T;
 1689|  33.3k|  const hb_codepoint_t replacement = buffer->replacement;
 1690|       |
 1691|  33.3k|  buffer->assert_unicode ();
 1692|       |
 1693|  33.3k|  if (unlikely (hb_object_is_immutable (buffer)))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 875, False: 32.4k]
  |  |  ------------------
  ------------------
 1694|    875|    return;
 1695|       |
 1696|  32.4k|  if (text_length == -1)
  ------------------
  |  Branch (1696:7): [True: 32.4k, False: 0]
  ------------------
 1697|  32.4k|    text_length = utf_t::strlen (text);
 1698|       |
 1699|  32.4k|  if (item_length == -1)
  ------------------
  |  Branch (1699:7): [True: 32.4k, False: 0]
  ------------------
 1700|  32.4k|    item_length = text_length - item_offset;
 1701|       |
 1702|  32.4k|  if (unlikely (item_length < 0 ||
  ------------------
  |  |  259|   129k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 961, False: 31.5k]
  |  |  |  Branch (259:47): [True: 0, False: 32.4k]
  |  |  |  Branch (259:47): [True: 0, False: 32.4k]
  |  |  |  Branch (259:47): [True: 961, False: 31.5k]
  |  |  ------------------
  ------------------
 1703|  32.4k|		item_length > INT_MAX / 8 ||
 1704|  32.4k|		!buffer->ensure (buffer->len + item_length * sizeof (T) / 4)))
 1705|    961|    return;
 1706|       |
 1707|       |  /* If buffer is empty and pre-context provided, install it.
 1708|       |   * This check is written this way, to make sure people can
 1709|       |   * provide pre-context in one add_utf() call, then provide
 1710|       |   * text in a follow-up call.  See:
 1711|       |   *
 1712|       |   * https://bugzilla.mozilla.org/show_bug.cgi?id=801410#c13
 1713|       |   */
 1714|  31.5k|  if (!buffer->len && item_offset > 0)
  ------------------
  |  Branch (1714:7): [True: 31.5k, False: 0]
  |  Branch (1714:23): [True: 0, False: 31.5k]
  ------------------
 1715|      0|  {
 1716|       |    /* Add pre-context */
 1717|      0|    buffer->clear_context (0);
 1718|      0|    const T *prev = text + item_offset;
 1719|      0|    const T *start = text;
 1720|      0|    while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1720:12): [True: 0, False: 0]
  |  Branch (1720:28): [True: 0, False: 0]
  ------------------
 1721|      0|    {
 1722|      0|      hb_codepoint_t u;
 1723|      0|      prev = utf_t::prev (prev, start, &u, replacement);
 1724|      0|      buffer->context[0][buffer->context_len[0]++] = u;
 1725|      0|    }
 1726|      0|  }
 1727|       |
 1728|  31.5k|  const T *next = text + item_offset;
 1729|  31.5k|  const T *end = next + item_length;
 1730|   630k|  while (next < end)
  ------------------
  |  Branch (1730:10): [True: 598k, False: 31.5k]
  ------------------
 1731|   598k|  {
 1732|   598k|    hb_codepoint_t u;
 1733|   598k|    const T *old_next = next;
 1734|   598k|    next = utf_t::next (next, end, &u, replacement);
 1735|   598k|    buffer->add (u, old_next - (const T *) text);
 1736|   598k|  }
 1737|       |
 1738|       |  /* Add post-context */
 1739|  31.5k|  buffer->clear_context (1);
 1740|  31.5k|  end = text + text_length;
 1741|  31.5k|  while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1741:10): [True: 0, False: 31.5k]
  |  Branch (1741:24): [True: 0, False: 0]
  ------------------
 1742|      0|  {
 1743|      0|    hb_codepoint_t u;
 1744|      0|    next = utf_t::next (next, end, &u, replacement);
 1745|      0|    buffer->context[1][buffer->context_len[1]++] = u;
 1746|      0|  }
 1747|       |
 1748|  31.5k|  buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
 1749|  31.5k|}
hb-buffer.cc:_ZL17hb_buffer_add_utfI13hb_utf32_xe_tIjLb1EEEvP11hb_buffer_tPKNT_11codepoint_tEiji:
 1687|  33.3k|{
 1688|  33.3k|  typedef typename utf_t::codepoint_t T;
 1689|  33.3k|  const hb_codepoint_t replacement = buffer->replacement;
 1690|       |
 1691|  33.3k|  buffer->assert_unicode ();
 1692|       |
 1693|  33.3k|  if (unlikely (hb_object_is_immutable (buffer)))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 355, False: 32.9k]
  |  |  ------------------
  ------------------
 1694|    355|    return;
 1695|       |
 1696|  32.9k|  if (text_length == -1)
  ------------------
  |  Branch (1696:7): [True: 0, False: 32.9k]
  ------------------
 1697|      0|    text_length = utf_t::strlen (text);
 1698|       |
 1699|  32.9k|  if (item_length == -1)
  ------------------
  |  Branch (1699:7): [True: 32.9k, False: 0]
  ------------------
 1700|  32.9k|    item_length = text_length - item_offset;
 1701|       |
 1702|  32.9k|  if (unlikely (item_length < 0 ||
  ------------------
  |  |  259|   131k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 613, False: 32.3k]
  |  |  |  Branch (259:47): [True: 0, False: 32.9k]
  |  |  |  Branch (259:47): [True: 0, False: 32.9k]
  |  |  |  Branch (259:47): [True: 613, False: 32.3k]
  |  |  ------------------
  ------------------
 1703|  32.9k|		item_length > INT_MAX / 8 ||
 1704|  32.9k|		!buffer->ensure (buffer->len + item_length * sizeof (T) / 4)))
 1705|    613|    return;
 1706|       |
 1707|       |  /* If buffer is empty and pre-context provided, install it.
 1708|       |   * This check is written this way, to make sure people can
 1709|       |   * provide pre-context in one add_utf() call, then provide
 1710|       |   * text in a follow-up call.  See:
 1711|       |   *
 1712|       |   * https://bugzilla.mozilla.org/show_bug.cgi?id=801410#c13
 1713|       |   */
 1714|  32.3k|  if (!buffer->len && item_offset > 0)
  ------------------
  |  Branch (1714:7): [True: 32.3k, False: 0]
  |  Branch (1714:23): [True: 0, False: 32.3k]
  ------------------
 1715|      0|  {
 1716|       |    /* Add pre-context */
 1717|      0|    buffer->clear_context (0);
 1718|      0|    const T *prev = text + item_offset;
 1719|      0|    const T *start = text;
 1720|      0|    while (start < prev && buffer->context_len[0] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1720:12): [True: 0, False: 0]
  |  Branch (1720:28): [True: 0, False: 0]
  ------------------
 1721|      0|    {
 1722|      0|      hb_codepoint_t u;
 1723|      0|      prev = utf_t::prev (prev, start, &u, replacement);
 1724|      0|      buffer->context[0][buffer->context_len[0]++] = u;
 1725|      0|    }
 1726|      0|  }
 1727|       |
 1728|  32.3k|  const T *next = text + item_offset;
 1729|  32.3k|  const T *end = next + item_length;
 1730|   550k|  while (next < end)
  ------------------
  |  Branch (1730:10): [True: 517k, False: 32.3k]
  ------------------
 1731|   517k|  {
 1732|   517k|    hb_codepoint_t u;
 1733|   517k|    const T *old_next = next;
 1734|   517k|    next = utf_t::next (next, end, &u, replacement);
 1735|   517k|    buffer->add (u, old_next - (const T *) text);
 1736|   517k|  }
 1737|       |
 1738|       |  /* Add post-context */
 1739|  32.3k|  buffer->clear_context (1);
 1740|  32.3k|  end = text + text_length;
 1741|  32.3k|  while (next < end && buffer->context_len[1] < buffer->CONTEXT_LENGTH)
  ------------------
  |  Branch (1741:10): [True: 0, False: 32.3k]
  |  Branch (1741:24): [True: 0, False: 0]
  ------------------
 1742|      0|  {
 1743|      0|    hb_codepoint_t u;
 1744|      0|    next = utf_t::next (next, end, &u, replacement);
 1745|      0|    buffer->context[1][buffer->context_len[1]++] = u;
 1746|      0|  }
 1747|       |
 1748|  32.3k|  buffer->content_type = HB_BUFFER_CONTENT_TYPE_UNICODE;
 1749|  32.3k|}

_ZN11hb_buffer_t7messageEP9hb_font_tPKcz:
  561|  1.16M|  {
  562|       |#ifdef HB_NO_BUFFER_MESSAGE
  563|       |    return true;
  564|       |#else
  565|  1.16M|    if (likely (!messaging ()))
  ------------------
  |  |  258|  1.16M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.16M, False: 0]
  |  |  ------------------
  ------------------
  566|  1.16M|      return true;
  567|       |
  568|      0|    va_list ap;
  569|      0|    va_start (ap, fmt);
  570|      0|    bool ret = message_impl (font, fmt, ap);
  571|      0|    va_end (ap);
  572|       |
  573|      0|    return ret;
  574|  1.16M|#endif
  575|  1.16M|  }
_ZN11hb_buffer_t9messagingEv:
  553|  31.0M|  {
  554|       |#ifdef HB_NO_BUFFER_MESSAGE
  555|       |    return false;
  556|       |#else
  557|  31.0M|    return unlikely (message_func);
  ------------------
  |  |  259|  31.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  ------------------
  558|  31.0M|#endif
  559|  31.0M|  }
_ZNK11hb_buffer_t9group_endIFbRK15hb_glyph_info_tS3_EEEjjRKT_:
  265|   776k|  {
  266|  16.1M|    while (++start < len && group (info[start - 1], info[start]))
  ------------------
  |  Branch (266:12): [True: 16.0M, False: 111k]
  |  Branch (266:29): [True: 15.3M, False: 665k]
  ------------------
  267|  15.3M|      ;
  268|       |
  269|   776k|    return start;
  270|   776k|  }
_ZN11hb_buffer_t16unsafe_to_concatEjj:
  468|  5.88M|  {
  469|  5.88M|    if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
  ------------------
  |  |  258|  5.88M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 5.88M, False: 0]
  |  |  ------------------
  ------------------
  470|  5.88M|      return;
  471|      0|    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
  472|      0|		      start, end,
  473|      0|		      true);
  474|      0|  }
_ZN11hb_buffer_t16_set_glyph_flagsEjjjbb:
  406|  22.0M|  {
  407|  22.0M|    end = hb_min (end, len);
  408|       |
  409|  22.0M|    if (interior && !from_out_buffer && end - start < 2)
  ------------------
  |  Branch (409:9): [True: 22.0M, False: 0]
  |  Branch (409:21): [True: 5.67M, False: 16.3M]
  |  Branch (409:41): [True: 4.48M, False: 1.18M]
  ------------------
  410|  4.48M|      return;
  411|       |
  412|  17.5M|    scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
  413|       |
  414|  17.5M|    if (!from_out_buffer || !have_output)
  ------------------
  |  Branch (414:9): [True: 1.18M, False: 16.3M]
  |  Branch (414:29): [True: 8.37M, False: 7.98M]
  ------------------
  415|  9.56M|    {
  416|  9.56M|      if (!interior)
  ------------------
  |  Branch (416:11): [True: 0, False: 9.56M]
  ------------------
  417|      0|      {
  418|      0|	for (unsigned i = start; i < end; i++)
  ------------------
  |  Branch (418:27): [True: 0, False: 0]
  ------------------
  419|      0|	  info[i].mask |= mask;
  420|      0|      }
  421|  9.56M|      else
  422|  9.56M|      {
  423|  9.56M|	unsigned cluster = _infos_find_min_cluster (info, start, end);
  424|  9.56M|	_infos_set_glyph_flags (info, start, end, cluster, mask);
  425|  9.56M|      }
  426|  9.56M|    }
  427|  7.98M|    else
  428|  7.98M|    {
  429|  7.98M|      assert (start <= out_len);
  430|      0|      assert (idx <= end);
  431|       |
  432|  7.98M|      if (!interior)
  ------------------
  |  Branch (432:11): [True: 0, False: 7.98M]
  ------------------
  433|      0|      {
  434|      0|	for (unsigned i = start; i < out_len; i++)
  ------------------
  |  Branch (434:27): [True: 0, False: 0]
  ------------------
  435|      0|	  out_info[i].mask |= mask;
  436|      0|	for (unsigned i = idx; i < end; i++)
  ------------------
  |  Branch (436:25): [True: 0, False: 0]
  ------------------
  437|      0|	  info[i].mask |= mask;
  438|      0|      }
  439|  7.98M|      else
  440|  7.98M|      {
  441|  7.98M|	unsigned cluster = _infos_find_min_cluster (info, idx, end);
  442|  7.98M|	cluster = _infos_find_min_cluster (out_info, start, out_len, cluster);
  443|       |
  444|  7.98M|	_infos_set_glyph_flags (out_info, start, out_len, cluster, mask);
  445|  7.98M|	_infos_set_glyph_flags (info, idx, end, cluster, mask);
  446|  7.98M|      }
  447|  7.98M|    }
  448|  17.5M|  }
_ZN11hb_buffer_t23_infos_find_min_clusterEPK15hb_glyph_info_tjjj:
  632|  25.5M|  {
  633|  25.5M|    if (unlikely (start == end))
  ------------------
  |  |  259|  25.5M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.09M, False: 23.4M]
  |  |  ------------------
  ------------------
  634|  2.09M|      return cluster;
  635|       |
  636|  23.4M|    if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
  ------------------
  |  Branch (636:9): [True: 0, False: 23.4M]
  ------------------
  637|      0|    {
  638|      0|      for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (638:36): [True: 0, False: 0]
  ------------------
  639|      0|	cluster = hb_min (cluster, infos[i].cluster);
  640|      0|      return cluster;
  641|      0|    }
  642|       |
  643|  23.4M|    return hb_min (cluster, hb_min (infos[start].cluster, infos[end - 1].cluster));
  644|  23.4M|  }
_ZN11hb_buffer_t22_infos_set_glyph_flagsEP15hb_glyph_info_tjjjj:
  590|  25.5M|  {
  591|  25.5M|    if (unlikely (start == end))
  ------------------
  |  |  259|  25.5M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.09M, False: 23.4M]
  |  |  ------------------
  ------------------
  592|  2.09M|      return;
  593|       |
  594|  23.4M|    unsigned cluster_first = infos[start].cluster;
  595|  23.4M|    unsigned cluster_last = infos[end - 1].cluster;
  596|       |
  597|  23.4M|    if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS ||
  ------------------
  |  Branch (597:9): [True: 0, False: 23.4M]
  ------------------
  598|  23.4M|	(cluster != cluster_first && cluster != cluster_last))
  ------------------
  |  Branch (598:3): [True: 2.54M, False: 20.8M]
  |  Branch (598:31): [True: 1.69M, False: 843k]
  ------------------
  599|  1.69M|    {
  600|  9.17M|      for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (600:36): [True: 7.47M, False: 1.69M]
  ------------------
  601|  7.47M|	if (cluster != infos[i].cluster)
  ------------------
  |  Branch (601:6): [True: 7.47M, False: 0]
  ------------------
  602|  7.47M|	{
  603|  7.47M|	  scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
  604|  7.47M|	  infos[i].mask |= mask;
  605|  7.47M|	}
  606|  1.69M|      return;
  607|  1.69M|    }
  608|       |
  609|       |    /* Monotone clusters */
  610|       |
  611|  21.7M|    if (cluster == cluster_first)
  ------------------
  |  Branch (611:9): [True: 20.8M, False: 843k]
  ------------------
  612|  20.8M|    {
  613|  30.1M|      for (unsigned int i = end; start < i && infos[i - 1].cluster != cluster_first; i--)
  ------------------
  |  Branch (613:34): [True: 30.1M, False: 0]
  |  Branch (613:47): [True: 9.21M, False: 20.8M]
  ------------------
  614|  9.21M|      {
  615|  9.21M|	scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
  616|  9.21M|	infos[i - 1].mask |= mask;
  617|  9.21M|      }
  618|  20.8M|    }
  619|   843k|    else /* cluster == cluster_last */
  620|   843k|    {
  621|  63.2M|      for (unsigned int i = start; i < end && infos[i].cluster != cluster_last; i++)
  ------------------
  |  Branch (621:36): [True: 63.2M, False: 0]
  |  Branch (621:47): [True: 62.3M, False: 843k]
  ------------------
  622|  62.3M|      {
  623|  62.3M|	scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
  624|  62.3M|	infos[i].mask |= mask;
  625|  62.3M|      }
  626|   843k|    }
  627|  21.7M|  }
_ZN11hb_buffer_t7reverseEv:
  235|  18.8k|  void reverse () { reverse_range (0, len); }
_ZN11hb_buffer_t13reverse_rangeEjj:
  230|  35.6k|  {
  231|  35.6k|    hb_array_t<hb_glyph_info_t> (info, len).reverse (start, end);
  232|  35.6k|    if (have_positions)
  ------------------
  |  Branch (232:9): [True: 5.67k, False: 29.9k]
  ------------------
  233|  5.67k|      hb_array_t<hb_glyph_position_t> (pos, len).reverse (start, end);
  234|  35.6k|  }
_ZN11hb_buffer_t3curEj:
  182|   490M|  hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
_ZN11hb_buffer_t10next_glyphEv:
  338|  33.1M|  {
  339|  33.1M|    if (have_output)
  ------------------
  |  Branch (339:9): [True: 21.1M, False: 11.9M]
  ------------------
  340|  21.1M|    {
  341|  21.1M|      if (out_info != info || out_len != idx)
  ------------------
  |  Branch (341:11): [True: 4.67M, False: 16.5M]
  |  Branch (341:31): [True: 2.14M, False: 14.3M]
  ------------------
  342|  6.81M|      {
  343|  6.81M|	if (unlikely (!make_room_for (1, 1))) return false;
  ------------------
  |  |  259|  6.81M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 51, False: 6.81M]
  |  |  ------------------
  ------------------
  344|  6.81M|	out_info[out_len] = info[idx];
  345|  6.81M|      }
  346|  21.1M|      out_len++;
  347|  21.1M|    }
  348|       |
  349|  33.1M|    idx++;
  350|  33.1M|    return true;
  351|  33.1M|  }
_ZNK11hb_buffer_t13backtrack_lenEv:
  221|  70.7M|  unsigned int backtrack_len () const { return have_output ? out_len : idx; }
  ------------------
  |  Branch (221:48): [True: 31.2M, False: 39.5M]
  ------------------
_ZN11hb_buffer_t30unsafe_to_break_from_outbufferEjj:
  476|  16.3M|  {
  477|  16.3M|    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
  478|  16.3M|		      start, end,
  479|  16.3M|		      true, true);
  480|  16.3M|  }
_ZN11hb_buffer_t14merge_clustersEjj:
  385|  41.1M|  {
  386|  41.1M|    if (end - start < 2)
  ------------------
  |  Branch (386:9): [True: 40.5M, False: 547k]
  ------------------
  387|  40.5M|      return;
  388|   547k|    merge_clusters_impl (start, end);
  389|   547k|  }
_ZN11hb_buffer_t15unsafe_to_breakEjj:
  451|  5.67M|  {
  452|  5.67M|    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
  453|  5.67M|		      start, end,
  454|  5.67M|		      true);
  455|  5.67M|  }
_ZN11hb_buffer_t13replace_glyphEj:
  312|  1.20M|  { return replace_glyphs (1, 1, &glyph_index); }
_ZN11hb_buffer_t14replace_glyphsIjEEbjjPKT_:
  289|  33.2M|  {
  290|  33.2M|    if (unlikely (!make_room_for (num_in, num_out))) return false;
  ------------------
  |  |  259|  33.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.7k, False: 33.2M]
  |  |  ------------------
  ------------------
  291|       |
  292|  33.2M|    assert (idx + num_in <= len);
  293|       |
  294|      0|    merge_clusters (idx, idx + num_in);
  295|       |
  296|  33.2M|    hb_glyph_info_t &orig_info = idx < len ? cur() : prev();
  ------------------
  |  Branch (296:34): [True: 33.2M, False: 0]
  ------------------
  297|       |
  298|  33.2M|    hb_glyph_info_t *pinfo = &out_info[out_len];
  299|  66.4M|    for (unsigned int i = 0; i < num_out; i++)
  ------------------
  |  Branch (299:30): [True: 33.2M, False: 33.2M]
  ------------------
  300|  33.2M|    {
  301|  33.2M|      *pinfo = orig_info;
  302|  33.2M|      pinfo->codepoint = glyph_data[i];
  303|  33.2M|      pinfo++;
  304|  33.2M|    }
  305|       |
  306|  33.2M|    idx  += num_in;
  307|  33.2M|    out_len += num_out;
  308|  33.2M|    return true;
  309|  33.2M|  }
_ZN11hb_buffer_t4prevEv:
  188|   279k|  hb_glyph_info_t &prev ()      { return out_info[out_len ? out_len - 1 : 0]; }
  ------------------
  |  Branch (188:51): [True: 279k, False: 0]
  ------------------
_ZN11hb_buffer_t10copy_glyphEv:
  329|  3.42M|  {
  330|       |    /* Extra copy because cur()'s return can be freed within
  331|       |     * output_info() call if buffer reallocates. */
  332|  3.42M|    return output_info (hb_glyph_info_t (cur()));
  333|  3.42M|  }
_ZN11hb_buffer_t11output_infoERK15hb_glyph_info_t:
  319|  3.42M|  {
  320|  3.42M|    if (unlikely (!make_room_for (0, 1))) return false;
  ------------------
  |  |  259|  3.42M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 3.42M]
  |  |  ------------------
  ------------------
  321|       |
  322|  3.42M|    out_info[out_len] = glyph_info;
  323|       |
  324|  3.42M|    out_len++;
  325|  3.42M|    return true;
  326|  3.42M|  }
_ZN11hb_buffer_t14replace_glyphsIN2OT11HBGlyphID16EEEbjjPKT_:
  289|  4.65M|  {
  290|  4.65M|    if (unlikely (!make_room_for (num_in, num_out))) return false;
  ------------------
  |  |  259|  4.65M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 75, False: 4.65M]
  |  |  ------------------
  ------------------
  291|       |
  292|  4.65M|    assert (idx + num_in <= len);
  293|       |
  294|      0|    merge_clusters (idx, idx + num_in);
  295|       |
  296|  4.65M|    hb_glyph_info_t &orig_info = idx < len ? cur() : prev();
  ------------------
  |  Branch (296:34): [True: 4.54M, False: 113k]
  ------------------
  297|       |
  298|  4.65M|    hb_glyph_info_t *pinfo = &out_info[out_len];
  299|  10.5M|    for (unsigned int i = 0; i < num_out; i++)
  ------------------
  |  Branch (299:30): [True: 5.86M, False: 4.65M]
  ------------------
  300|  5.86M|    {
  301|  5.86M|      *pinfo = orig_info;
  302|  5.86M|      pinfo->codepoint = glyph_data[i];
  303|  5.86M|      pinfo++;
  304|  5.86M|    }
  305|       |
  306|  4.65M|    idx  += num_in;
  307|  4.65M|    out_len += num_out;
  308|  4.65M|    return true;
  309|  4.65M|  }
_ZN11hb_buffer_t10skip_glyphEv:
  370|  5.46M|  void skip_glyph () { idx++; }
_ZNK11hb_buffer_t6digestEv:
  192|   650k|  {
  193|   650k|    hb_set_digest_t d;
  194|   650k|    d.init ();
  195|   650k|    d.add_array (&info[0].codepoint, len, sizeof (info[0]));
  196|   650k|    return d;
  197|   650k|  }
_ZN11hb_buffer_t7cur_posEj:
  185|  2.36M|  hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
_ZN11hb_buffer_t12allocate_varEjj:
  145|  2.27M|  {
  146|  2.27M|    unsigned int end = start + count;
  147|  2.27M|    assert (end <= 8);
  148|      0|    unsigned int bits = (1u<<end) - (1u<<start);
  149|  2.27M|    assert (0 == (allocated_var_bits & bits));
  150|      0|    allocated_var_bits |= bits;
  151|  2.27M|  }
_ZN11hb_buffer_t16try_allocate_varEjj:
  153|  8.86k|  {
  154|  8.86k|    unsigned int end = start + count;
  155|  8.86k|    assert (end <= 8);
  156|      0|    unsigned int bits = (1u<<end) - (1u<<start);
  157|  8.86k|    if (allocated_var_bits & bits)
  ------------------
  |  Branch (157:9): [True: 158, False: 8.70k]
  ------------------
  158|    158|      return false;
  159|  8.70k|    allocated_var_bits |= bits;
  160|  8.70k|    return true;
  161|  8.86k|  }
_ZN11hb_buffer_t14deallocate_varEjj:
  163|  2.28M|  {
  164|  2.28M|    unsigned int end = start + count;
  165|  2.28M|    assert (end <= 8);
  166|      0|    unsigned int bits = (1u<<end) - (1u<<start);
  167|  2.28M|    assert (bits == (allocated_var_bits & bits));
  168|      0|    allocated_var_bits &= ~bits;
  169|  2.28M|  }
_ZN11hb_buffer_t10assert_varEjj:
  171|  3.74M|  {
  172|  3.74M|    unsigned int end = start + count;
  173|  3.74M|    assert (end <= 8);
  174|  3.74M|    HB_UNUSED unsigned int bits = (1u<<end) - (1u<<start);
  ------------------
  |  |  276|  3.74M|#define HB_UNUSED	__attribute__((unused))
  ------------------
  175|  3.74M|    assert (bits == (allocated_var_bits & bits));
  176|  3.74M|  }
_ZN11hb_buffer_t18deallocate_var_allEv:
  178|  2.35M|  {
  179|  2.35M|    allocated_var_bits = 0;
  180|  2.35M|  }
_ZNK11hb_buffer_t13lookahead_lenEv:
  222|  19.2M|  unsigned int lookahead_len () const { return len - idx; }
_ZN11hb_buffer_t11next_serialEv:
  223|   505k|  uint8_t next_serial () { return ++serial ? serial : ++serial; }
  ------------------
  |  Branch (223:35): [True: 504k, False: 1.26k]
  ------------------
_ZN11hb_buffer_t19_cluster_group_funcERK15hb_glyph_info_tS2_:
  274|  15.5M|  { return a.cluster == b.cluster; }
_ZN11hb_buffer_t12output_glyphEj:
  316|  32.0M|  { return replace_glyphs (0, 1, &glyph_index); }
_ZN11hb_buffer_t11next_glyphsEj:
  355|  1.27M|  {
  356|  1.27M|    if (have_output)
  ------------------
  |  Branch (356:9): [True: 1.27M, False: 0]
  ------------------
  357|  1.27M|    {
  358|  1.27M|      if (out_info != info || out_len != idx)
  ------------------
  |  Branch (358:11): [True: 54.0k, False: 1.22M]
  |  Branch (358:31): [True: 14.9k, False: 1.21M]
  ------------------
  359|  69.0k|      {
  360|  69.0k|	if (unlikely (!make_room_for (n, n))) return false;
  ------------------
  |  |  259|  69.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 69.0k]
  |  |  ------------------
  ------------------
  361|  69.0k|	memmove (out_info + out_len, info + idx, n * sizeof (out_info[0]));
  362|  69.0k|      }
  363|  1.27M|      out_len += n;
  364|  1.27M|    }
  365|       |
  366|  1.27M|    idx += n;
  367|  1.27M|    return true;
  368|  1.27M|  }
_ZN11hb_buffer_t11reset_masksEj:
  372|   565k|  {
  373|  2.20M|    for (unsigned int j = 0; j < len; j++)
  ------------------
  |  Branch (373:30): [True: 1.64M, False: 565k]
  ------------------
  374|  1.64M|      info[j].mask = mask;
  375|   565k|  }
_ZN11hb_buffer_t22safe_to_insert_tatweelEjj:
  457|    113|  {
  458|    113|    if ((flags & HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL) == 0)
  ------------------
  |  Branch (458:9): [True: 113, False: 0]
  ------------------
  459|    113|    {
  460|    113|      unsafe_to_break (start, end);
  461|    113|      return;
  462|    113|    }
  463|      0|    _set_glyph_flags (HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL,
  464|      0|		      start, end,
  465|      0|		      true);
  466|      0|  }
_ZN11hb_buffer_t31unsafe_to_concat_from_outbufferEjj:
  482|  2.27M|  {
  483|  2.27M|    if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
  ------------------
  |  |  258|  2.27M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.27M, False: 0]
  |  |  ------------------
  ------------------
  484|  2.27M|      return;
  485|      0|    _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
  486|      0|		      start, end,
  487|      0|		      false, true);
  488|      0|  }
_ZN11hb_buffer_t6ensureEj:
  504|  53.7M|  { return likely (!size || size < allocated) ? true : enlarge (size); }
  ------------------
  |  |  258|   107M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 53.5M, False: 231k]
  |  |  |  Branch (258:45): [True: 421k, False: 53.3M]
  |  |  |  Branch (258:45): [True: 53.1M, False: 231k]
  |  |  ------------------
  ------------------
_ZN11hb_buffer_t14assert_unicodeEv:
  515|   699k|  {
  516|   699k|    assert ((content_type == HB_BUFFER_CONTENT_TYPE_UNICODE) ||
  517|   699k|	    (!len && (content_type == HB_BUFFER_CONTENT_TYPE_INVALID)));
  518|   699k|  }
_ZN11hb_buffer_t13clear_contextEj:
  548|  2.09M|  void clear_context (unsigned int side) { context_len[side] = 0; }
_ZN11hb_buffer_t11set_clusterER15hb_glyph_info_tjj:
  580|  45.6M|  {
  581|  45.6M|    if (inf.cluster != cluster)
  ------------------
  |  Branch (581:9): [True: 251k, False: 45.4M]
  ------------------
  582|   251k|      inf.mask = (inf.mask & ~HB_GLYPH_FLAG_DEFINED) | (mask & HB_GLYPH_FLAG_DEFINED);
  583|  45.6M|    inf.cluster = cluster;
  584|  45.6M|  }

_ZN10hb_cache_tILj21ELj3ELj8ELb1EEC2Ev:
   65|  32.8k|  hb_cache_t () { init (); }
_ZN10hb_cache_tILj21ELj3ELj8ELb1EE4initEv:
   67|  32.8k|  void init () { clear (); }
_ZN10hb_cache_tILj21ELj3ELj8ELb1EE5clearEv:
   70|  32.8k|  {
   71|  8.45M|    for (unsigned i = 0; i < ARRAY_LENGTH (values); i++)
  ------------------
  |  Branch (71:26): [True: 8.41M, False: 32.8k]
  ------------------
   72|  8.41M|      values[i] = -1;
   73|  32.8k|  }
_ZNK10hb_cache_tILj21ELj3ELj8ELb1EE3getEjPj:
   76|  5.02M|  {
   77|  5.02M|    unsigned int k = key & ((1u<<cache_bits)-1);
   78|  5.02M|    unsigned int v = values[k];
   79|  5.02M|    if ((key_bits + value_bits - cache_bits == 8 * sizeof (item_t) && v == (unsigned int) -1) ||
  ------------------
  |  Branch (79:10): [Folded - Ignored]
  |  Branch (79:71): [True: 353k, False: 4.67M]
  ------------------
   80|  5.02M|	(v >> value_bits) != (key >> cache_bits))
  ------------------
  |  Branch (80:2): [True: 531k, False: 4.14M]
  ------------------
   81|   884k|      return false;
   82|  4.14M|    *value = v & ((1u<<value_bits)-1);
   83|  4.14M|    return true;
   84|  5.02M|  }
_ZN10hb_cache_tILj21ELj3ELj8ELb1EE3setEjj:
   87|   884k|  {
   88|   884k|    if (unlikely ((key >> key_bits) || (value >> value_bits)))
  ------------------
  |  |  259|  1.65M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 406k, False: 477k]
  |  |  |  Branch (259:47): [True: 112k, False: 772k]
  |  |  |  Branch (259:47): [True: 294k, False: 477k]
  |  |  ------------------
  ------------------
   89|   406k|      return false; /* Overflows */
   90|   477k|    unsigned int k = key & ((1u<<cache_bits)-1);
   91|   477k|    unsigned int v = ((key>>cache_bits)<<value_bits) | value;
   92|   477k|    values[k] = v;
   93|   477k|    return true;
   94|   884k|  }
_ZNK10hb_cache_tILj21ELj16ELj8ELb1EE3getEjPj:
   76|  2.68M|  {
   77|  2.68M|    unsigned int k = key & ((1u<<cache_bits)-1);
   78|  2.68M|    unsigned int v = values[k];
   79|  2.68M|    if ((key_bits + value_bits - cache_bits == 8 * sizeof (item_t) && v == (unsigned int) -1) ||
  ------------------
  |  Branch (79:10): [Folded - Ignored]
  |  Branch (79:71): [True: 0, False: 0]
  ------------------
   80|  2.68M|	(v >> value_bits) != (key >> cache_bits))
  ------------------
  |  Branch (80:2): [True: 2.59M, False: 96.3k]
  ------------------
   81|  2.59M|      return false;
   82|  96.3k|    *value = v & ((1u<<value_bits)-1);
   83|  96.3k|    return true;
   84|  2.68M|  }
_ZN10hb_cache_tILj21ELj16ELj8ELb1EE3setEjj:
   87|   189k|  {
   88|   189k|    if (unlikely ((key >> key_bits) || (value >> value_bits)))
  ------------------
  |  |  259|   378k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 84.9k, False: 104k]
  |  |  |  Branch (259:47): [True: 223, False: 189k]
  |  |  |  Branch (259:47): [True: 84.7k, False: 104k]
  |  |  ------------------
  ------------------
   89|  84.9k|      return false; /* Overflows */
   90|   104k|    unsigned int k = key & ((1u<<cache_bits)-1);
   91|   104k|    unsigned int v = ((key>>cache_bits)<<value_bits) | value;
   92|   104k|    values[k] = v;
   93|   104k|    return true;
   94|   189k|  }
_ZN10hb_cache_tILj21ELj16ELj8ELb1EE4initEv:
   67|  34.8k|  void init () { clear (); }
_ZN10hb_cache_tILj21ELj16ELj8ELb1EE5clearEv:
   70|  34.8k|  {
   71|  8.96M|    for (unsigned i = 0; i < ARRAY_LENGTH (values); i++)
  ------------------
  |  Branch (71:26): [True: 8.93M, False: 34.8k]
  ------------------
   72|  8.93M|      values[i] = -1;
   73|  34.8k|  }
_ZN10hb_cache_tILj24ELj16ELj8ELb1EE4initEv:
   67|  1.98k|  void init () { clear (); }
_ZN10hb_cache_tILj24ELj16ELj8ELb1EE5clearEv:
   70|  1.98k|  {
   71|   510k|    for (unsigned i = 0; i < ARRAY_LENGTH (values); i++)
  ------------------
  |  Branch (71:26): [True: 508k, False: 1.98k]
  ------------------
   72|   508k|      values[i] = -1;
   73|  1.98k|  }
_ZNK10hb_cache_tILj24ELj16ELj8ELb1EE3getEjPj:
   76|  56.1k|  {
   77|  56.1k|    unsigned int k = key & ((1u<<cache_bits)-1);
   78|  56.1k|    unsigned int v = values[k];
   79|  56.1k|    if ((key_bits + value_bits - cache_bits == 8 * sizeof (item_t) && v == (unsigned int) -1) ||
  ------------------
  |  Branch (79:10): [Folded - Ignored]
  |  Branch (79:71): [True: 9.12k, False: 47.0k]
  ------------------
   80|  56.1k|	(v >> value_bits) != (key >> cache_bits))
  ------------------
  |  Branch (80:2): [True: 3.28k, False: 43.7k]
  ------------------
   81|  12.4k|      return false;
   82|  43.7k|    *value = v & ((1u<<value_bits)-1);
   83|  43.7k|    return true;
   84|  56.1k|  }
_ZN10hb_cache_tILj24ELj16ELj8ELb1EE3setEjj:
   87|  12.4k|  {
   88|  12.4k|    if (unlikely ((key >> key_bits) || (value >> value_bits)))
  ------------------
  |  |  259|  21.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.73k, False: 7.67k]
  |  |  |  Branch (259:47): [True: 3.66k, False: 8.74k]
  |  |  |  Branch (259:47): [True: 1.07k, False: 7.67k]
  |  |  ------------------
  ------------------
   89|  4.73k|      return false; /* Overflows */
   90|  7.67k|    unsigned int k = key & ((1u<<cache_bits)-1);
   91|  7.67k|    unsigned int v = ((key>>cache_bits)<<value_bits) | value;
   92|  7.67k|    values[k] = v;
   93|  7.67k|    return true;
   94|  12.4k|  }

_ZN3CFF8number_t7set_intEi:
  222|  7.25M|  void set_int (int v)       { value = v; }
_ZNK3CFF8number_t6to_intEv:
  223|  87.3k|  int to_int () const        { return value; }
_ZN3CFF8number_t9set_fixedEi:
  225|   105k|  void set_fixed (int32_t v) { value = v / 65536.0; }
_ZN3CFF8number_t8set_realEd:
  228|  1.49M|  void set_real (double v)   { value = v; }
_ZNK3CFF8number_t7to_realEv:
  229|  6.81M|  double to_real () const    { return value; }
_ZNK3CFF8number_tgtERKS0_:
  234|  3.22M|  bool operator >  (const number_t &n) const { return value > n.to_real (); }
_ZNK3CFF8number_tltERKS0_:
  235|  1.76M|  bool operator <  (const number_t &n) const { return n > *this; }
_ZNK3CFF8number_tgeERKS0_:
  236|   309k|  bool operator >= (const number_t &n) const { return !(*this < n); }
_ZN3CFF8number_tpLERKS0_:
  240|  1.48M|  {
  241|  1.48M|    set_real (to_real () + n.to_real ());
  242|       |
  243|  1.48M|    return *this;
  244|  1.48M|  }
_ZNK3CFF14UnsizedByteStr9as_ubytesEj:
  254|  72.2k|  { return hb_ubytes_t ((const unsigned char *) this, l); }
_ZN3CFF14byte_str_ref_tC2Ev:
  290|  3.58M|    : str () {}
_ZN3CFF14byte_str_ref_tC2ERK10hb_array_tIKhEj:
  293|   325k|    : str (str_) { set_offset (offset_); }
_ZN3CFF14byte_str_ref_t5resetERK10hb_array_tIKhEj:
  296|   430k|  {
  297|   430k|    str = str_;
  298|   430k|    set_offset (offset_);
  299|   430k|  }
_ZN3CFF14byte_str_ref_tixEi:
  301|   411k|  const unsigned char& operator [] (int i) {
  302|   411k|    if (unlikely ((unsigned int) (get_offset () + i) >= str.length))
  ------------------
  |  |  259|   411k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.98k, False: 408k]
  |  |  ------------------
  ------------------
  303|  2.98k|    {
  304|  2.98k|      set_error ();
  305|  2.98k|      return Null (unsigned char);
  ------------------
  |  |  124|  2.98k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  306|  2.98k|    }
  307|   408k|    return str.arrayZ[get_offset () + i];
  308|   411k|  }
_ZNK3CFF14byte_str_ref_t14head_uncheckedEv:
  310|  4.32M|  unsigned char head_unchecked () const { return str.arrayZ[get_offset ()]; }
_ZNK3CFF14byte_str_ref_t9sub_arrayEjj:
  316|  30.8k|  { return str.sub_array (offset_, len_); }
_ZNK3CFF14byte_str_ref_t5availEj:
  319|  6.80M|  { return get_offset () + count <= str.length; }
_ZN3CFF14byte_str_ref_t3incEj:
  321|  4.71M|  {
  322|       |    /* Automatically puts us in error if count is out-of-range. */
  323|  4.71M|    set_offset (get_offset () + count);
  324|  4.71M|  }
_ZNK3CFF14byte_str_ref_t10get_offsetEv:
  329|  16.7M|  unsigned get_offset () const { return str.backwards_length; }
_ZN3CFF14byte_str_ref_t10set_offsetEj:
  330|  5.46M|  void set_offset (unsigned offset) { str.backwards_length = offset; }
_ZN3CFF14byte_str_ref_t9set_errorEv:
  332|   249k|  void set_error ()      { str.backwards_length = str.length + 1; }
_ZNK3CFF14byte_str_ref_t8in_errorEv:
  333|  4.47M|  bool in_error () const { return str.backwards_length > str.length; }
_ZN3CFF15parsed_values_tINS_19cff1_top_dict_val_tEE4finiEv:
  521|  64.3k|  void fini () { values.fini (); }
_ZN3CFF15parsed_values_tINS_8op_str_tEE4finiEv:
  521|  63.0k|  void fini () { values.fini (); }
_ZN3CFF11arg_stack_tINS_8number_tEE24push_longint_from_substrERNS_14byte_str_ref_tE:
  464|  4.90k|  {
  465|  4.90k|    push_int ((str_ref[0] << 24) | (str_ref[1] << 16) | (str_ref[2] << 8) | (str_ref[3]));
  466|  4.90k|    str_ref.inc (4);
  467|  4.90k|  }
_ZN3CFF11arg_stack_tINS_8number_tEE8push_intEi:
  431|  3.27M|  {
  432|  3.27M|    ARG &n = S::push ();
  433|  3.27M|    n.set_int (v);
  434|  3.27M|  }
_ZN3CFF11cff_stack_tINS_8number_tELi513EE4pushEv:
  363|  3.38M|  {
  364|  3.38M|    if (likely (count < LIMIT))
  ------------------
  |  |  258|  3.38M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.38M, False: 114]
  |  |  ------------------
  ------------------
  365|  3.38M|      return elements[count++];
  366|    114|    else
  367|    114|    {
  368|    114|      set_error ();
  369|    114|      return Crap (ELEM);
  ------------------
  |  |  188|    114|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  370|    114|    }
  371|  3.38M|  }
_ZN3CFF11cff_stack_tINS_8number_tELi513EE9set_errorEv:
  412|  11.2k|  void set_error ()      { error = true; }
_ZN3CFF11arg_stack_tINS_8number_tEE9push_realEd:
  443|  1.94k|  {
  444|  1.94k|    ARG &n = S::push ();
  445|  1.94k|    n.set_real (v);
  446|  1.94k|  }
_ZN3CFF7opset_tINS_8number_tEE10process_opEjRNS_12interp_env_tIS1_EE:
  600|  3.36M|  {
  601|  3.36M|    switch (op) {
  602|  32.5k|      case OpCode_shortint:
  ------------------
  |  |   71|  32.5k|#define OpCode_shortint		 28 /* 16-bit integer, All */
  ------------------
  |  Branch (602:7): [True: 32.5k, False: 3.33M]
  ------------------
  603|  32.5k|	env.argStack.push_int ((int16_t)((env.str_ref[0] << 8) | env.str_ref[1]));
  604|  32.5k|	env.str_ref.inc (2);
  605|  32.5k|	break;
  606|       |
  607|   112k|      case OpCode_TwoBytePosInt0: case OpCode_TwoBytePosInt1:
  ------------------
  |  |   81|  57.3k|#define OpCode_TwoBytePosInt0	247 /* All. first byte of two byte positive int (+108 to +1131) */
  ------------------
                    case OpCode_TwoBytePosInt0: case OpCode_TwoBytePosInt1:
  ------------------
  |  |   82|   112k|#define OpCode_TwoBytePosInt1	248
  ------------------
  |  Branch (607:7): [True: 57.3k, False: 3.30M]
  |  Branch (607:35): [True: 55.6k, False: 3.30M]
  ------------------
  608|   143k|      case OpCode_TwoBytePosInt2: case OpCode_TwoBytePosInt3:
  ------------------
  |  |   83|   128k|#define OpCode_TwoBytePosInt2	249
  ------------------
                    case OpCode_TwoBytePosInt2: case OpCode_TwoBytePosInt3:
  ------------------
  |  |   84|   143k|#define OpCode_TwoBytePosInt3	250
  ------------------
  |  Branch (608:7): [True: 15.7k, False: 3.34M]
  |  Branch (608:35): [True: 14.7k, False: 3.35M]
  ------------------
  609|   143k|	env.argStack.push_int ((int16_t)((op - OpCode_TwoBytePosInt0) * 256 + env.str_ref[0] + 108));
  ------------------
  |  |   81|   143k|#define OpCode_TwoBytePosInt0	247 /* All. first byte of two byte positive int (+108 to +1131) */
  ------------------
  610|   143k|	env.str_ref.inc ();
  611|   143k|	break;
  612|       |
  613|  43.9k|      case OpCode_TwoByteNegInt0: case OpCode_TwoByteNegInt1:
  ------------------
  |  |   86|  18.3k|#define OpCode_TwoByteNegInt0	251 /* All. first byte of two byte negative int (-1131 to -108) */
  ------------------
                    case OpCode_TwoByteNegInt0: case OpCode_TwoByteNegInt1:
  ------------------
  |  |   87|  43.9k|#define OpCode_TwoByteNegInt1	252
  ------------------
  |  Branch (613:7): [True: 18.3k, False: 3.34M]
  |  Branch (613:35): [True: 25.6k, False: 3.33M]
  ------------------
  614|  67.1k|      case OpCode_TwoByteNegInt2: case OpCode_TwoByteNegInt3:
  ------------------
  |  |   88|  47.8k|#define OpCode_TwoByteNegInt2	253
  ------------------
                    case OpCode_TwoByteNegInt2: case OpCode_TwoByteNegInt3:
  ------------------
  |  |   89|  67.1k|#define OpCode_TwoByteNegInt3	254
  ------------------
  |  Branch (614:7): [True: 3.91k, False: 3.36M]
  |  Branch (614:35): [True: 19.3k, False: 3.34M]
  ------------------
  615|  67.1k|	env.argStack.push_int ((-(int16_t)(op - OpCode_TwoByteNegInt0) * 256 - env.str_ref[0] - 108));
  ------------------
  |  |   86|  67.1k|#define OpCode_TwoByteNegInt0	251 /* All. first byte of two byte negative int (-1131 to -108) */
  ------------------
  616|  67.1k|	env.str_ref.inc ();
  617|  67.1k|	break;
  618|       |
  619|  3.12M|      default:
  ------------------
  |  Branch (619:7): [True: 3.12M, False: 243k]
  ------------------
  620|       |	/* 1-byte integer */
  621|  3.12M|	if (likely ((OpCode_OneByteIntFirst <= op) && (op <= OpCode_OneByteIntLast)))
  ------------------
  |  |  258|  6.20M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.02M, False: 96.8k]
  |  |  |  Branch (258:45): [True: 3.08M, False: 33.8k]
  |  |  |  Branch (258:45): [True: 3.02M, False: 63.0k]
  |  |  ------------------
  ------------------
  622|  3.02M|	{
  623|  3.02M|	  env.argStack.push_int ((int)op - 139);
  624|  3.02M|	} else {
  625|       |	  /* invalid unknown operator */
  626|  96.8k|	  env.clear_args ();
  627|  96.8k|	  env.set_error ();
  628|  96.8k|	}
  629|  3.12M|	break;
  630|  3.36M|    }
  631|  3.36M|  }
_ZN3CFF12interp_env_tINS_8number_tEE9set_errorEv:
  563|   246k|  void set_error () { str_ref.set_error (); }
_ZN3CFF15parsed_values_tINS_19cff1_top_dict_val_tEE4initEv:
  517|  34.4k|  {
  518|  34.4k|    opStart = 0;
  519|  34.4k|    values.init ();
  520|  34.4k|  }
_ZN3CFF11arg_stack_tINS_8number_tEE8pop_uintEv:
  453|  21.7k|  {
  454|  21.7k|    int i = pop_int ();
  455|  21.7k|    if (unlikely (i < 0))
  ------------------
  |  |  259|  21.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 928, False: 20.7k]
  |  |  ------------------
  ------------------
  456|    928|    {
  457|    928|      i = 0;
  458|    928|      S::set_error ();
  459|    928|    }
  460|  21.7k|    return (unsigned) i;
  461|  21.7k|  }
_ZN3CFF11arg_stack_tINS_8number_tEE7pop_intEv:
  450|  65.8k|  int pop_int ()  { return this->pop ().to_int (); }
_ZN3CFF11cff_stack_tINS_8number_tELi513EE3popEv:
  374|   149k|  {
  375|   149k|    if (likely (count > 0))
  ------------------
  |  |  258|   149k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 139k, False: 10.1k]
  |  |  ------------------
  ------------------
  376|   139k|      return elements[--count];
  377|  10.1k|    else
  378|  10.1k|    {
  379|  10.1k|      set_error ();
  380|  10.1k|      return Crap (ELEM);
  ------------------
  |  |  188|  10.1k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  381|  10.1k|    }
  382|   149k|  }
_ZN3CFF12interp_env_tINS_8number_tEE10clear_argsEv:
  586|   552k|  void clear_args () { pop_n_args (argStack.get_count ()); }
_ZN3CFF12interp_env_tINS_8number_tEE10pop_n_argsEj:
  584|  1.36M|  void pop_n_args (unsigned int n) { argStack.pop (n); }
_ZN3CFF11cff_stack_tINS_8number_tELi513EE3popEj:
  384|  1.36M|  {
  385|  1.36M|    if (likely (count >= n))
  ------------------
  |  |  258|  1.36M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.36M, False: 0]
  |  |  ------------------
  ------------------
  386|  1.36M|      count -= n;
  387|      0|    else
  388|      0|      set_error ();
  389|  1.36M|  }
_ZNK3CFF11cff_stack_tINS_8number_tELi513EE9get_countEv:
  414|  3.16M|  unsigned int get_count () const { return count; }
_ZNK3CFF11cff_stack_tINS_8number_tELi513EE8is_emptyEv:
  415|   198k|  bool is_empty () const          { return !count; }
_ZNK3CFF12interp_env_tINS_8number_tEE8in_errorEv:
  561|  4.43M|  { return str_ref.in_error () || argStack.in_error (); }
  ------------------
  |  Branch (561:12): [True: 120k, False: 4.31M]
  |  Branch (561:35): [True: 7.97k, False: 4.30M]
  ------------------
_ZNK3CFF11cff_stack_tINS_8number_tELi513EE8in_errorEv:
  411|  4.31M|  bool in_error () const { return (error); }
_ZN3CFF15parsed_values_tINS_19cff1_top_dict_val_tEE6add_opEjRKNS_14byte_str_ref_tERKS1_:
  529|  11.7k|  {
  530|  11.7k|    VAL *val = values.push (v);
  531|  11.7k|    val->op = op;
  532|  11.7k|    auto arr = str_ref.sub_array (opStart, str_ref.get_offset () - opStart);
  533|  11.7k|    val->ptr = arr.arrayZ;
  534|  11.7k|    val->length = arr.length;
  535|  11.7k|    opStart = str_ref.get_offset ();
  536|  11.7k|  }
_ZN3CFF15parsed_values_tINS_8op_str_tEE4initEv:
  517|   174k|  {
  518|   174k|    opStart = 0;
  519|   174k|    values.init ();
  520|   174k|  }
_ZN3CFF15parsed_values_tINS_8op_str_tEE6add_opEjRKNS_14byte_str_ref_tERKS1_:
  529|  5.90k|  {
  530|  5.90k|    VAL *val = values.push (v);
  531|  5.90k|    val->op = op;
  532|  5.90k|    auto arr = str_ref.sub_array (opStart, str_ref.get_offset () - opStart);
  533|  5.90k|    val->ptr = arr.arrayZ;
  534|  5.90k|    val->length = arr.length;
  535|  5.90k|    opStart = str_ref.get_offset ();
  536|  5.90k|  }
_ZN3CFF15parsed_values_tINS_10dict_val_tEE6add_opEjRKNS_14byte_str_ref_tERKS1_:
  529|  13.1k|  {
  530|  13.1k|    VAL *val = values.push (v);
  531|  13.1k|    val->op = op;
  532|  13.1k|    auto arr = str_ref.sub_array (opStart, str_ref.get_offset () - opStart);
  533|  13.1k|    val->ptr = arr.arrayZ;
  534|  13.1k|    val->length = arr.length;
  535|  13.1k|    opStart = str_ref.get_offset ();
  536|  13.1k|  }
_ZN3CFF12interp_env_tINS_8number_tEE8fetch_opEv:
  566|  4.37M|  {
  567|  4.37M|    op_code_t  op = OpCode_Invalid;
  ------------------
  |  |  217|  4.37M|#define OpCode_Invalid		0xFFFFu
  ------------------
  568|  4.37M|    if (unlikely (!str_ref.avail ()))
  ------------------
  |  |  259|  4.37M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 62.2k, False: 4.31M]
  |  |  ------------------
  ------------------
  569|  62.2k|      return OpCode_Invalid;
  ------------------
  |  |  217|  62.2k|#define OpCode_Invalid		0xFFFFu
  ------------------
  570|  4.31M|    op = (op_code_t) str_ref.head_unchecked ();
  571|  4.31M|    str_ref.inc ();
  572|  4.31M|    if (op == OpCode_escape) {
  ------------------
  |  |   53|  4.31M|#define OpCode_escape		 12 /* All. Shared with CS */
  ------------------
  |  Branch (572:9): [True: 17.9k, False: 4.29M]
  ------------------
  573|  17.9k|      if (unlikely (!str_ref.avail ()))
  ------------------
  |  |  259|  17.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 427, False: 17.4k]
  |  |  ------------------
  ------------------
  574|    427|	return OpCode_Invalid;
  ------------------
  |  |  217|    427|#define OpCode_Invalid		0xFFFFu
  ------------------
  575|  17.4k|      op = Make_OpCode_ESC (str_ref.head_unchecked ());
  ------------------
  |  |   93|  17.4k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  ------------------
  |  |  |  |   92|  17.4k|#define OpCode_ESC_Base		256
  |  |  ------------------
  ------------------
  576|  17.4k|      str_ref.inc ();
  577|  17.4k|    }
  578|  4.31M|    return op;
  579|  4.31M|  }
_ZN3CFF15parsed_values_tINS_10dict_val_tEE4initEv:
  517|   188k|  {
  518|   188k|    opStart = 0;
  519|   188k|    values.init ();
  520|   188k|  }
_ZN3CFF12interp_env_tINS_8number_tEEC2ERK10hb_array_tIKhE:
  557|   430k|  {
  558|   430k|    str_ref.reset (str_);
  559|   430k|  }
_ZN3CFF13interpreter_tINS_26cff1_top_dict_interp_env_tEEC2ERS1_:
  637|  1.66k|  interpreter_t (ENV& env_) : env (env_) {}
_ZN3CFF13interpreter_tINS_12interp_env_tINS_8number_tEEEEC2ERS3_:
  637|  95.8k|  interpreter_t (ENV& env_) : env (env_) {}
_ZN3CFF13interpreter_tINS_27cff2_priv_dict_interp_env_tEEC2ERS1_:
  637|  46.1k|  interpreter_t (ENV& env_) : env (env_) {}
_ZN3CFF13interpreter_tINS_20cff1_cs_interp_env_tEEC2ERS1_:
  637|   274k|  interpreter_t (ENV& env_) : env (env_) {}
_ZN3CFF11cff_stack_tINS_8number_tELi513EEixEj:
  346|  1.59M|  {
  347|  1.59M|    if (unlikely (i >= count))
  ------------------
  |  |  259|  1.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.59M]
  |  |  ------------------
  ------------------
  348|      0|    {
  349|      0|      set_error ();
  350|      0|      return Crap (ELEM);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  351|      0|    }
  352|  1.59M|    return elements[i];
  353|  1.59M|  }
_ZN3CFF11cff_stack_tINS_14call_context_tELi10EE3popEv:
  374|  32.7k|  {
  375|  32.7k|    if (likely (count > 0))
  ------------------
  |  |  258|  32.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 30.3k, False: 2.42k]
  |  |  ------------------
  ------------------
  376|  30.3k|      return elements[--count];
  377|  2.42k|    else
  378|  2.42k|    {
  379|  2.42k|      set_error ();
  380|  2.42k|      return Crap (ELEM);
  ------------------
  |  |  188|  2.42k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  381|  2.42k|    }
  382|  32.7k|  }
_ZN3CFF11cff_stack_tINS_14call_context_tELi10EE9set_errorEv:
  412|  2.42k|  void set_error ()      { error = true; }
_ZN3CFF11arg_stack_tINS_8number_tEE22push_fixed_from_substrERNS_14byte_str_ref_tE:
  470|   106k|  {
  471|   106k|    if (unlikely (!str_ref.avail (4)))
  ------------------
  |  |  259|   106k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.04k, False: 105k]
  |  |  ------------------
  ------------------
  472|  1.04k|      return false;
  473|   105k|    push_fixed ((int32_t)*(const HBUINT32*)&str_ref[0]);
  474|   105k|    str_ref.inc (4);
  475|   105k|    return true;
  476|   106k|  }
_ZN3CFF11arg_stack_tINS_8number_tEE10push_fixedEi:
  437|   105k|  {
  438|   105k|    ARG &n = S::push ();
  439|   105k|    n.set_fixed (v);
  440|   105k|  }
_ZNK3CFF11cff_stack_tINS_14call_context_tELi10EE9get_countEv:
  414|  39.6k|  unsigned int get_count () const { return count; }
_ZN3CFF11cff_stack_tINS_14call_context_tELi10EE4pushERKS1_:
  356|  39.0k|  {
  357|  39.0k|    if (likely (count < LIMIT))
  ------------------
  |  |  258|  39.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 39.0k, False: 0]
  |  |  ------------------
  ------------------
  358|  39.0k|      elements[count++] = v;
  359|      0|    else
  360|      0|      set_error ();
  361|  39.0k|  }
_ZN3CFF12interp_env_tINS_8number_tEE7pop_argEv:
  583|  30.8k|  ARG& pop_arg () { return argStack.pop (); }
_ZN3CFF12interp_env_tINS_8number_tEE8eval_argEj:
  581|   803k|  const ARG& eval_arg (unsigned int i) { return argStack[i]; }
_ZNK3CFF11cff_stack_tINS_14call_context_tELi10EE8in_errorEv:
  411|  4.18M|  bool in_error () const { return (error); }
_ZN3CFF13interpreter_tINS_20cff2_cs_interp_env_tINS_8number_tEEEEC2ERS3_:
  637|  12.0k|  interpreter_t (ENV& env_) : env (env_) {}
_ZNK3CFF11cff_stack_tINS_8number_tELi513EE9sub_arrayEjj:
  418|  3.87k|  { return hb_array_t<const ELEM> (elements).sub_array (start, length); }
_ZNK3CFF11cff_stack_tINS_14call_context_tELi10EE8is_emptyEv:
  415|  33.7k|  bool is_empty () const          { return !count; }

_ZN3CFF7point_t7set_intEii:
   98|  1.98M|  {
   99|  1.98M|    x.set_int (_x);
  100|  1.98M|    y.set_int (_y);
  101|  1.98M|  }
_ZN3CFF16cs_interpreter_tINS_20cff1_cs_interp_env_tE23cff1_cs_opset_extents_t20cff1_extents_param_tEC2ERS1_:
  878|   273k|  cs_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF16cs_interpreter_tINS_20cff1_cs_interp_env_tE23cff1_cs_opset_extents_t20cff1_extents_param_tE9interpretERS3_:
  881|   273k|  {
  882|   273k|    SUPER::env.set_endchar (false);
  883|       |
  884|   273k|    unsigned max_ops = HB_CFF_MAX_OPS;
  ------------------
  |  |  105|   273k|#define HB_CFF_MAX_OPS 10000
  ------------------
  885|  2.14M|    for (;;) {
  886|  2.14M|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  887|  2.14M|      if (unlikely (SUPER::env.in_error () || !--max_ops))
  ------------------
  |  |  259|  4.16M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 120k, False: 2.02M]
  |  |  |  Branch (259:47): [True: 120k, False: 2.02M]
  |  |  |  Branch (259:47): [True: 0, False: 2.02M]
  |  |  ------------------
  ------------------
  888|   120k|      {
  889|   120k|	SUPER::env.set_error ();
  890|   120k|	return false;
  891|   120k|      }
  892|  2.02M|      if (SUPER::env.is_endchar ())
  ------------------
  |  Branch (892:11): [True: 152k, False: 1.86M]
  ------------------
  893|   152k|	break;
  894|  2.02M|    }
  895|       |
  896|   152k|    return true;
  897|   273k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE11set_endcharEb:
  186|   437k|  void set_endchar (bool endchar_flag_) { endchar_flag = endchar_flag_; }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE17flush_args_and_opEjRS3_RS4_:
  410|   400k|  {
  411|   400k|    OPSET::flush_args (env, param);
  412|   400k|    OPSET::flush_op (op, env, param);
  413|   400k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE10flush_argsERS3_RS4_:
  416|   400k|  {
  417|   400k|    env.pop_n_args (env.argStack.get_count ());
  418|   400k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE8flush_opEjRS3_RS4_:
  421|   400k|  {
  422|   400k|  }
_ZN3CFF7point_t4moveERKS0_:
  106|  4.41k|  void move (const point_t &d) { move_x (d.x); move_y (d.y); }
_ZN3CFF7point_t6move_xERKNS_8number_tE:
  103|   743k|  void move_x (const number_t &dx) { x += dx; }
_ZN3CFF7point_t6move_yERKNS_8number_tE:
  104|   741k|  void move_y (const number_t &dy) { y += dy; }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE10process_opEjRS3_RS4_:
  243|  1.97M|  {
  244|  1.97M|    switch (op) {
  245|       |
  246|  2.06k|      case OpCode_return:
  ------------------
  |  |  152|  2.06k|#define OpCode_return		 11 /* CFF */
  ------------------
  |  Branch (246:7): [True: 2.06k, False: 1.97M]
  ------------------
  247|  2.06k|	env.return_from_subr ();
  248|  2.06k|	break;
  249|      0|      case OpCode_endchar:
  ------------------
  |  |  155|      0|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (249:7): [True: 0, False: 1.97M]
  ------------------
  250|      0|	OPSET::check_width (op, env, param);
  251|      0|	env.set_endchar (true);
  252|      0|	OPSET::flush_args_and_op (op, env, param);
  253|      0|	break;
  254|       |
  255|  52.5k|      case OpCode_fixedcs:
  ------------------
  |  |  174|  52.5k|#define OpCode_fixedcs		255 /* 32-bit fixed */
  ------------------
  |  Branch (255:7): [True: 52.5k, False: 1.92M]
  ------------------
  256|  52.5k|	env.argStack.push_fixed_from_substr (env.str_ref);
  257|  52.5k|	break;
  258|       |
  259|    748|      case OpCode_callsubr:
  ------------------
  |  |  151|    748|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (259:7): [True: 748, False: 1.97M]
  ------------------
  260|    748|	env.call_subr (env.localSubrs, CSType_LocalSubr);
  261|    748|	break;
  262|       |
  263|  6.62k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  6.62k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (263:7): [True: 6.62k, False: 1.97M]
  ------------------
  264|  6.62k|	env.call_subr (env.globalSubrs, CSType_GlobalSubr);
  265|  6.62k|	break;
  266|       |
  267|  22.3k|      case OpCode_hstem:
  ------------------
  |  |  142|  22.3k|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (267:7): [True: 22.3k, False: 1.95M]
  ------------------
  268|  31.8k|      case OpCode_hstemhm:
  ------------------
  |  |  159|  31.8k|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (268:7): [True: 9.55k, False: 1.97M]
  ------------------
  269|  31.8k|	OPSET::check_width (op, env, param);
  270|  31.8k|	OPSET::process_hstem (op, env, param);
  271|  31.8k|	break;
  272|  6.21k|      case OpCode_vstem:
  ------------------
  |  |  144|  6.21k|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (272:7): [True: 6.21k, False: 1.97M]
  ------------------
  273|  38.5k|      case OpCode_vstemhm:
  ------------------
  |  |  164|  38.5k|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (273:7): [True: 32.3k, False: 1.94M]
  ------------------
  274|  38.5k|	OPSET::check_width (op, env, param);
  275|  38.5k|	OPSET::process_vstem (op, env, param);
  276|  38.5k|	break;
  277|  4.30k|      case OpCode_hintmask:
  ------------------
  |  |  160|  4.30k|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (277:7): [True: 4.30k, False: 1.97M]
  ------------------
  278|  14.8k|      case OpCode_cntrmask:
  ------------------
  |  |  161|  14.8k|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (278:7): [True: 10.5k, False: 1.96M]
  ------------------
  279|  14.8k|	OPSET::check_width (op, env, param);
  280|  14.8k|	OPSET::process_hintmask (op, env, param);
  281|  14.8k|	break;
  282|  6.50k|      case OpCode_rmoveto:
  ------------------
  |  |  162|  6.50k|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (282:7): [True: 6.50k, False: 1.97M]
  ------------------
  283|  6.50k|	OPSET::check_width (op, env, param);
  284|  6.50k|	PATH::rmoveto (env, param);
  285|  6.50k|	OPSET::process_post_move (op, env, param);
  286|  6.50k|	break;
  287|  5.83k|      case OpCode_hmoveto:
  ------------------
  |  |  163|  5.83k|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (287:7): [True: 5.83k, False: 1.97M]
  ------------------
  288|  5.83k|	OPSET::check_width (op, env, param);
  289|  5.83k|	PATH::hmoveto (env, param);
  290|  5.83k|	OPSET::process_post_move (op, env, param);
  291|  5.83k|	break;
  292|  7.60k|      case OpCode_vmoveto:
  ------------------
  |  |  145|  7.60k|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (292:7): [True: 7.60k, False: 1.97M]
  ------------------
  293|  7.60k|	OPSET::check_width (op, env, param);
  294|  7.60k|	PATH::vmoveto (env, param);
  295|  7.60k|	OPSET::process_post_move (op, env, param);
  296|  7.60k|	break;
  297|  14.0k|      case OpCode_rlineto:
  ------------------
  |  |  146|  14.0k|#define OpCode_rlineto		  5 /* CFF, CFF2 */
  ------------------
  |  Branch (297:7): [True: 14.0k, False: 1.96M]
  ------------------
  298|  14.0k|	PATH::rlineto (env, param);
  299|  14.0k|	process_post_path (op, env, param);
  300|  14.0k|	break;
  301|  27.3k|      case OpCode_hlineto:
  ------------------
  |  |  147|  27.3k|#define OpCode_hlineto		  6 /* CFF, CFF2 */
  ------------------
  |  Branch (301:7): [True: 27.3k, False: 1.95M]
  ------------------
  302|  27.3k|	PATH::hlineto (env, param);
  303|  27.3k|	process_post_path (op, env, param);
  304|  27.3k|	break;
  305|  15.8k|      case OpCode_vlineto:
  ------------------
  |  |  148|  15.8k|#define OpCode_vlineto		  7 /* CFF, CFF2 */
  ------------------
  |  Branch (305:7): [True: 15.8k, False: 1.96M]
  ------------------
  306|  15.8k|	PATH::vlineto (env, param);
  307|  15.8k|	process_post_path (op, env, param);
  308|  15.8k|	break;
  309|  16.7k|      case OpCode_rrcurveto:
  ------------------
  |  |  149|  16.7k|#define OpCode_rrcurveto	  8 /* CFF, CFF2 */
  ------------------
  |  Branch (309:7): [True: 16.7k, False: 1.96M]
  ------------------
  310|  16.7k|	PATH::rrcurveto (env, param);
  311|  16.7k|	process_post_path (op, env, param);
  312|  16.7k|	break;
  313|  13.0k|      case OpCode_rcurveline:
  ------------------
  |  |  165|  13.0k|#define OpCode_rcurveline	 24 /* CFF, CFF2 */
  ------------------
  |  Branch (313:7): [True: 13.0k, False: 1.96M]
  ------------------
  314|  13.0k|	PATH::rcurveline (env, param);
  315|  13.0k|	process_post_path (op, env, param);
  316|  13.0k|	break;
  317|  4.76k|      case OpCode_rlinecurve:
  ------------------
  |  |  166|  4.76k|#define OpCode_rlinecurve	 25 /* CFF, CFF2 */
  ------------------
  |  Branch (317:7): [True: 4.76k, False: 1.97M]
  ------------------
  318|  4.76k|	PATH::rlinecurve (env, param);
  319|  4.76k|	process_post_path (op, env, param);
  320|  4.76k|	break;
  321|  3.31k|      case OpCode_vvcurveto:
  ------------------
  |  |  167|  3.31k|#define OpCode_vvcurveto	 26 /* CFF, CFF2 */
  ------------------
  |  Branch (321:7): [True: 3.31k, False: 1.97M]
  ------------------
  322|  3.31k|	PATH::vvcurveto (env, param);
  323|  3.31k|	process_post_path (op, env, param);
  324|  3.31k|	break;
  325|  6.94k|      case OpCode_hhcurveto:
  ------------------
  |  |  168|  6.94k|#define OpCode_hhcurveto	 27 /* CFF, CFF2 */
  ------------------
  |  Branch (325:7): [True: 6.94k, False: 1.97M]
  ------------------
  326|  6.94k|	PATH::hhcurveto (env, param);
  327|  6.94k|	process_post_path (op, env, param);
  328|  6.94k|	break;
  329|  11.4k|      case OpCode_vhcurveto:
  ------------------
  |  |  171|  11.4k|#define OpCode_vhcurveto	 30 /* CFF, CFF2 */
  ------------------
  |  Branch (329:7): [True: 11.4k, False: 1.96M]
  ------------------
  330|  11.4k|	PATH::vhcurveto (env, param);
  331|  11.4k|	process_post_path (op, env, param);
  332|  11.4k|	break;
  333|  11.7k|      case OpCode_hvcurveto:
  ------------------
  |  |  172|  11.7k|#define OpCode_hvcurveto	 31 /* CFF, CFF2 */
  ------------------
  |  Branch (333:7): [True: 11.7k, False: 1.96M]
  ------------------
  334|  11.7k|	PATH::hvcurveto (env, param);
  335|  11.7k|	process_post_path (op, env, param);
  336|  11.7k|	break;
  337|       |
  338|  2.10k|      case OpCode_hflex:
  ------------------
  |  |  211|  2.10k|#define OpCode_hflex		Make_OpCode_ESC(34) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|  2.10k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  2.10k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:7): [True: 2.10k, False: 1.97M]
  ------------------
  339|  2.10k|	PATH::hflex (env, param);
  340|  2.10k|	OPSET::process_post_flex (op, env, param);
  341|  2.10k|	break;
  342|       |
  343|    358|      case OpCode_flex:
  ------------------
  |  |  212|    358|#define OpCode_flex		Make_OpCode_ESC(35) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    358|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    358|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (343:7): [True: 358, False: 1.97M]
  ------------------
  344|    358|	PATH::flex (env, param);
  345|    358|	OPSET::process_post_flex (op, env, param);
  346|    358|	break;
  347|       |
  348|  2.60k|      case OpCode_hflex1:
  ------------------
  |  |  213|  2.60k|#define OpCode_hflex1		Make_OpCode_ESC(36) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|  2.60k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  2.60k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (348:7): [True: 2.60k, False: 1.97M]
  ------------------
  349|  2.60k|	PATH::hflex1 (env, param);
  350|  2.60k|	OPSET::process_post_flex (op, env, param);
  351|  2.60k|	break;
  352|       |
  353|  1.96k|      case OpCode_flex1:
  ------------------
  |  |  214|  1.96k|#define OpCode_flex1		Make_OpCode_ESC(37) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|  1.96k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.96k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (353:7): [True: 1.96k, False: 1.97M]
  ------------------
  354|  1.96k|	PATH::flex1 (env, param);
  355|  1.96k|	OPSET::process_post_flex (op, env, param);
  356|  1.96k|	break;
  357|       |
  358|  1.68M|      default:
  ------------------
  |  Branch (358:7): [True: 1.68M, False: 299k]
  ------------------
  359|  1.68M|	SUPER::process_op (op, env);
  360|  1.68M|	break;
  361|  1.97M|    }
  362|  1.97M|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE16return_from_subrEv:
  169|  2.15k|  {
  170|  2.15k|    if (unlikely (SUPER::str_ref.in_error ()))
  ------------------
  |  |  259|  2.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.15k]
  |  |  ------------------
  ------------------
  171|      0|      SUPER::set_error ();
  172|  2.15k|    context = callStack.pop ();
  173|  2.15k|    SUPER::str_ref = context.str_ref;
  174|  2.15k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE9call_subrERKNS_14biased_subrs_tIS6_EENS_9cs_type_tE:
  152|  8.86k|  {
  153|  8.86k|    unsigned int subr_num = 0;
  154|       |
  155|  8.86k|    if (unlikely (!pop_subr_num (biasedSubrs, subr_num)
  ------------------
  |  |  259|  13.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.15k, False: 4.71k]
  |  |  |  Branch (259:47): [True: 3.78k, False: 5.08k]
  |  |  |  Branch (259:47): [True: 374, False: 4.71k]
  |  |  ------------------
  ------------------
  156|  8.86k|		 || callStack.get_count () >= kMaxCallLimit))
  157|  4.15k|    {
  158|  4.15k|      SUPER::set_error ();
  159|  4.15k|      return;
  160|  4.15k|    }
  161|  4.71k|    context.str_ref = SUPER::str_ref;
  162|  4.71k|    callStack.push (context);
  163|       |
  164|  4.71k|    context.init ( biasedSubrs[subr_num], type, subr_num);
  165|  4.71k|    SUPER::str_ref = context.str_ref;
  166|  4.71k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE12pop_subr_numERKNS_14biased_subrs_tIS6_EERj:
  140|  8.86k|  {
  141|  8.86k|    subr_num = 0;
  142|  8.86k|    int n = SUPER::argStack.pop_int ();
  143|  8.86k|    n += biasedSubrs.get_bias ();
  144|  8.86k|    if (unlikely ((n < 0) || ((unsigned int)n >= biasedSubrs.get_count ())))
  ------------------
  |  |  259|  17.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.78k, False: 5.08k]
  |  |  |  Branch (259:47): [True: 564, False: 8.30k]
  |  |  |  Branch (259:47): [True: 3.22k, False: 5.08k]
  |  |  ------------------
  ------------------
  145|  3.78k|      return false;
  146|       |
  147|  5.08k|    subr_num = (unsigned int)n;
  148|  5.08k|    return true;
  149|  8.86k|  }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeItLj2EEEEEE8get_biasEv:
   80|  8.86k|  unsigned int get_bias () const  { return bias; }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeItLj2EEEEEE9get_countEv:
   79|   557k|  unsigned int get_count () const { return subrs ? subrs->count : 0; }
  ------------------
  |  Branch (79:44): [True: 557k, False: 24]
  ------------------
_ZN3CFF14call_context_t4initENS_14byte_str_ref_tENS_9cs_type_tEj:
   45|   325k|  {
   46|   325k|    str_ref = substr_;
   47|   325k|    type = type_;
   48|   325k|    subr_num = subr_num_;
   49|   325k|  }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeItLj2EEEEEEixEj:
   83|  4.71k|  {
   84|  4.71k|    if (unlikely (!subrs || index >= subrs->count))
  ------------------
  |  |  259|  9.42k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.71k]
  |  |  |  Branch (259:47): [True: 0, False: 4.71k]
  |  |  |  Branch (259:47): [True: 0, False: 4.71k]
  |  |  ------------------
  ------------------
   85|      0|      return hb_ubytes_t ();
   86|  4.71k|    else
   87|  4.71k|      return (*subrs)[index];
   88|  4.71k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE13process_hstemEjRS3_RS4_:
  365|  31.8k|  {
  366|  31.8k|    env.hstem_count += env.argStack.get_count () / 2;
  367|  31.8k|    OPSET::flush_args_and_op (op, env, param);
  368|  31.8k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE13process_vstemEjRS3_RS4_:
  371|  38.5k|  {
  372|  38.5k|    env.vstem_count += env.argStack.get_count () / 2;
  373|  38.5k|    OPSET::flush_args_and_op (op, env, param);
  374|  38.5k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE16process_hintmaskEjRS3_RS4_:
  377|  14.8k|  {
  378|  14.8k|    env.determine_hintmask_size ();
  379|  14.8k|    if (likely (env.str_ref.avail (env.hintmask_size)))
  ------------------
  |  |  258|  14.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 14.4k, False: 387]
  |  |  ------------------
  ------------------
  380|  14.4k|    {
  381|  14.4k|      OPSET::flush_hintmask (op, env, param);
  382|  14.4k|      env.str_ref.inc (env.hintmask_size);
  383|  14.4k|    }
  384|  14.8k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE23determine_hintmask_sizeEv:
  177|  15.4k|  {
  178|  15.4k|    if (!seen_hintmask)
  ------------------
  |  Branch (178:9): [True: 7.30k, False: 8.16k]
  ------------------
  179|  7.30k|    {
  180|  7.30k|      vstem_count += SUPER::argStack.get_count() / 2;
  181|  7.30k|      hintmask_size = (hstem_count + vstem_count + 7) >> 3;
  182|  7.30k|      seen_hintmask = true;
  183|  7.30k|    }
  184|  15.4k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE14flush_hintmaskEjRS3_RS4_:
  425|  14.4k|  {
  426|  14.4k|    OPSET::flush_args_and_op (op, env, param);
  427|  14.4k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7rmovetoERS2_RS3_:
  455|  6.50k|  {
  456|  6.50k|    point_t pt1 = env.get_pt ();
  457|  6.50k|    const number_t &dy = env.pop_arg ();
  458|  6.50k|    const number_t &dx = env.pop_arg ();
  459|  6.50k|    pt1.move (dx, dy);
  460|  6.50k|    PATH::moveto (env, param, pt1);
  461|  6.50k|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE6get_ptEv:
  191|   535k|  const point_t &get_pt () const { return pt; }
_ZN3CFF7point_t4moveERKNS_8number_tES3_:
  105|   454k|  void move (const number_t &dx, const number_t &dy) { move_x (dx); move_y (dy); }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE6movetoERKNS_7point_tE:
  193|   282k|  void moveto (const point_t &pt_ ) { pt = pt_; }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE17process_post_moveEjRS3_RS4_:
  395|  19.9k|  {
  396|  19.9k|    if (!env.seen_moveto)
  ------------------
  |  Branch (396:9): [True: 0, False: 19.9k]
  ------------------
  397|      0|    {
  398|      0|      env.determine_hintmask_size ();
  399|      0|      env.seen_moveto = true;
  400|      0|    }
  401|  19.9k|    OPSET::flush_args_and_op (op, env, param);
  402|  19.9k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7hmovetoERS2_RS3_:
  464|  5.83k|  {
  465|  5.83k|    point_t pt1 = env.get_pt ();
  466|  5.83k|    pt1.move_x (env.pop_arg ());
  467|  5.83k|    PATH::moveto (env, param, pt1);
  468|  5.83k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7vmovetoERS2_RS3_:
  471|  7.60k|  {
  472|  7.60k|    point_t pt1 = env.get_pt ();
  473|  7.60k|    pt1.move_y (env.pop_arg ());
  474|  7.60k|    PATH::moveto (env, param, pt1);
  475|  7.60k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7rlinetoERS2_RS3_:
  478|  14.0k|  {
  479|  28.8k|    for (unsigned int i = 0; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (479:30): [True: 14.7k, False: 14.0k]
  ------------------
  480|  14.7k|    {
  481|  14.7k|      point_t pt1 = env.get_pt ();
  482|  14.7k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  483|  14.7k|      PATH::line (env, param, pt1);
  484|  14.7k|    }
  485|  14.0k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE17process_post_pathEjRS3_RS4_:
  405|   125k|  {
  406|   125k|    OPSET::flush_args_and_op (op, env, param);
  407|   125k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7hlinetoERS2_RS3_:
  488|  27.3k|  {
  489|  27.3k|    point_t pt1;
  490|  27.3k|    unsigned int i = 0;
  491|  49.3k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (491:12): [True: 21.9k, False: 27.3k]
  ------------------
  492|  21.9k|    {
  493|  21.9k|      pt1 = env.get_pt ();
  494|  21.9k|      pt1.move_x (env.eval_arg (i));
  495|  21.9k|      PATH::line (env, param, pt1);
  496|  21.9k|      pt1.move_y (env.eval_arg (i+1));
  497|  21.9k|      PATH::line (env, param, pt1);
  498|  21.9k|    }
  499|  27.3k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (499:9): [True: 12.9k, False: 14.4k]
  ------------------
  500|  12.9k|    {
  501|  12.9k|      pt1 = env.get_pt ();
  502|  12.9k|      pt1.move_x (env.eval_arg (i));
  503|  12.9k|      PATH::line (env, param, pt1);
  504|  12.9k|    }
  505|  27.3k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE7vlinetoERS2_RS3_:
  508|  15.8k|  {
  509|  15.8k|    point_t pt1;
  510|  15.8k|    unsigned int i = 0;
  511|  24.9k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (511:12): [True: 9.04k, False: 15.8k]
  ------------------
  512|  9.04k|    {
  513|  9.04k|      pt1 = env.get_pt ();
  514|  9.04k|      pt1.move_y (env.eval_arg (i));
  515|  9.04k|      PATH::line (env, param, pt1);
  516|  9.04k|      pt1.move_x (env.eval_arg (i+1));
  517|  9.04k|      PATH::line (env, param, pt1);
  518|  9.04k|    }
  519|  15.8k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (519:9): [True: 10.5k, False: 5.33k]
  ------------------
  520|  10.5k|    {
  521|  10.5k|      pt1 = env.get_pt ();
  522|  10.5k|      pt1.move_y (env.eval_arg (i));
  523|  10.5k|      PATH::line (env, param, pt1);
  524|  10.5k|    }
  525|  15.8k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE9rrcurvetoERS2_RS3_:
  528|  16.7k|  {
  529|  45.4k|    for (unsigned int i = 0; i + 6 <= env.argStack.get_count (); i += 6)
  ------------------
  |  Branch (529:30): [True: 28.6k, False: 16.7k]
  ------------------
  530|  28.6k|    {
  531|  28.6k|      point_t pt1 = env.get_pt ();
  532|  28.6k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  533|  28.6k|      point_t pt2 = pt1;
  534|  28.6k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  535|  28.6k|      point_t pt3 = pt2;
  536|  28.6k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  537|  28.6k|      PATH::curve (env, param, pt1, pt2, pt3);
  538|  28.6k|    }
  539|  16.7k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE10rcurvelineERS2_RS3_:
  542|  13.0k|  {
  543|  13.0k|    unsigned int arg_count = env.argStack.get_count ();
  544|  13.0k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  13.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.09k, False: 10.9k]
  |  |  ------------------
  ------------------
  545|  2.09k|      return;
  546|       |
  547|  10.9k|    unsigned int i = 0;
  548|  10.9k|    unsigned int curve_limit = arg_count - 2;
  549|  32.5k|    for (; i + 6 <= curve_limit; i += 6)
  ------------------
  |  Branch (549:12): [True: 21.6k, False: 10.9k]
  ------------------
  550|  21.6k|    {
  551|  21.6k|      point_t pt1 = env.get_pt ();
  552|  21.6k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  553|  21.6k|      point_t pt2 = pt1;
  554|  21.6k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  555|  21.6k|      point_t pt3 = pt2;
  556|  21.6k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  557|  21.6k|      PATH::curve (env, param, pt1, pt2, pt3);
  558|  21.6k|    }
  559|       |
  560|  10.9k|    point_t pt1 = env.get_pt ();
  561|  10.9k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  562|  10.9k|    PATH::line (env, param, pt1);
  563|  10.9k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE10rlinecurveERS2_RS3_:
  566|  4.76k|  {
  567|  4.76k|    unsigned int arg_count = env.argStack.get_count ();
  568|  4.76k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  4.76k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.58k, False: 3.17k]
  |  |  ------------------
  ------------------
  569|  1.58k|      return;
  570|       |
  571|  3.17k|    unsigned int i = 0;
  572|  3.17k|    unsigned int line_limit = arg_count - 6;
  573|  13.8k|    for (; i + 2 <= line_limit; i += 2)
  ------------------
  |  Branch (573:12): [True: 10.7k, False: 3.17k]
  ------------------
  574|  10.7k|    {
  575|  10.7k|      point_t pt1 = env.get_pt ();
  576|  10.7k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  577|  10.7k|      PATH::line (env, param, pt1);
  578|  10.7k|    }
  579|       |
  580|  3.17k|    point_t pt1 = env.get_pt ();
  581|  3.17k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  582|  3.17k|    point_t pt2 = pt1;
  583|  3.17k|    pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  584|  3.17k|    point_t pt3 = pt2;
  585|  3.17k|    pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  586|  3.17k|    PATH::curve (env, param, pt1, pt2, pt3);
  587|  3.17k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE9vvcurvetoERS2_RS3_:
  590|  3.31k|  {
  591|  3.31k|    unsigned int i = 0;
  592|  3.31k|    point_t pt1 = env.get_pt ();
  593|  3.31k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (593:9): [True: 566, False: 2.75k]
  ------------------
  594|    566|      pt1.move_x (env.eval_arg (i++));
  595|  6.02k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (595:12): [True: 2.70k, False: 3.31k]
  ------------------
  596|  2.70k|    {
  597|  2.70k|      pt1.move_y (env.eval_arg (i));
  598|  2.70k|      point_t pt2 = pt1;
  599|  2.70k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  600|  2.70k|      point_t pt3 = pt2;
  601|  2.70k|      pt3.move_y (env.eval_arg (i+3));
  602|  2.70k|      PATH::curve (env, param, pt1, pt2, pt3);
  603|  2.70k|      pt1 = env.get_pt ();
  604|  2.70k|    }
  605|  3.31k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE9hhcurvetoERS2_RS3_:
  608|  6.94k|  {
  609|  6.94k|    unsigned int i = 0;
  610|  6.94k|    point_t pt1 = env.get_pt ();
  611|  6.94k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (611:9): [True: 1.65k, False: 5.29k]
  ------------------
  612|  1.65k|      pt1.move_y (env.eval_arg (i++));
  613|  12.7k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (613:12): [True: 5.84k, False: 6.94k]
  ------------------
  614|  5.84k|    {
  615|  5.84k|      pt1.move_x (env.eval_arg (i));
  616|  5.84k|      point_t pt2 = pt1;
  617|  5.84k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  618|  5.84k|      point_t pt3 = pt2;
  619|  5.84k|      pt3.move_x (env.eval_arg (i+3));
  620|  5.84k|      PATH::curve (env, param, pt1, pt2, pt3);
  621|  5.84k|      pt1 = env.get_pt ();
  622|  5.84k|    }
  623|  6.94k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE9vhcurvetoERS2_RS3_:
  626|  11.4k|  {
  627|  11.4k|    point_t pt1, pt2, pt3;
  628|  11.4k|    unsigned int i = 0;
  629|  11.4k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (629:9): [True: 6.51k, False: 4.88k]
  ------------------
  630|  6.51k|    {
  631|  6.51k|      point_t pt1 = env.get_pt ();
  632|  6.51k|      pt1.move_y (env.eval_arg (i));
  633|  6.51k|      point_t pt2 = pt1;
  634|  6.51k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  635|  6.51k|      point_t pt3 = pt2;
  636|  6.51k|      pt3.move_x (env.eval_arg (i+3));
  637|  6.51k|      i += 4;
  638|       |
  639|  12.1k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (639:14): [True: 5.60k, False: 6.51k]
  ------------------
  640|  5.60k|      {
  641|  5.60k|	PATH::curve (env, param, pt1, pt2, pt3);
  642|  5.60k|	pt1 = env.get_pt ();
  643|  5.60k|	pt1.move_x (env.eval_arg (i));
  644|  5.60k|	pt2 = pt1;
  645|  5.60k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  646|  5.60k|	pt3 = pt2;
  647|  5.60k|	pt3.move_y (env.eval_arg (i+3));
  648|  5.60k|	PATH::curve (env, param, pt1, pt2, pt3);
  649|       |
  650|  5.60k|	pt1 = pt3;
  651|  5.60k|	pt1.move_y (env.eval_arg (i+4));
  652|  5.60k|	pt2 = pt1;
  653|  5.60k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  654|  5.60k|	pt3 = pt2;
  655|  5.60k|	pt3.move_x (env.eval_arg (i+7));
  656|  5.60k|      }
  657|  6.51k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (657:11): [True: 5.09k, False: 1.42k]
  ------------------
  658|  5.09k|	pt3.move_y (env.eval_arg (i));
  659|  6.51k|      PATH::curve (env, param, pt1, pt2, pt3);
  660|  6.51k|    }
  661|  4.88k|    else
  662|  4.88k|    {
  663|  9.08k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (663:14): [True: 4.19k, False: 4.88k]
  ------------------
  664|  4.19k|      {
  665|  4.19k|	pt1 = env.get_pt ();
  666|  4.19k|	pt1.move_y (env.eval_arg (i));
  667|  4.19k|	pt2 = pt1;
  668|  4.19k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  669|  4.19k|	pt3 = pt2;
  670|  4.19k|	pt3.move_x (env.eval_arg (i+3));
  671|  4.19k|	PATH::curve (env, param, pt1, pt2, pt3);
  672|       |
  673|  4.19k|	pt1 = pt3;
  674|  4.19k|	pt1.move_x (env.eval_arg (i+4));
  675|  4.19k|	pt2 = pt1;
  676|  4.19k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  677|  4.19k|	pt3 = pt2;
  678|  4.19k|	pt3.move_y (env.eval_arg (i+7));
  679|  4.19k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (679:6): [True: 1.81k, False: 2.38k]
  |  Branch (679:46): [True: 460, False: 1.35k]
  ------------------
  680|    460|	  pt3.move_x (env.eval_arg (i+8));
  681|  4.19k|	PATH::curve (env, param, pt1, pt2, pt3);
  682|  4.19k|      }
  683|  4.88k|    }
  684|  11.4k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE9hvcurvetoERS2_RS3_:
  687|  11.7k|  {
  688|  11.7k|    point_t pt1, pt2, pt3;
  689|  11.7k|    unsigned int i = 0;
  690|  11.7k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (690:9): [True: 5.19k, False: 6.55k]
  ------------------
  691|  5.19k|    {
  692|  5.19k|      point_t pt1 = env.get_pt ();
  693|  5.19k|      pt1.move_x (env.eval_arg (i));
  694|  5.19k|      point_t pt2 = pt1;
  695|  5.19k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  696|  5.19k|      point_t pt3 = pt2;
  697|  5.19k|      pt3.move_y (env.eval_arg (i+3));
  698|  5.19k|      i += 4;
  699|       |
  700|  7.10k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (700:14): [True: 1.91k, False: 5.19k]
  ------------------
  701|  1.91k|      {
  702|  1.91k|	PATH::curve (env, param, pt1, pt2, pt3);
  703|  1.91k|	pt1 = env.get_pt ();
  704|  1.91k|	pt1.move_y (env.eval_arg (i));
  705|  1.91k|	pt2 = pt1;
  706|  1.91k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  707|  1.91k|	pt3 = pt2;
  708|  1.91k|	pt3.move_x (env.eval_arg (i+3));
  709|  1.91k|	PATH::curve (env, param, pt1, pt2, pt3);
  710|       |
  711|  1.91k|	pt1 = pt3;
  712|  1.91k|	pt1.move_x (env.eval_arg (i+4));
  713|  1.91k|	pt2 = pt1;
  714|  1.91k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  715|  1.91k|	pt3 = pt2;
  716|  1.91k|	pt3.move_y (env.eval_arg (i+7));
  717|  1.91k|      }
  718|  5.19k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (718:11): [True: 2.96k, False: 2.22k]
  ------------------
  719|  2.96k|	pt3.move_x (env.eval_arg (i));
  720|  5.19k|      PATH::curve (env, param, pt1, pt2, pt3);
  721|  5.19k|    }
  722|  6.55k|    else
  723|  6.55k|    {
  724|  10.1k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (724:14): [True: 3.63k, False: 6.55k]
  ------------------
  725|  3.63k|      {
  726|  3.63k|	pt1 = env.get_pt ();
  727|  3.63k|	pt1.move_x (env.eval_arg (i));
  728|  3.63k|	pt2 = pt1;
  729|  3.63k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  730|  3.63k|	pt3 = pt2;
  731|  3.63k|	pt3.move_y (env.eval_arg (i+3));
  732|  3.63k|	PATH::curve (env, param, pt1, pt2, pt3);
  733|       |
  734|  3.63k|	pt1 = pt3;
  735|  3.63k|	pt1.move_y (env.eval_arg (i+4));
  736|  3.63k|	pt2 = pt1;
  737|  3.63k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  738|  3.63k|	pt3 = pt2;
  739|  3.63k|	pt3.move_x (env.eval_arg (i+7));
  740|  3.63k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (740:6): [True: 2.84k, False: 790]
  |  Branch (740:46): [True: 731, False: 2.11k]
  ------------------
  741|    731|	  pt3.move_y (env.eval_arg (i+8));
  742|  3.63k|	PATH::curve (env, param, pt1, pt2, pt3);
  743|  3.63k|      }
  744|  6.55k|    }
  745|  11.7k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE5hflexERS2_RS3_:
  758|  2.10k|  {
  759|  2.10k|    if (likely (env.argStack.get_count () == 7))
  ------------------
  |  |  258|  2.10k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 656, False: 1.44k]
  |  |  ------------------
  ------------------
  760|    656|    {
  761|    656|      point_t pt1 = env.get_pt ();
  762|    656|      pt1.move_x (env.eval_arg (0));
  763|    656|      point_t pt2 = pt1;
  764|    656|      pt2.move (env.eval_arg (1), env.eval_arg (2));
  765|    656|      point_t pt3 = pt2;
  766|    656|      pt3.move_x (env.eval_arg (3));
  767|    656|      point_t pt4 = pt3;
  768|    656|      pt4.move_x (env.eval_arg (4));
  769|    656|      point_t pt5 = pt4;
  770|    656|      pt5.move_x (env.eval_arg (5));
  771|    656|      pt5.y = pt1.y;
  772|    656|      point_t pt6 = pt5;
  773|    656|      pt6.move_x (env.eval_arg (6));
  774|       |
  775|    656|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  776|    656|    }
  777|  1.44k|    else
  778|  1.44k|      env.set_error ();
  779|  2.10k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE6curve2ERS2_RS3_RKNS_7point_tES9_S9_S9_S9_S9_:
  869|  3.22k|  {
  870|  3.22k|    PATH::curve (env, param, pt1, pt2, pt3);
  871|  3.22k|    PATH::curve (env, param, pt4, pt5, pt6);
  872|  3.22k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff1_cs_opset_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_t25cff1_path_procs_extents_tE17process_post_flexEjRS3_RS4_:
  387|  7.03k|  {
  388|  7.03k|    OPSET::flush_args_and_op (op, env, param);
  389|  7.03k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE4flexERS2_RS3_:
  782|    358|  {
  783|    358|    if (likely (env.argStack.get_count () == 13))
  ------------------
  |  |  258|    358|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 122, False: 236]
  |  |  ------------------
  ------------------
  784|    122|    {
  785|    122|      point_t pt1 = env.get_pt ();
  786|    122|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  787|    122|      point_t pt2 = pt1;
  788|    122|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  789|    122|      point_t pt3 = pt2;
  790|    122|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  791|    122|      point_t pt4 = pt3;
  792|    122|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  793|    122|      point_t pt5 = pt4;
  794|    122|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  795|    122|      point_t pt6 = pt5;
  796|    122|      pt6.move (env.eval_arg (10), env.eval_arg (11));
  797|       |
  798|    122|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  799|    122|    }
  800|    236|    else
  801|    236|      env.set_error ();
  802|    358|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE6hflex1ERS2_RS3_:
  805|  2.60k|  {
  806|  2.60k|    if (likely (env.argStack.get_count () == 9))
  ------------------
  |  |  258|  2.60k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.23k, False: 1.36k]
  |  |  ------------------
  ------------------
  807|  1.23k|    {
  808|  1.23k|      point_t pt1 = env.get_pt ();
  809|  1.23k|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  810|  1.23k|      point_t pt2 = pt1;
  811|  1.23k|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  812|  1.23k|      point_t pt3 = pt2;
  813|  1.23k|      pt3.move_x (env.eval_arg (4));
  814|  1.23k|      point_t pt4 = pt3;
  815|  1.23k|      pt4.move_x (env.eval_arg (5));
  816|  1.23k|      point_t pt5 = pt4;
  817|  1.23k|      pt5.move (env.eval_arg (6), env.eval_arg (7));
  818|  1.23k|      point_t pt6 = pt5;
  819|  1.23k|      pt6.move_x (env.eval_arg (8));
  820|  1.23k|      pt6.y = env.get_pt ().y;
  821|       |
  822|  1.23k|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  823|  1.23k|    }
  824|  1.36k|    else
  825|  1.36k|      env.set_error ();
  826|  2.60k|  }
_ZN3CFF12path_procs_tI25cff1_path_procs_extents_tNS_20cff1_cs_interp_env_tE20cff1_extents_param_tE5flex1ERS2_RS3_:
  829|  1.96k|  {
  830|  1.96k|    if (likely (env.argStack.get_count () == 11))
  ------------------
  |  |  258|  1.96k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.21k, False: 756]
  |  |  ------------------
  ------------------
  831|  1.21k|    {
  832|  1.21k|      point_t d;
  833|  7.26k|      for (unsigned int i = 0; i < 10; i += 2)
  ------------------
  |  Branch (833:32): [True: 6.05k, False: 1.21k]
  ------------------
  834|  6.05k|	d.move (env.eval_arg (i), env.eval_arg (i+1));
  835|       |
  836|  1.21k|      point_t pt1 = env.get_pt ();
  837|  1.21k|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  838|  1.21k|      point_t pt2 = pt1;
  839|  1.21k|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  840|  1.21k|      point_t pt3 = pt2;
  841|  1.21k|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  842|  1.21k|      point_t pt4 = pt3;
  843|  1.21k|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  844|  1.21k|      point_t pt5 = pt4;
  845|  1.21k|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  846|  1.21k|      point_t pt6 = pt5;
  847|       |
  848|  1.21k|      if (fabs (d.x.to_real ()) > fabs (d.y.to_real ()))
  ------------------
  |  Branch (848:11): [True: 651, False: 559]
  ------------------
  849|    651|      {
  850|    651|	pt6.move_x (env.eval_arg (10));
  851|    651|	pt6.y = env.get_pt ().y;
  852|    651|      }
  853|    559|      else
  854|    559|      {
  855|    559|	pt6.x = env.get_pt ().x;
  856|    559|	pt6.move_y (env.eval_arg (10));
  857|    559|      }
  858|       |
  859|  1.21k|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  860|  1.21k|    }
  861|    756|    else
  862|    756|      env.set_error ();
  863|  1.96k|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE8in_errorEv:
  135|  2.27M|  {
  136|  2.27M|    return callStack.in_error () || SUPER::in_error ();
  ------------------
  |  Branch (136:12): [True: 1.98k, False: 2.26M]
  |  Branch (136:37): [True: 119k, False: 2.15M]
  ------------------
  137|  2.27M|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEE10is_endcharEv:
  187|  2.15M|  bool is_endchar () const { return endchar_flag; }
_ZN3CFF16cs_interpreter_tINS_20cff1_cs_interp_env_tE20cff1_cs_opset_path_t17cff1_path_param_tEC2ERS1_:
  878|  1.08k|  cs_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF16cs_interpreter_tINS_20cff1_cs_interp_env_tE20cff1_cs_opset_path_t17cff1_path_param_tE9interpretERS3_:
  881|  1.08k|  {
  882|  1.08k|    SUPER::env.set_endchar (false);
  883|       |
  884|  1.08k|    unsigned max_ops = HB_CFF_MAX_OPS;
  ------------------
  |  |  105|  1.08k|#define HB_CFF_MAX_OPS 10000
  ------------------
  885|   128k|    for (;;) {
  886|   128k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  887|   128k|      if (unlikely (SUPER::env.in_error () || !--max_ops))
  ------------------
  |  |  259|   256k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 718, False: 127k]
  |  |  |  Branch (259:47): [True: 718, False: 127k]
  |  |  |  Branch (259:47): [True: 0, False: 127k]
  |  |  ------------------
  ------------------
  888|    718|      {
  889|    718|	SUPER::env.set_error ();
  890|    718|	return false;
  891|    718|      }
  892|   127k|      if (SUPER::env.is_endchar ())
  ------------------
  |  Branch (892:11): [True: 368, False: 127k]
  ------------------
  893|    368|	break;
  894|   127k|    }
  895|       |
  896|    368|    return true;
  897|  1.08k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE17flush_args_and_opEjRS3_RS4_:
  410|  23.4k|  {
  411|  23.4k|    OPSET::flush_args (env, param);
  412|  23.4k|    OPSET::flush_op (op, env, param);
  413|  23.4k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE10flush_argsERS3_RS4_:
  416|  23.4k|  {
  417|  23.4k|    env.pop_n_args (env.argStack.get_count ());
  418|  23.4k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE8flush_opEjRS3_RS4_:
  421|  23.4k|  {
  422|  23.4k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE10process_opEjRS3_RS4_:
  243|   127k|  {
  244|   127k|    switch (op) {
  245|       |
  246|     93|      case OpCode_return:
  ------------------
  |  |  152|     93|#define OpCode_return		 11 /* CFF */
  ------------------
  |  Branch (246:7): [True: 93, False: 127k]
  ------------------
  247|     93|	env.return_from_subr ();
  248|     93|	break;
  249|      0|      case OpCode_endchar:
  ------------------
  |  |  155|      0|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (249:7): [True: 0, False: 127k]
  ------------------
  250|      0|	OPSET::check_width (op, env, param);
  251|      0|	env.set_endchar (true);
  252|      0|	OPSET::flush_args_and_op (op, env, param);
  253|      0|	break;
  254|       |
  255|  3.78k|      case OpCode_fixedcs:
  ------------------
  |  |  174|  3.78k|#define OpCode_fixedcs		255 /* 32-bit fixed */
  ------------------
  |  Branch (255:7): [True: 3.78k, False: 124k]
  ------------------
  256|  3.78k|	env.argStack.push_fixed_from_substr (env.str_ref);
  257|  3.78k|	break;
  258|       |
  259|     65|      case OpCode_callsubr:
  ------------------
  |  |  151|     65|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (259:7): [True: 65, False: 127k]
  ------------------
  260|     65|	env.call_subr (env.localSubrs, CSType_LocalSubr);
  261|     65|	break;
  262|       |
  263|  1.43k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  1.43k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (263:7): [True: 1.43k, False: 126k]
  ------------------
  264|  1.43k|	env.call_subr (env.globalSubrs, CSType_GlobalSubr);
  265|  1.43k|	break;
  266|       |
  267|    585|      case OpCode_hstem:
  ------------------
  |  |  142|    585|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (267:7): [True: 585, False: 127k]
  ------------------
  268|  1.02k|      case OpCode_hstemhm:
  ------------------
  |  |  159|  1.02k|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (268:7): [True: 436, False: 127k]
  ------------------
  269|  1.02k|	OPSET::check_width (op, env, param);
  270|  1.02k|	OPSET::process_hstem (op, env, param);
  271|  1.02k|	break;
  272|  1.11k|      case OpCode_vstem:
  ------------------
  |  |  144|  1.11k|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (272:7): [True: 1.11k, False: 126k]
  ------------------
  273|  1.76k|      case OpCode_vstemhm:
  ------------------
  |  |  164|  1.76k|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (273:7): [True: 645, False: 127k]
  ------------------
  274|  1.76k|	OPSET::check_width (op, env, param);
  275|  1.76k|	OPSET::process_vstem (op, env, param);
  276|  1.76k|	break;
  277|    276|      case OpCode_hintmask:
  ------------------
  |  |  160|    276|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (277:7): [True: 276, False: 127k]
  ------------------
  278|    602|      case OpCode_cntrmask:
  ------------------
  |  |  161|    602|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (278:7): [True: 326, False: 127k]
  ------------------
  279|    602|	OPSET::check_width (op, env, param);
  280|    602|	OPSET::process_hintmask (op, env, param);
  281|    602|	break;
  282|    698|      case OpCode_rmoveto:
  ------------------
  |  |  162|    698|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (282:7): [True: 698, False: 127k]
  ------------------
  283|    698|	OPSET::check_width (op, env, param);
  284|    698|	PATH::rmoveto (env, param);
  285|    698|	OPSET::process_post_move (op, env, param);
  286|    698|	break;
  287|    380|      case OpCode_hmoveto:
  ------------------
  |  |  163|    380|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (287:7): [True: 380, False: 127k]
  ------------------
  288|    380|	OPSET::check_width (op, env, param);
  289|    380|	PATH::hmoveto (env, param);
  290|    380|	OPSET::process_post_move (op, env, param);
  291|    380|	break;
  292|  2.63k|      case OpCode_vmoveto:
  ------------------
  |  |  145|  2.63k|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (292:7): [True: 2.63k, False: 125k]
  ------------------
  293|  2.63k|	OPSET::check_width (op, env, param);
  294|  2.63k|	PATH::vmoveto (env, param);
  295|  2.63k|	OPSET::process_post_move (op, env, param);
  296|  2.63k|	break;
  297|    979|      case OpCode_rlineto:
  ------------------
  |  |  146|    979|#define OpCode_rlineto		  5 /* CFF, CFF2 */
  ------------------
  |  Branch (297:7): [True: 979, False: 126k]
  ------------------
  298|    979|	PATH::rlineto (env, param);
  299|    979|	process_post_path (op, env, param);
  300|    979|	break;
  301|  2.42k|      case OpCode_hlineto:
  ------------------
  |  |  147|  2.42k|#define OpCode_hlineto		  6 /* CFF, CFF2 */
  ------------------
  |  Branch (301:7): [True: 2.42k, False: 125k]
  ------------------
  302|  2.42k|	PATH::hlineto (env, param);
  303|  2.42k|	process_post_path (op, env, param);
  304|  2.42k|	break;
  305|  1.97k|      case OpCode_vlineto:
  ------------------
  |  |  148|  1.97k|#define OpCode_vlineto		  7 /* CFF, CFF2 */
  ------------------
  |  Branch (305:7): [True: 1.97k, False: 125k]
  ------------------
  306|  1.97k|	PATH::vlineto (env, param);
  307|  1.97k|	process_post_path (op, env, param);
  308|  1.97k|	break;
  309|  2.12k|      case OpCode_rrcurveto:
  ------------------
  |  |  149|  2.12k|#define OpCode_rrcurveto	  8 /* CFF, CFF2 */
  ------------------
  |  Branch (309:7): [True: 2.12k, False: 125k]
  ------------------
  310|  2.12k|	PATH::rrcurveto (env, param);
  311|  2.12k|	process_post_path (op, env, param);
  312|  2.12k|	break;
  313|  1.00k|      case OpCode_rcurveline:
  ------------------
  |  |  165|  1.00k|#define OpCode_rcurveline	 24 /* CFF, CFF2 */
  ------------------
  |  Branch (313:7): [True: 1.00k, False: 126k]
  ------------------
  314|  1.00k|	PATH::rcurveline (env, param);
  315|  1.00k|	process_post_path (op, env, param);
  316|  1.00k|	break;
  317|  1.15k|      case OpCode_rlinecurve:
  ------------------
  |  |  166|  1.15k|#define OpCode_rlinecurve	 25 /* CFF, CFF2 */
  ------------------
  |  Branch (317:7): [True: 1.15k, False: 126k]
  ------------------
  318|  1.15k|	PATH::rlinecurve (env, param);
  319|  1.15k|	process_post_path (op, env, param);
  320|  1.15k|	break;
  321|  1.33k|      case OpCode_vvcurveto:
  ------------------
  |  |  167|  1.33k|#define OpCode_vvcurveto	 26 /* CFF, CFF2 */
  ------------------
  |  Branch (321:7): [True: 1.33k, False: 126k]
  ------------------
  322|  1.33k|	PATH::vvcurveto (env, param);
  323|  1.33k|	process_post_path (op, env, param);
  324|  1.33k|	break;
  325|    717|      case OpCode_hhcurveto:
  ------------------
  |  |  168|    717|#define OpCode_hhcurveto	 27 /* CFF, CFF2 */
  ------------------
  |  Branch (325:7): [True: 717, False: 127k]
  ------------------
  326|    717|	PATH::hhcurveto (env, param);
  327|    717|	process_post_path (op, env, param);
  328|    717|	break;
  329|  1.66k|      case OpCode_vhcurveto:
  ------------------
  |  |  171|  1.66k|#define OpCode_vhcurveto	 30 /* CFF, CFF2 */
  ------------------
  |  Branch (329:7): [True: 1.66k, False: 126k]
  ------------------
  330|  1.66k|	PATH::vhcurveto (env, param);
  331|  1.66k|	process_post_path (op, env, param);
  332|  1.66k|	break;
  333|  2.12k|      case OpCode_hvcurveto:
  ------------------
  |  |  172|  2.12k|#define OpCode_hvcurveto	 31 /* CFF, CFF2 */
  ------------------
  |  Branch (333:7): [True: 2.12k, False: 125k]
  ------------------
  334|  2.12k|	PATH::hvcurveto (env, param);
  335|  2.12k|	process_post_path (op, env, param);
  336|  2.12k|	break;
  337|       |
  338|     49|      case OpCode_hflex:
  ------------------
  |  |  211|     49|#define OpCode_hflex		Make_OpCode_ESC(34) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     49|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     49|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:7): [True: 49, False: 127k]
  ------------------
  339|     49|	PATH::hflex (env, param);
  340|     49|	OPSET::process_post_flex (op, env, param);
  341|     49|	break;
  342|       |
  343|     43|      case OpCode_flex:
  ------------------
  |  |  212|     43|#define OpCode_flex		Make_OpCode_ESC(35) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     43|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     43|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (343:7): [True: 43, False: 127k]
  ------------------
  344|     43|	PATH::flex (env, param);
  345|     43|	OPSET::process_post_flex (op, env, param);
  346|     43|	break;
  347|       |
  348|     24|      case OpCode_hflex1:
  ------------------
  |  |  213|     24|#define OpCode_hflex1		Make_OpCode_ESC(36) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     24|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     24|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (348:7): [True: 24, False: 127k]
  ------------------
  349|     24|	PATH::hflex1 (env, param);
  350|     24|	OPSET::process_post_flex (op, env, param);
  351|     24|	break;
  352|       |
  353|     98|      case OpCode_flex1:
  ------------------
  |  |  214|     98|#define OpCode_flex1		Make_OpCode_ESC(37) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     98|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     98|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (353:7): [True: 98, False: 127k]
  ------------------
  354|     98|	PATH::flex1 (env, param);
  355|     98|	OPSET::process_post_flex (op, env, param);
  356|     98|	break;
  357|       |
  358|  99.6k|      default:
  ------------------
  |  Branch (358:7): [True: 99.6k, False: 28.1k]
  ------------------
  359|  99.6k|	SUPER::process_op (op, env);
  360|  99.6k|	break;
  361|   127k|    }
  362|   127k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE13process_hstemEjRS3_RS4_:
  365|  1.02k|  {
  366|  1.02k|    env.hstem_count += env.argStack.get_count () / 2;
  367|  1.02k|    OPSET::flush_args_and_op (op, env, param);
  368|  1.02k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE13process_vstemEjRS3_RS4_:
  371|  1.76k|  {
  372|  1.76k|    env.vstem_count += env.argStack.get_count () / 2;
  373|  1.76k|    OPSET::flush_args_and_op (op, env, param);
  374|  1.76k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE16process_hintmaskEjRS3_RS4_:
  377|    602|  {
  378|    602|    env.determine_hintmask_size ();
  379|    602|    if (likely (env.str_ref.avail (env.hintmask_size)))
  ------------------
  |  |  258|    602|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 581, False: 21]
  |  |  ------------------
  ------------------
  380|    581|    {
  381|    581|      OPSET::flush_hintmask (op, env, param);
  382|    581|      env.str_ref.inc (env.hintmask_size);
  383|    581|    }
  384|    602|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE14flush_hintmaskEjRS3_RS4_:
  425|    581|  {
  426|    581|    OPSET::flush_args_and_op (op, env, param);
  427|    581|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7rmovetoERS2_RS3_:
  455|    698|  {
  456|    698|    point_t pt1 = env.get_pt ();
  457|    698|    const number_t &dy = env.pop_arg ();
  458|    698|    const number_t &dx = env.pop_arg ();
  459|    698|    pt1.move (dx, dy);
  460|    698|    PATH::moveto (env, param, pt1);
  461|    698|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE17process_post_moveEjRS3_RS4_:
  395|  3.71k|  {
  396|  3.71k|    if (!env.seen_moveto)
  ------------------
  |  Branch (396:9): [True: 0, False: 3.71k]
  ------------------
  397|      0|    {
  398|      0|      env.determine_hintmask_size ();
  399|      0|      env.seen_moveto = true;
  400|      0|    }
  401|  3.71k|    OPSET::flush_args_and_op (op, env, param);
  402|  3.71k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7hmovetoERS2_RS3_:
  464|    380|  {
  465|    380|    point_t pt1 = env.get_pt ();
  466|    380|    pt1.move_x (env.pop_arg ());
  467|    380|    PATH::moveto (env, param, pt1);
  468|    380|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7vmovetoERS2_RS3_:
  471|  2.63k|  {
  472|  2.63k|    point_t pt1 = env.get_pt ();
  473|  2.63k|    pt1.move_y (env.pop_arg ());
  474|  2.63k|    PATH::moveto (env, param, pt1);
  475|  2.63k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7rlinetoERS2_RS3_:
  478|    979|  {
  479|  3.30k|    for (unsigned int i = 0; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (479:30): [True: 2.32k, False: 979]
  ------------------
  480|  2.32k|    {
  481|  2.32k|      point_t pt1 = env.get_pt ();
  482|  2.32k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  483|  2.32k|      PATH::line (env, param, pt1);
  484|  2.32k|    }
  485|    979|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE17process_post_pathEjRS3_RS4_:
  405|  15.4k|  {
  406|  15.4k|    OPSET::flush_args_and_op (op, env, param);
  407|  15.4k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7hlinetoERS2_RS3_:
  488|  2.42k|  {
  489|  2.42k|    point_t pt1;
  490|  2.42k|    unsigned int i = 0;
  491|  5.03k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (491:12): [True: 2.61k, False: 2.42k]
  ------------------
  492|  2.61k|    {
  493|  2.61k|      pt1 = env.get_pt ();
  494|  2.61k|      pt1.move_x (env.eval_arg (i));
  495|  2.61k|      PATH::line (env, param, pt1);
  496|  2.61k|      pt1.move_y (env.eval_arg (i+1));
  497|  2.61k|      PATH::line (env, param, pt1);
  498|  2.61k|    }
  499|  2.42k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (499:9): [True: 1.07k, False: 1.34k]
  ------------------
  500|  1.07k|    {
  501|  1.07k|      pt1 = env.get_pt ();
  502|  1.07k|      pt1.move_x (env.eval_arg (i));
  503|  1.07k|      PATH::line (env, param, pt1);
  504|  1.07k|    }
  505|  2.42k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE7vlinetoERS2_RS3_:
  508|  1.97k|  {
  509|  1.97k|    point_t pt1;
  510|  1.97k|    unsigned int i = 0;
  511|  4.50k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (511:12): [True: 2.52k, False: 1.97k]
  ------------------
  512|  2.52k|    {
  513|  2.52k|      pt1 = env.get_pt ();
  514|  2.52k|      pt1.move_y (env.eval_arg (i));
  515|  2.52k|      PATH::line (env, param, pt1);
  516|  2.52k|      pt1.move_x (env.eval_arg (i+1));
  517|  2.52k|      PATH::line (env, param, pt1);
  518|  2.52k|    }
  519|  1.97k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (519:9): [True: 946, False: 1.02k]
  ------------------
  520|    946|    {
  521|    946|      pt1 = env.get_pt ();
  522|    946|      pt1.move_y (env.eval_arg (i));
  523|    946|      PATH::line (env, param, pt1);
  524|    946|    }
  525|  1.97k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE9rrcurvetoERS2_RS3_:
  528|  2.12k|  {
  529|  2.82k|    for (unsigned int i = 0; i + 6 <= env.argStack.get_count (); i += 6)
  ------------------
  |  Branch (529:30): [True: 696, False: 2.12k]
  ------------------
  530|    696|    {
  531|    696|      point_t pt1 = env.get_pt ();
  532|    696|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  533|    696|      point_t pt2 = pt1;
  534|    696|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  535|    696|      point_t pt3 = pt2;
  536|    696|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  537|    696|      PATH::curve (env, param, pt1, pt2, pt3);
  538|    696|    }
  539|  2.12k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE10rcurvelineERS2_RS3_:
  542|  1.00k|  {
  543|  1.00k|    unsigned int arg_count = env.argStack.get_count ();
  544|  1.00k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 711, False: 290]
  |  |  ------------------
  ------------------
  545|    711|      return;
  546|       |
  547|    290|    unsigned int i = 0;
  548|    290|    unsigned int curve_limit = arg_count - 2;
  549|    949|    for (; i + 6 <= curve_limit; i += 6)
  ------------------
  |  Branch (549:12): [True: 659, False: 290]
  ------------------
  550|    659|    {
  551|    659|      point_t pt1 = env.get_pt ();
  552|    659|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  553|    659|      point_t pt2 = pt1;
  554|    659|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  555|    659|      point_t pt3 = pt2;
  556|    659|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  557|    659|      PATH::curve (env, param, pt1, pt2, pt3);
  558|    659|    }
  559|       |
  560|    290|    point_t pt1 = env.get_pt ();
  561|    290|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  562|    290|    PATH::line (env, param, pt1);
  563|    290|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE10rlinecurveERS2_RS3_:
  566|  1.15k|  {
  567|  1.15k|    unsigned int arg_count = env.argStack.get_count ();
  568|  1.15k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 840, False: 314]
  |  |  ------------------
  ------------------
  569|    840|      return;
  570|       |
  571|    314|    unsigned int i = 0;
  572|    314|    unsigned int line_limit = arg_count - 6;
  573|  1.80k|    for (; i + 2 <= line_limit; i += 2)
  ------------------
  |  Branch (573:12): [True: 1.49k, False: 314]
  ------------------
  574|  1.49k|    {
  575|  1.49k|      point_t pt1 = env.get_pt ();
  576|  1.49k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  577|  1.49k|      PATH::line (env, param, pt1);
  578|  1.49k|    }
  579|       |
  580|    314|    point_t pt1 = env.get_pt ();
  581|    314|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  582|    314|    point_t pt2 = pt1;
  583|    314|    pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  584|    314|    point_t pt3 = pt2;
  585|    314|    pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  586|    314|    PATH::curve (env, param, pt1, pt2, pt3);
  587|    314|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE9vvcurvetoERS2_RS3_:
  590|  1.33k|  {
  591|  1.33k|    unsigned int i = 0;
  592|  1.33k|    point_t pt1 = env.get_pt ();
  593|  1.33k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (593:9): [True: 237, False: 1.09k]
  ------------------
  594|    237|      pt1.move_x (env.eval_arg (i++));
  595|  2.37k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (595:12): [True: 1.04k, False: 1.33k]
  ------------------
  596|  1.04k|    {
  597|  1.04k|      pt1.move_y (env.eval_arg (i));
  598|  1.04k|      point_t pt2 = pt1;
  599|  1.04k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  600|  1.04k|      point_t pt3 = pt2;
  601|  1.04k|      pt3.move_y (env.eval_arg (i+3));
  602|  1.04k|      PATH::curve (env, param, pt1, pt2, pt3);
  603|  1.04k|      pt1 = env.get_pt ();
  604|  1.04k|    }
  605|  1.33k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE9hhcurvetoERS2_RS3_:
  608|    717|  {
  609|    717|    unsigned int i = 0;
  610|    717|    point_t pt1 = env.get_pt ();
  611|    717|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (611:9): [True: 195, False: 522]
  ------------------
  612|    195|      pt1.move_y (env.eval_arg (i++));
  613|  1.54k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (613:12): [True: 823, False: 717]
  ------------------
  614|    823|    {
  615|    823|      pt1.move_x (env.eval_arg (i));
  616|    823|      point_t pt2 = pt1;
  617|    823|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  618|    823|      point_t pt3 = pt2;
  619|    823|      pt3.move_x (env.eval_arg (i+3));
  620|    823|      PATH::curve (env, param, pt1, pt2, pt3);
  621|    823|      pt1 = env.get_pt ();
  622|    823|    }
  623|    717|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE9vhcurvetoERS2_RS3_:
  626|  1.66k|  {
  627|  1.66k|    point_t pt1, pt2, pt3;
  628|  1.66k|    unsigned int i = 0;
  629|  1.66k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (629:9): [True: 380, False: 1.28k]
  ------------------
  630|    380|    {
  631|    380|      point_t pt1 = env.get_pt ();
  632|    380|      pt1.move_y (env.eval_arg (i));
  633|    380|      point_t pt2 = pt1;
  634|    380|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  635|    380|      point_t pt3 = pt2;
  636|    380|      pt3.move_x (env.eval_arg (i+3));
  637|    380|      i += 4;
  638|       |
  639|    860|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (639:14): [True: 480, False: 380]
  ------------------
  640|    480|      {
  641|    480|	PATH::curve (env, param, pt1, pt2, pt3);
  642|    480|	pt1 = env.get_pt ();
  643|    480|	pt1.move_x (env.eval_arg (i));
  644|    480|	pt2 = pt1;
  645|    480|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  646|    480|	pt3 = pt2;
  647|    480|	pt3.move_y (env.eval_arg (i+3));
  648|    480|	PATH::curve (env, param, pt1, pt2, pt3);
  649|       |
  650|    480|	pt1 = pt3;
  651|    480|	pt1.move_y (env.eval_arg (i+4));
  652|    480|	pt2 = pt1;
  653|    480|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  654|    480|	pt3 = pt2;
  655|    480|	pt3.move_x (env.eval_arg (i+7));
  656|    480|      }
  657|    380|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (657:11): [True: 250, False: 130]
  ------------------
  658|    250|	pt3.move_y (env.eval_arg (i));
  659|    380|      PATH::curve (env, param, pt1, pt2, pt3);
  660|    380|    }
  661|  1.28k|    else
  662|  1.28k|    {
  663|  2.06k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (663:14): [True: 778, False: 1.28k]
  ------------------
  664|    778|      {
  665|    778|	pt1 = env.get_pt ();
  666|    778|	pt1.move_y (env.eval_arg (i));
  667|    778|	pt2 = pt1;
  668|    778|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  669|    778|	pt3 = pt2;
  670|    778|	pt3.move_x (env.eval_arg (i+3));
  671|    778|	PATH::curve (env, param, pt1, pt2, pt3);
  672|       |
  673|    778|	pt1 = pt3;
  674|    778|	pt1.move_x (env.eval_arg (i+4));
  675|    778|	pt2 = pt1;
  676|    778|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  677|    778|	pt3 = pt2;
  678|    778|	pt3.move_y (env.eval_arg (i+7));
  679|    778|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (679:6): [True: 273, False: 505]
  |  Branch (679:46): [True: 114, False: 159]
  ------------------
  680|    114|	  pt3.move_x (env.eval_arg (i+8));
  681|    778|	PATH::curve (env, param, pt1, pt2, pt3);
  682|    778|      }
  683|  1.28k|    }
  684|  1.66k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE9hvcurvetoERS2_RS3_:
  687|  2.12k|  {
  688|  2.12k|    point_t pt1, pt2, pt3;
  689|  2.12k|    unsigned int i = 0;
  690|  2.12k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (690:9): [True: 476, False: 1.64k]
  ------------------
  691|    476|    {
  692|    476|      point_t pt1 = env.get_pt ();
  693|    476|      pt1.move_x (env.eval_arg (i));
  694|    476|      point_t pt2 = pt1;
  695|    476|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  696|    476|      point_t pt3 = pt2;
  697|    476|      pt3.move_y (env.eval_arg (i+3));
  698|    476|      i += 4;
  699|       |
  700|  1.04k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (700:14): [True: 567, False: 476]
  ------------------
  701|    567|      {
  702|    567|	PATH::curve (env, param, pt1, pt2, pt3);
  703|    567|	pt1 = env.get_pt ();
  704|    567|	pt1.move_y (env.eval_arg (i));
  705|    567|	pt2 = pt1;
  706|    567|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  707|    567|	pt3 = pt2;
  708|    567|	pt3.move_x (env.eval_arg (i+3));
  709|    567|	PATH::curve (env, param, pt1, pt2, pt3);
  710|       |
  711|    567|	pt1 = pt3;
  712|    567|	pt1.move_x (env.eval_arg (i+4));
  713|    567|	pt2 = pt1;
  714|    567|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  715|    567|	pt3 = pt2;
  716|    567|	pt3.move_y (env.eval_arg (i+7));
  717|    567|      }
  718|    476|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (718:11): [True: 338, False: 138]
  ------------------
  719|    338|	pt3.move_x (env.eval_arg (i));
  720|    476|      PATH::curve (env, param, pt1, pt2, pt3);
  721|    476|    }
  722|  1.64k|    else
  723|  1.64k|    {
  724|  2.39k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (724:14): [True: 752, False: 1.64k]
  ------------------
  725|    752|      {
  726|    752|	pt1 = env.get_pt ();
  727|    752|	pt1.move_x (env.eval_arg (i));
  728|    752|	pt2 = pt1;
  729|    752|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  730|    752|	pt3 = pt2;
  731|    752|	pt3.move_y (env.eval_arg (i+3));
  732|    752|	PATH::curve (env, param, pt1, pt2, pt3);
  733|       |
  734|    752|	pt1 = pt3;
  735|    752|	pt1.move_y (env.eval_arg (i+4));
  736|    752|	pt2 = pt1;
  737|    752|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  738|    752|	pt3 = pt2;
  739|    752|	pt3.move_x (env.eval_arg (i+7));
  740|    752|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (740:6): [True: 340, False: 412]
  |  Branch (740:46): [True: 161, False: 179]
  ------------------
  741|    161|	  pt3.move_y (env.eval_arg (i+8));
  742|    752|	PATH::curve (env, param, pt1, pt2, pt3);
  743|    752|      }
  744|  1.64k|    }
  745|  2.12k|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE5hflexERS2_RS3_:
  758|     49|  {
  759|     49|    if (likely (env.argStack.get_count () == 7))
  ------------------
  |  |  258|     49|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 45, False: 4]
  |  |  ------------------
  ------------------
  760|     45|    {
  761|     45|      point_t pt1 = env.get_pt ();
  762|     45|      pt1.move_x (env.eval_arg (0));
  763|     45|      point_t pt2 = pt1;
  764|     45|      pt2.move (env.eval_arg (1), env.eval_arg (2));
  765|     45|      point_t pt3 = pt2;
  766|     45|      pt3.move_x (env.eval_arg (3));
  767|     45|      point_t pt4 = pt3;
  768|     45|      pt4.move_x (env.eval_arg (4));
  769|     45|      point_t pt5 = pt4;
  770|     45|      pt5.move_x (env.eval_arg (5));
  771|     45|      pt5.y = pt1.y;
  772|     45|      point_t pt6 = pt5;
  773|     45|      pt6.move_x (env.eval_arg (6));
  774|       |
  775|     45|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  776|     45|    }
  777|      4|    else
  778|      4|      env.set_error ();
  779|     49|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE6curve2ERS2_RS3_RKNS_7point_tES9_S9_S9_S9_S9_:
  869|    197|  {
  870|    197|    PATH::curve (env, param, pt1, pt2, pt3);
  871|    197|    PATH::curve (env, param, pt4, pt5, pt6);
  872|    197|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff1_cs_opset_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_t22cff1_path_procs_path_tE17process_post_flexEjRS3_RS4_:
  387|    214|  {
  388|    214|    OPSET::flush_args_and_op (op, env, param);
  389|    214|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE4flexERS2_RS3_:
  782|     43|  {
  783|     43|    if (likely (env.argStack.get_count () == 13))
  ------------------
  |  |  258|     43|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 42, False: 1]
  |  |  ------------------
  ------------------
  784|     42|    {
  785|     42|      point_t pt1 = env.get_pt ();
  786|     42|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  787|     42|      point_t pt2 = pt1;
  788|     42|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  789|     42|      point_t pt3 = pt2;
  790|     42|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  791|     42|      point_t pt4 = pt3;
  792|     42|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  793|     42|      point_t pt5 = pt4;
  794|     42|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  795|     42|      point_t pt6 = pt5;
  796|     42|      pt6.move (env.eval_arg (10), env.eval_arg (11));
  797|       |
  798|     42|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  799|     42|    }
  800|      1|    else
  801|      1|      env.set_error ();
  802|     43|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE6hflex1ERS2_RS3_:
  805|     24|  {
  806|     24|    if (likely (env.argStack.get_count () == 9))
  ------------------
  |  |  258|     24|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 17, False: 7]
  |  |  ------------------
  ------------------
  807|     17|    {
  808|     17|      point_t pt1 = env.get_pt ();
  809|     17|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  810|     17|      point_t pt2 = pt1;
  811|     17|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  812|     17|      point_t pt3 = pt2;
  813|     17|      pt3.move_x (env.eval_arg (4));
  814|     17|      point_t pt4 = pt3;
  815|     17|      pt4.move_x (env.eval_arg (5));
  816|     17|      point_t pt5 = pt4;
  817|     17|      pt5.move (env.eval_arg (6), env.eval_arg (7));
  818|     17|      point_t pt6 = pt5;
  819|     17|      pt6.move_x (env.eval_arg (8));
  820|     17|      pt6.y = env.get_pt ().y;
  821|       |
  822|     17|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  823|     17|    }
  824|      7|    else
  825|      7|      env.set_error ();
  826|     24|  }
_ZN3CFF12path_procs_tI22cff1_path_procs_path_tNS_20cff1_cs_interp_env_tE17cff1_path_param_tE5flex1ERS2_RS3_:
  829|     98|  {
  830|     98|    if (likely (env.argStack.get_count () == 11))
  ------------------
  |  |  258|     98|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 93, False: 5]
  |  |  ------------------
  ------------------
  831|     93|    {
  832|     93|      point_t d;
  833|    558|      for (unsigned int i = 0; i < 10; i += 2)
  ------------------
  |  Branch (833:32): [True: 465, False: 93]
  ------------------
  834|    465|	d.move (env.eval_arg (i), env.eval_arg (i+1));
  835|       |
  836|     93|      point_t pt1 = env.get_pt ();
  837|     93|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  838|     93|      point_t pt2 = pt1;
  839|     93|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  840|     93|      point_t pt3 = pt2;
  841|     93|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  842|     93|      point_t pt4 = pt3;
  843|     93|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  844|     93|      point_t pt5 = pt4;
  845|     93|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  846|     93|      point_t pt6 = pt5;
  847|       |
  848|     93|      if (fabs (d.x.to_real ()) > fabs (d.y.to_real ()))
  ------------------
  |  Branch (848:11): [True: 27, False: 66]
  ------------------
  849|     27|      {
  850|     27|	pt6.move_x (env.eval_arg (10));
  851|     27|	pt6.y = env.get_pt ().y;
  852|     27|      }
  853|     66|      else
  854|     66|      {
  855|     66|	pt6.x = env.get_pt ().x;
  856|     66|	pt6.move_y (env.eval_arg (10));
  857|     66|      }
  858|       |
  859|     93|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  860|     93|    }
  861|      5|    else
  862|      5|      env.set_error ();
  863|     98|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEED2Ev:
  129|   274k|  {
  130|   274k|    globalSubrs.fini ();
  131|   274k|    localSubrs.fini ();
  132|   274k|  }
_ZN3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeItLj2EEEEEE4finiEv:
   77|   549k|  void fini () {}
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeItLj2EEEEEEC2ERK10hb_array_tIKhEPKS6_SE_:
  117|   274k|  {
  118|   274k|    context.init (str, CSType_CharString);
  119|   274k|    seen_moveto = true;
  120|   274k|    seen_hintmask = false;
  121|   274k|    hstem_count = 0;
  122|   274k|    vstem_count = 0;
  123|   274k|    hintmask_size = 0;
  124|   274k|    pt.set_int (0, 0);
  125|   274k|    globalSubrs.init (globalSubrs_);
  126|   274k|    localSubrs.init (localSubrs_);
  127|   274k|  }
_ZN3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeItLj2EEEEEE4initEPKS5_:
   66|   549k|  {
   67|   549k|    subrs = subrs_;
   68|   549k|    unsigned int  nSubrs = get_count ();
   69|   549k|    if (nSubrs < 1240)
  ------------------
  |  Branch (69:9): [True: 530k, False: 18.7k]
  ------------------
   70|   530k|      bias = 107;
   71|  18.7k|    else if (nSubrs < 33900)
  ------------------
  |  Branch (71:14): [True: 37, False: 18.7k]
  ------------------
   72|     37|      bias = 1131;
   73|  18.7k|    else
   74|  18.7k|      bias = 32768;
   75|   549k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEED2Ev:
  129|  12.0k|  {
  130|  12.0k|    globalSubrs.fini ();
  131|  12.0k|    localSubrs.fini ();
  132|  12.0k|  }
_ZN3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeIjLj4EEEEEE4finiEv:
   77|  24.1k|  void fini () {}
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEEC2ERK10hb_array_tIKhEPKS6_SE_:
  117|  12.0k|  {
  118|  12.0k|    context.init (str, CSType_CharString);
  119|  12.0k|    seen_moveto = true;
  120|  12.0k|    seen_hintmask = false;
  121|  12.0k|    hstem_count = 0;
  122|  12.0k|    vstem_count = 0;
  123|  12.0k|    hintmask_size = 0;
  124|  12.0k|    pt.set_int (0, 0);
  125|  12.0k|    globalSubrs.init (globalSubrs_);
  126|  12.0k|    localSubrs.init (localSubrs_);
  127|  12.0k|  }
_ZN3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeIjLj4EEEEEE4initEPKS5_:
   66|  24.1k|  {
   67|  24.1k|    subrs = subrs_;
   68|  24.1k|    unsigned int  nSubrs = get_count ();
   69|  24.1k|    if (nSubrs < 1240)
  ------------------
  |  Branch (69:9): [True: 24.0k, False: 36]
  ------------------
   70|  24.0k|      bias = 107;
   71|     36|    else if (nSubrs < 33900)
  ------------------
  |  Branch (71:14): [True: 21, False: 15]
  ------------------
   72|     21|      bias = 1131;
   73|     15|    else
   74|     15|      bias = 32768;
   75|  24.1k|  }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeIjLj4EEEEEE9get_countEv:
   79|  59.3k|  unsigned int get_count () const { return subrs ? subrs->count : 0; }
  ------------------
  |  Branch (79:44): [True: 54.1k, False: 5.20k]
  ------------------
_ZN3CFF16cs_interpreter_tINS_20cff2_cs_interp_env_tINS_8number_tEEE23cff2_cs_opset_extents_t20cff2_extents_param_tEC2ERS3_:
  878|  1.37k|  cs_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF16cs_interpreter_tINS_20cff2_cs_interp_env_tINS_8number_tEEE23cff2_cs_opset_extents_t20cff2_extents_param_tE9interpretERS5_:
  881|  1.37k|  {
  882|  1.37k|    SUPER::env.set_endchar (false);
  883|       |
  884|  1.37k|    unsigned max_ops = HB_CFF_MAX_OPS;
  ------------------
  |  |  105|  1.37k|#define HB_CFF_MAX_OPS 10000
  ------------------
  885|   959k|    for (;;) {
  886|   959k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  887|   959k|      if (unlikely (SUPER::env.in_error () || !--max_ops))
  ------------------
  |  |  259|  1.91M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 991, False: 958k]
  |  |  |  Branch (259:47): [True: 941, False: 958k]
  |  |  |  Branch (259:47): [True: 50, False: 958k]
  |  |  ------------------
  ------------------
  888|    991|      {
  889|    991|	SUPER::env.set_error ();
  890|    991|	return false;
  891|    991|      }
  892|   958k|      if (SUPER::env.is_endchar ())
  ------------------
  |  Branch (892:11): [True: 388, False: 957k]
  ------------------
  893|    388|	break;
  894|   958k|    }
  895|       |
  896|    388|    return true;
  897|  1.37k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE11set_endcharEb:
  186|  15.8k|  void set_endchar (bool endchar_flag_) { endchar_flag = endchar_flag_; }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE10process_opEjRS4_RS5_:
  243|   956k|  {
  244|   956k|    switch (op) {
  245|       |
  246|  16.1k|      case OpCode_return:
  ------------------
  |  |  152|  16.1k|#define OpCode_return		 11 /* CFF */
  ------------------
  |  Branch (246:7): [True: 16.1k, False: 940k]
  ------------------
  247|  16.1k|	env.return_from_subr ();
  248|  16.1k|	break;
  249|    388|      case OpCode_endchar:
  ------------------
  |  |  155|    388|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (249:7): [True: 388, False: 956k]
  ------------------
  250|    388|	OPSET::check_width (op, env, param);
  251|    388|	env.set_endchar (true);
  252|    388|	OPSET::flush_args_and_op (op, env, param);
  253|    388|	break;
  254|       |
  255|  27.9k|      case OpCode_fixedcs:
  ------------------
  |  |  174|  27.9k|#define OpCode_fixedcs		255 /* 32-bit fixed */
  ------------------
  |  Branch (255:7): [True: 27.9k, False: 929k]
  ------------------
  256|  27.9k|	env.argStack.push_fixed_from_substr (env.str_ref);
  257|  27.9k|	break;
  258|       |
  259|    334|      case OpCode_callsubr:
  ------------------
  |  |  151|    334|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (259:7): [True: 334, False: 956k]
  ------------------
  260|    334|	env.call_subr (env.localSubrs, CSType_LocalSubr);
  261|    334|	break;
  262|       |
  263|  18.1k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  18.1k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (263:7): [True: 18.1k, False: 938k]
  ------------------
  264|  18.1k|	env.call_subr (env.globalSubrs, CSType_GlobalSubr);
  265|  18.1k|	break;
  266|       |
  267|  6.74k|      case OpCode_hstem:
  ------------------
  |  |  142|  6.74k|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (267:7): [True: 6.74k, False: 950k]
  ------------------
  268|  17.1k|      case OpCode_hstemhm:
  ------------------
  |  |  159|  17.1k|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (268:7): [True: 10.3k, False: 946k]
  ------------------
  269|  17.1k|	OPSET::check_width (op, env, param);
  270|  17.1k|	OPSET::process_hstem (op, env, param);
  271|  17.1k|	break;
  272|  2.72k|      case OpCode_vstem:
  ------------------
  |  |  144|  2.72k|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (272:7): [True: 2.72k, False: 954k]
  ------------------
  273|  5.87k|      case OpCode_vstemhm:
  ------------------
  |  |  164|  5.87k|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (273:7): [True: 3.15k, False: 953k]
  ------------------
  274|  5.87k|	OPSET::check_width (op, env, param);
  275|  5.87k|	OPSET::process_vstem (op, env, param);
  276|  5.87k|	break;
  277|  2.71k|      case OpCode_hintmask:
  ------------------
  |  |  160|  2.71k|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (277:7): [True: 2.71k, False: 954k]
  ------------------
  278|  3.88k|      case OpCode_cntrmask:
  ------------------
  |  |  161|  3.88k|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (278:7): [True: 1.16k, False: 955k]
  ------------------
  279|  3.88k|	OPSET::check_width (op, env, param);
  280|  3.88k|	OPSET::process_hintmask (op, env, param);
  281|  3.88k|	break;
  282|  1.93k|      case OpCode_rmoveto:
  ------------------
  |  |  162|  1.93k|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (282:7): [True: 1.93k, False: 955k]
  ------------------
  283|  1.93k|	OPSET::check_width (op, env, param);
  284|  1.93k|	PATH::rmoveto (env, param);
  285|  1.93k|	OPSET::process_post_move (op, env, param);
  286|  1.93k|	break;
  287|  8.57k|      case OpCode_hmoveto:
  ------------------
  |  |  163|  8.57k|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (287:7): [True: 8.57k, False: 948k]
  ------------------
  288|  8.57k|	OPSET::check_width (op, env, param);
  289|  8.57k|	PATH::hmoveto (env, param);
  290|  8.57k|	OPSET::process_post_move (op, env, param);
  291|  8.57k|	break;
  292|  12.0k|      case OpCode_vmoveto:
  ------------------
  |  |  145|  12.0k|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (292:7): [True: 12.0k, False: 944k]
  ------------------
  293|  12.0k|	OPSET::check_width (op, env, param);
  294|  12.0k|	PATH::vmoveto (env, param);
  295|  12.0k|	OPSET::process_post_move (op, env, param);
  296|  12.0k|	break;
  297|  5.87k|      case OpCode_rlineto:
  ------------------
  |  |  146|  5.87k|#define OpCode_rlineto		  5 /* CFF, CFF2 */
  ------------------
  |  Branch (297:7): [True: 5.87k, False: 951k]
  ------------------
  298|  5.87k|	PATH::rlineto (env, param);
  299|  5.87k|	process_post_path (op, env, param);
  300|  5.87k|	break;
  301|  9.30k|      case OpCode_hlineto:
  ------------------
  |  |  147|  9.30k|#define OpCode_hlineto		  6 /* CFF, CFF2 */
  ------------------
  |  Branch (301:7): [True: 9.30k, False: 947k]
  ------------------
  302|  9.30k|	PATH::hlineto (env, param);
  303|  9.30k|	process_post_path (op, env, param);
  304|  9.30k|	break;
  305|   104k|      case OpCode_vlineto:
  ------------------
  |  |  148|   104k|#define OpCode_vlineto		  7 /* CFF, CFF2 */
  ------------------
  |  Branch (305:7): [True: 104k, False: 852k]
  ------------------
  306|   104k|	PATH::vlineto (env, param);
  307|   104k|	process_post_path (op, env, param);
  308|   104k|	break;
  309|  8.37k|      case OpCode_rrcurveto:
  ------------------
  |  |  149|  8.37k|#define OpCode_rrcurveto	  8 /* CFF, CFF2 */
  ------------------
  |  Branch (309:7): [True: 8.37k, False: 948k]
  ------------------
  310|  8.37k|	PATH::rrcurveto (env, param);
  311|  8.37k|	process_post_path (op, env, param);
  312|  8.37k|	break;
  313|  3.13k|      case OpCode_rcurveline:
  ------------------
  |  |  165|  3.13k|#define OpCode_rcurveline	 24 /* CFF, CFF2 */
  ------------------
  |  Branch (313:7): [True: 3.13k, False: 953k]
  ------------------
  314|  3.13k|	PATH::rcurveline (env, param);
  315|  3.13k|	process_post_path (op, env, param);
  316|  3.13k|	break;
  317|  6.20k|      case OpCode_rlinecurve:
  ------------------
  |  |  166|  6.20k|#define OpCode_rlinecurve	 25 /* CFF, CFF2 */
  ------------------
  |  Branch (317:7): [True: 6.20k, False: 950k]
  ------------------
  318|  6.20k|	PATH::rlinecurve (env, param);
  319|  6.20k|	process_post_path (op, env, param);
  320|  6.20k|	break;
  321|  3.81k|      case OpCode_vvcurveto:
  ------------------
  |  |  167|  3.81k|#define OpCode_vvcurveto	 26 /* CFF, CFF2 */
  ------------------
  |  Branch (321:7): [True: 3.81k, False: 953k]
  ------------------
  322|  3.81k|	PATH::vvcurveto (env, param);
  323|  3.81k|	process_post_path (op, env, param);
  324|  3.81k|	break;
  325|  1.55k|      case OpCode_hhcurveto:
  ------------------
  |  |  168|  1.55k|#define OpCode_hhcurveto	 27 /* CFF, CFF2 */
  ------------------
  |  Branch (325:7): [True: 1.55k, False: 955k]
  ------------------
  326|  1.55k|	PATH::hhcurveto (env, param);
  327|  1.55k|	process_post_path (op, env, param);
  328|  1.55k|	break;
  329|  4.53k|      case OpCode_vhcurveto:
  ------------------
  |  |  171|  4.53k|#define OpCode_vhcurveto	 30 /* CFF, CFF2 */
  ------------------
  |  Branch (329:7): [True: 4.53k, False: 952k]
  ------------------
  330|  4.53k|	PATH::vhcurveto (env, param);
  331|  4.53k|	process_post_path (op, env, param);
  332|  4.53k|	break;
  333|  3.37k|      case OpCode_hvcurveto:
  ------------------
  |  |  172|  3.37k|#define OpCode_hvcurveto	 31 /* CFF, CFF2 */
  ------------------
  |  Branch (333:7): [True: 3.37k, False: 953k]
  ------------------
  334|  3.37k|	PATH::hvcurveto (env, param);
  335|  3.37k|	process_post_path (op, env, param);
  336|  3.37k|	break;
  337|       |
  338|     78|      case OpCode_hflex:
  ------------------
  |  |  211|     78|#define OpCode_hflex		Make_OpCode_ESC(34) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     78|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     78|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:7): [True: 78, False: 956k]
  ------------------
  339|     78|	PATH::hflex (env, param);
  340|     78|	OPSET::process_post_flex (op, env, param);
  341|     78|	break;
  342|       |
  343|     44|      case OpCode_flex:
  ------------------
  |  |  212|     44|#define OpCode_flex		Make_OpCode_ESC(35) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     44|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     44|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (343:7): [True: 44, False: 956k]
  ------------------
  344|     44|	PATH::flex (env, param);
  345|     44|	OPSET::process_post_flex (op, env, param);
  346|     44|	break;
  347|       |
  348|    122|      case OpCode_hflex1:
  ------------------
  |  |  213|    122|#define OpCode_hflex1		Make_OpCode_ESC(36) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    122|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    122|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (348:7): [True: 122, False: 956k]
  ------------------
  349|    122|	PATH::hflex1 (env, param);
  350|    122|	OPSET::process_post_flex (op, env, param);
  351|    122|	break;
  352|       |
  353|    467|      case OpCode_flex1:
  ------------------
  |  |  214|    467|#define OpCode_flex1		Make_OpCode_ESC(37) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    467|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    467|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (353:7): [True: 467, False: 956k]
  ------------------
  354|    467|	PATH::flex1 (env, param);
  355|    467|	OPSET::process_post_flex (op, env, param);
  356|    467|	break;
  357|       |
  358|   692k|      default:
  ------------------
  |  Branch (358:7): [True: 692k, False: 264k]
  ------------------
  359|   692k|	SUPER::process_op (op, env);
  360|   692k|	break;
  361|   956k|    }
  362|   956k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE16return_from_subrEv:
  169|  30.6k|  {
  170|  30.6k|    if (unlikely (SUPER::str_ref.in_error ()))
  ------------------
  |  |  259|  30.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 30.6k]
  |  |  ------------------
  ------------------
  171|      0|      SUPER::set_error ();
  172|  30.6k|    context = callStack.pop ();
  173|  30.6k|    SUPER::str_ref = context.str_ref;
  174|  30.6k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE11check_widthEjRS4_RS5_:
  392|  49.8k|  {}
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE17flush_args_and_opEjRS4_RS5_:
  410|   200k|  {
  411|   200k|    OPSET::flush_args (env, param);
  412|   200k|    OPSET::flush_op (op, env, param);
  413|   200k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE10flush_argsERS4_RS5_:
  416|   200k|  {
  417|   200k|    env.pop_n_args (env.argStack.get_count ());
  418|   200k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE8flush_opEjRS4_RS5_:
  421|   200k|  {
  422|   200k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE9call_subrERKNS_14biased_subrs_tIS6_EENS_9cs_type_tE:
  152|  35.2k|  {
  153|  35.2k|    unsigned int subr_num = 0;
  154|       |
  155|  35.2k|    if (unlikely (!pop_subr_num (biasedSubrs, subr_num)
  ------------------
  |  |  259|  69.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 934, False: 34.3k]
  |  |  |  Branch (259:47): [True: 714, False: 34.5k]
  |  |  |  Branch (259:47): [True: 220, False: 34.3k]
  |  |  ------------------
  ------------------
  156|  35.2k|		 || callStack.get_count () >= kMaxCallLimit))
  157|    934|    {
  158|    934|      SUPER::set_error ();
  159|    934|      return;
  160|    934|    }
  161|  34.3k|    context.str_ref = SUPER::str_ref;
  162|  34.3k|    callStack.push (context);
  163|       |
  164|  34.3k|    context.init ( biasedSubrs[subr_num], type, subr_num);
  165|  34.3k|    SUPER::str_ref = context.str_ref;
  166|  34.3k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE12pop_subr_numERKNS_14biased_subrs_tIS6_EERj:
  140|  35.2k|  {
  141|  35.2k|    subr_num = 0;
  142|  35.2k|    int n = SUPER::argStack.pop_int ();
  143|  35.2k|    n += biasedSubrs.get_bias ();
  144|  35.2k|    if (unlikely ((n < 0) || ((unsigned int)n >= biasedSubrs.get_count ())))
  ------------------
  |  |  259|  70.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 714, False: 34.5k]
  |  |  |  Branch (259:47): [True: 21, False: 35.2k]
  |  |  |  Branch (259:47): [True: 693, False: 34.5k]
  |  |  ------------------
  ------------------
  145|    714|      return false;
  146|       |
  147|  34.5k|    subr_num = (unsigned int)n;
  148|  34.5k|    return true;
  149|  35.2k|  }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeIjLj4EEEEEE8get_biasEv:
   80|  35.2k|  unsigned int get_bias () const  { return bias; }
_ZNK3CFF14biased_subrs_tINS_5SubrsIN2OT7IntTypeIjLj4EEEEEEixEj:
   83|  34.3k|  {
   84|  34.3k|    if (unlikely (!subrs || index >= subrs->count))
  ------------------
  |  |  259|  68.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 34.3k]
  |  |  |  Branch (259:47): [True: 0, False: 34.3k]
  |  |  |  Branch (259:47): [True: 0, False: 34.3k]
  |  |  ------------------
  ------------------
   85|      0|      return hb_ubytes_t ();
   86|  34.3k|    else
   87|  34.3k|      return (*subrs)[index];
   88|  34.3k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE13process_hstemEjRS4_RS5_:
  365|  17.1k|  {
  366|  17.1k|    env.hstem_count += env.argStack.get_count () / 2;
  367|  17.1k|    OPSET::flush_args_and_op (op, env, param);
  368|  17.1k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE13process_vstemEjRS4_RS5_:
  371|  5.87k|  {
  372|  5.87k|    env.vstem_count += env.argStack.get_count () / 2;
  373|  5.87k|    OPSET::flush_args_and_op (op, env, param);
  374|  5.87k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE16process_hintmaskEjRS4_RS5_:
  377|  3.88k|  {
  378|  3.88k|    env.determine_hintmask_size ();
  379|  3.88k|    if (likely (env.str_ref.avail (env.hintmask_size)))
  ------------------
  |  |  258|  3.88k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.21k, False: 663]
  |  |  ------------------
  ------------------
  380|  3.21k|    {
  381|  3.21k|      OPSET::flush_hintmask (op, env, param);
  382|  3.21k|      env.str_ref.inc (env.hintmask_size);
  383|  3.21k|    }
  384|  3.88k|  }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE23determine_hintmask_sizeEv:
  177|  6.17k|  {
  178|  6.17k|    if (!seen_hintmask)
  ------------------
  |  Branch (178:9): [True: 970, False: 5.20k]
  ------------------
  179|    970|    {
  180|    970|      vstem_count += SUPER::argStack.get_count() / 2;
  181|    970|      hintmask_size = (hstem_count + vstem_count + 7) >> 3;
  182|    970|      seen_hintmask = true;
  183|    970|    }
  184|  6.17k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE14flush_hintmaskEjRS4_RS5_:
  425|  3.21k|  {
  426|  3.21k|    OPSET::flush_args_and_op (op, env, param);
  427|  3.21k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7rmovetoERS4_RS5_:
  455|  1.93k|  {
  456|  1.93k|    point_t pt1 = env.get_pt ();
  457|  1.93k|    const number_t &dy = env.pop_arg ();
  458|  1.93k|    const number_t &dx = env.pop_arg ();
  459|  1.93k|    pt1.move (dx, dy);
  460|  1.93k|    PATH::moveto (env, param, pt1);
  461|  1.93k|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE6get_ptEv:
  191|   393k|  const point_t &get_pt () const { return pt; }
_ZN3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE6movetoERKNS_7point_tE:
  193|   312k|  void moveto (const point_t &pt_ ) { pt = pt_; }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE17process_post_moveEjRS4_RS5_:
  395|  22.5k|  {
  396|  22.5k|    if (!env.seen_moveto)
  ------------------
  |  Branch (396:9): [True: 0, False: 22.5k]
  ------------------
  397|      0|    {
  398|      0|      env.determine_hintmask_size ();
  399|      0|      env.seen_moveto = true;
  400|      0|    }
  401|  22.5k|    OPSET::flush_args_and_op (op, env, param);
  402|  22.5k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7hmovetoERS4_RS5_:
  464|  8.57k|  {
  465|  8.57k|    point_t pt1 = env.get_pt ();
  466|  8.57k|    pt1.move_x (env.pop_arg ());
  467|  8.57k|    PATH::moveto (env, param, pt1);
  468|  8.57k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7vmovetoERS4_RS5_:
  471|  12.0k|  {
  472|  12.0k|    point_t pt1 = env.get_pt ();
  473|  12.0k|    pt1.move_y (env.pop_arg ());
  474|  12.0k|    PATH::moveto (env, param, pt1);
  475|  12.0k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7rlinetoERS4_RS5_:
  478|  5.87k|  {
  479|  17.2k|    for (unsigned int i = 0; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (479:30): [True: 11.3k, False: 5.87k]
  ------------------
  480|  11.3k|    {
  481|  11.3k|      point_t pt1 = env.get_pt ();
  482|  11.3k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  483|  11.3k|      PATH::line (env, param, pt1);
  484|  11.3k|    }
  485|  5.87k|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE17process_post_pathEjRS4_RS5_:
  405|   151k|  {
  406|   151k|    OPSET::flush_args_and_op (op, env, param);
  407|   151k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7hlinetoERS4_RS5_:
  488|  9.30k|  {
  489|  9.30k|    point_t pt1;
  490|  9.30k|    unsigned int i = 0;
  491|  20.8k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (491:12): [True: 11.4k, False: 9.30k]
  ------------------
  492|  11.4k|    {
  493|  11.4k|      pt1 = env.get_pt ();
  494|  11.4k|      pt1.move_x (env.eval_arg (i));
  495|  11.4k|      PATH::line (env, param, pt1);
  496|  11.4k|      pt1.move_y (env.eval_arg (i+1));
  497|  11.4k|      PATH::line (env, param, pt1);
  498|  11.4k|    }
  499|  9.30k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (499:9): [True: 4.55k, False: 4.75k]
  ------------------
  500|  4.55k|    {
  501|  4.55k|      pt1 = env.get_pt ();
  502|  4.55k|      pt1.move_x (env.eval_arg (i));
  503|  4.55k|      PATH::line (env, param, pt1);
  504|  4.55k|    }
  505|  9.30k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE7vlinetoERS4_RS5_:
  508|   104k|  {
  509|   104k|    point_t pt1;
  510|   104k|    unsigned int i = 0;
  511|   124k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (511:12): [True: 19.7k, False: 104k]
  ------------------
  512|  19.7k|    {
  513|  19.7k|      pt1 = env.get_pt ();
  514|  19.7k|      pt1.move_y (env.eval_arg (i));
  515|  19.7k|      PATH::line (env, param, pt1);
  516|  19.7k|      pt1.move_x (env.eval_arg (i+1));
  517|  19.7k|      PATH::line (env, param, pt1);
  518|  19.7k|    }
  519|   104k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (519:9): [True: 10.0k, False: 94.8k]
  ------------------
  520|  10.0k|    {
  521|  10.0k|      pt1 = env.get_pt ();
  522|  10.0k|      pt1.move_y (env.eval_arg (i));
  523|  10.0k|      PATH::line (env, param, pt1);
  524|  10.0k|    }
  525|   104k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE9rrcurvetoERS4_RS5_:
  528|  8.37k|  {
  529|  9.93k|    for (unsigned int i = 0; i + 6 <= env.argStack.get_count (); i += 6)
  ------------------
  |  Branch (529:30): [True: 1.56k, False: 8.37k]
  ------------------
  530|  1.56k|    {
  531|  1.56k|      point_t pt1 = env.get_pt ();
  532|  1.56k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  533|  1.56k|      point_t pt2 = pt1;
  534|  1.56k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  535|  1.56k|      point_t pt3 = pt2;
  536|  1.56k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  537|  1.56k|      PATH::curve (env, param, pt1, pt2, pt3);
  538|  1.56k|    }
  539|  8.37k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE10rcurvelineERS4_RS5_:
  542|  3.13k|  {
  543|  3.13k|    unsigned int arg_count = env.argStack.get_count ();
  544|  3.13k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  3.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.99k, False: 1.13k]
  |  |  ------------------
  ------------------
  545|  1.99k|      return;
  546|       |
  547|  1.13k|    unsigned int i = 0;
  548|  1.13k|    unsigned int curve_limit = arg_count - 2;
  549|  4.06k|    for (; i + 6 <= curve_limit; i += 6)
  ------------------
  |  Branch (549:12): [True: 2.93k, False: 1.13k]
  ------------------
  550|  2.93k|    {
  551|  2.93k|      point_t pt1 = env.get_pt ();
  552|  2.93k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  553|  2.93k|      point_t pt2 = pt1;
  554|  2.93k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  555|  2.93k|      point_t pt3 = pt2;
  556|  2.93k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  557|  2.93k|      PATH::curve (env, param, pt1, pt2, pt3);
  558|  2.93k|    }
  559|       |
  560|  1.13k|    point_t pt1 = env.get_pt ();
  561|  1.13k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  562|  1.13k|    PATH::line (env, param, pt1);
  563|  1.13k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE10rlinecurveERS4_RS5_:
  566|  6.20k|  {
  567|  6.20k|    unsigned int arg_count = env.argStack.get_count ();
  568|  6.20k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  6.20k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.27k, False: 2.92k]
  |  |  ------------------
  ------------------
  569|  3.27k|      return;
  570|       |
  571|  2.92k|    unsigned int i = 0;
  572|  2.92k|    unsigned int line_limit = arg_count - 6;
  573|  13.2k|    for (; i + 2 <= line_limit; i += 2)
  ------------------
  |  Branch (573:12): [True: 10.3k, False: 2.92k]
  ------------------
  574|  10.3k|    {
  575|  10.3k|      point_t pt1 = env.get_pt ();
  576|  10.3k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  577|  10.3k|      PATH::line (env, param, pt1);
  578|  10.3k|    }
  579|       |
  580|  2.92k|    point_t pt1 = env.get_pt ();
  581|  2.92k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  582|  2.92k|    point_t pt2 = pt1;
  583|  2.92k|    pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  584|  2.92k|    point_t pt3 = pt2;
  585|  2.92k|    pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  586|  2.92k|    PATH::curve (env, param, pt1, pt2, pt3);
  587|  2.92k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE9vvcurvetoERS4_RS5_:
  590|  3.81k|  {
  591|  3.81k|    unsigned int i = 0;
  592|  3.81k|    point_t pt1 = env.get_pt ();
  593|  3.81k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (593:9): [True: 2.69k, False: 1.12k]
  ------------------
  594|  2.69k|      pt1.move_x (env.eval_arg (i++));
  595|  5.45k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (595:12): [True: 1.64k, False: 3.81k]
  ------------------
  596|  1.64k|    {
  597|  1.64k|      pt1.move_y (env.eval_arg (i));
  598|  1.64k|      point_t pt2 = pt1;
  599|  1.64k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  600|  1.64k|      point_t pt3 = pt2;
  601|  1.64k|      pt3.move_y (env.eval_arg (i+3));
  602|  1.64k|      PATH::curve (env, param, pt1, pt2, pt3);
  603|  1.64k|      pt1 = env.get_pt ();
  604|  1.64k|    }
  605|  3.81k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE9hhcurvetoERS4_RS5_:
  608|  1.55k|  {
  609|  1.55k|    unsigned int i = 0;
  610|  1.55k|    point_t pt1 = env.get_pt ();
  611|  1.55k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (611:9): [True: 313, False: 1.24k]
  ------------------
  612|    313|      pt1.move_y (env.eval_arg (i++));
  613|  5.78k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (613:12): [True: 4.22k, False: 1.55k]
  ------------------
  614|  4.22k|    {
  615|  4.22k|      pt1.move_x (env.eval_arg (i));
  616|  4.22k|      point_t pt2 = pt1;
  617|  4.22k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  618|  4.22k|      point_t pt3 = pt2;
  619|  4.22k|      pt3.move_x (env.eval_arg (i+3));
  620|  4.22k|      PATH::curve (env, param, pt1, pt2, pt3);
  621|  4.22k|      pt1 = env.get_pt ();
  622|  4.22k|    }
  623|  1.55k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE9vhcurvetoERS4_RS5_:
  626|  4.53k|  {
  627|  4.53k|    point_t pt1, pt2, pt3;
  628|  4.53k|    unsigned int i = 0;
  629|  4.53k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (629:9): [True: 2.00k, False: 2.52k]
  ------------------
  630|  2.00k|    {
  631|  2.00k|      point_t pt1 = env.get_pt ();
  632|  2.00k|      pt1.move_y (env.eval_arg (i));
  633|  2.00k|      point_t pt2 = pt1;
  634|  2.00k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  635|  2.00k|      point_t pt3 = pt2;
  636|  2.00k|      pt3.move_x (env.eval_arg (i+3));
  637|  2.00k|      i += 4;
  638|       |
  639|  3.42k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (639:14): [True: 1.42k, False: 2.00k]
  ------------------
  640|  1.42k|      {
  641|  1.42k|	PATH::curve (env, param, pt1, pt2, pt3);
  642|  1.42k|	pt1 = env.get_pt ();
  643|  1.42k|	pt1.move_x (env.eval_arg (i));
  644|  1.42k|	pt2 = pt1;
  645|  1.42k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  646|  1.42k|	pt3 = pt2;
  647|  1.42k|	pt3.move_y (env.eval_arg (i+3));
  648|  1.42k|	PATH::curve (env, param, pt1, pt2, pt3);
  649|       |
  650|  1.42k|	pt1 = pt3;
  651|  1.42k|	pt1.move_y (env.eval_arg (i+4));
  652|  1.42k|	pt2 = pt1;
  653|  1.42k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  654|  1.42k|	pt3 = pt2;
  655|  1.42k|	pt3.move_x (env.eval_arg (i+7));
  656|  1.42k|      }
  657|  2.00k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (657:11): [True: 1.68k, False: 320]
  ------------------
  658|  1.68k|	pt3.move_y (env.eval_arg (i));
  659|  2.00k|      PATH::curve (env, param, pt1, pt2, pt3);
  660|  2.00k|    }
  661|  2.52k|    else
  662|  2.52k|    {
  663|  4.78k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (663:14): [True: 2.25k, False: 2.52k]
  ------------------
  664|  2.25k|      {
  665|  2.25k|	pt1 = env.get_pt ();
  666|  2.25k|	pt1.move_y (env.eval_arg (i));
  667|  2.25k|	pt2 = pt1;
  668|  2.25k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  669|  2.25k|	pt3 = pt2;
  670|  2.25k|	pt3.move_x (env.eval_arg (i+3));
  671|  2.25k|	PATH::curve (env, param, pt1, pt2, pt3);
  672|       |
  673|  2.25k|	pt1 = pt3;
  674|  2.25k|	pt1.move_x (env.eval_arg (i+4));
  675|  2.25k|	pt2 = pt1;
  676|  2.25k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  677|  2.25k|	pt3 = pt2;
  678|  2.25k|	pt3.move_y (env.eval_arg (i+7));
  679|  2.25k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (679:6): [True: 1.50k, False: 747]
  |  Branch (679:46): [True: 686, False: 819]
  ------------------
  680|    686|	  pt3.move_x (env.eval_arg (i+8));
  681|  2.25k|	PATH::curve (env, param, pt1, pt2, pt3);
  682|  2.25k|      }
  683|  2.52k|    }
  684|  4.53k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE9hvcurvetoERS4_RS5_:
  687|  3.37k|  {
  688|  3.37k|    point_t pt1, pt2, pt3;
  689|  3.37k|    unsigned int i = 0;
  690|  3.37k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (690:9): [True: 1.37k, False: 2.00k]
  ------------------
  691|  1.37k|    {
  692|  1.37k|      point_t pt1 = env.get_pt ();
  693|  1.37k|      pt1.move_x (env.eval_arg (i));
  694|  1.37k|      point_t pt2 = pt1;
  695|  1.37k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  696|  1.37k|      point_t pt3 = pt2;
  697|  1.37k|      pt3.move_y (env.eval_arg (i+3));
  698|  1.37k|      i += 4;
  699|       |
  700|  2.23k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (700:14): [True: 863, False: 1.37k]
  ------------------
  701|    863|      {
  702|    863|	PATH::curve (env, param, pt1, pt2, pt3);
  703|    863|	pt1 = env.get_pt ();
  704|    863|	pt1.move_y (env.eval_arg (i));
  705|    863|	pt2 = pt1;
  706|    863|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  707|    863|	pt3 = pt2;
  708|    863|	pt3.move_x (env.eval_arg (i+3));
  709|    863|	PATH::curve (env, param, pt1, pt2, pt3);
  710|       |
  711|    863|	pt1 = pt3;
  712|    863|	pt1.move_x (env.eval_arg (i+4));
  713|    863|	pt2 = pt1;
  714|    863|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  715|    863|	pt3 = pt2;
  716|    863|	pt3.move_y (env.eval_arg (i+7));
  717|    863|      }
  718|  1.37k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (718:11): [True: 844, False: 529]
  ------------------
  719|    844|	pt3.move_x (env.eval_arg (i));
  720|  1.37k|      PATH::curve (env, param, pt1, pt2, pt3);
  721|  1.37k|    }
  722|  2.00k|    else
  723|  2.00k|    {
  724|  4.60k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (724:14): [True: 2.60k, False: 2.00k]
  ------------------
  725|  2.60k|      {
  726|  2.60k|	pt1 = env.get_pt ();
  727|  2.60k|	pt1.move_x (env.eval_arg (i));
  728|  2.60k|	pt2 = pt1;
  729|  2.60k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  730|  2.60k|	pt3 = pt2;
  731|  2.60k|	pt3.move_y (env.eval_arg (i+3));
  732|  2.60k|	PATH::curve (env, param, pt1, pt2, pt3);
  733|       |
  734|  2.60k|	pt1 = pt3;
  735|  2.60k|	pt1.move_y (env.eval_arg (i+4));
  736|  2.60k|	pt2 = pt1;
  737|  2.60k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  738|  2.60k|	pt3 = pt2;
  739|  2.60k|	pt3.move_x (env.eval_arg (i+7));
  740|  2.60k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (740:6): [True: 1.58k, False: 1.01k]
  |  Branch (740:46): [True: 843, False: 743]
  ------------------
  741|    843|	  pt3.move_y (env.eval_arg (i+8));
  742|  2.60k|	PATH::curve (env, param, pt1, pt2, pt3);
  743|  2.60k|      }
  744|  2.00k|    }
  745|  3.37k|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE5hflexERS4_RS5_:
  758|     78|  {
  759|     78|    if (likely (env.argStack.get_count () == 7))
  ------------------
  |  |  258|     78|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 55, False: 23]
  |  |  ------------------
  ------------------
  760|     55|    {
  761|     55|      point_t pt1 = env.get_pt ();
  762|     55|      pt1.move_x (env.eval_arg (0));
  763|     55|      point_t pt2 = pt1;
  764|     55|      pt2.move (env.eval_arg (1), env.eval_arg (2));
  765|     55|      point_t pt3 = pt2;
  766|     55|      pt3.move_x (env.eval_arg (3));
  767|     55|      point_t pt4 = pt3;
  768|     55|      pt4.move_x (env.eval_arg (4));
  769|     55|      point_t pt5 = pt4;
  770|     55|      pt5.move_x (env.eval_arg (5));
  771|     55|      pt5.y = pt1.y;
  772|     55|      point_t pt6 = pt5;
  773|     55|      pt6.move_x (env.eval_arg (6));
  774|       |
  775|     55|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  776|     55|    }
  777|     23|    else
  778|     23|      env.set_error ();
  779|     78|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE6curve2ERS4_RS5_RKNS_7point_tESB_SB_SB_SB_SB_:
  869|    630|  {
  870|    630|    PATH::curve (env, param, pt1, pt2, pt3);
  871|    630|    PATH::curve (env, param, pt4, pt5, pt6);
  872|    630|  }
_ZN3CFF10cs_opset_tINS_8number_tE23cff2_cs_opset_extents_tNS_20cff2_cs_interp_env_tIS1_EE20cff2_extents_param_t25cff2_path_procs_extents_tE17process_post_flexEjRS4_RS5_:
  387|    711|  {
  388|    711|    OPSET::flush_args_and_op (op, env, param);
  389|    711|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE4flexERS4_RS5_:
  782|     44|  {
  783|     44|    if (likely (env.argStack.get_count () == 13))
  ------------------
  |  |  258|     44|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 28, False: 16]
  |  |  ------------------
  ------------------
  784|     28|    {
  785|     28|      point_t pt1 = env.get_pt ();
  786|     28|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  787|     28|      point_t pt2 = pt1;
  788|     28|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  789|     28|      point_t pt3 = pt2;
  790|     28|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  791|     28|      point_t pt4 = pt3;
  792|     28|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  793|     28|      point_t pt5 = pt4;
  794|     28|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  795|     28|      point_t pt6 = pt5;
  796|     28|      pt6.move (env.eval_arg (10), env.eval_arg (11));
  797|       |
  798|     28|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  799|     28|    }
  800|     16|    else
  801|     16|      env.set_error ();
  802|     44|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE6hflex1ERS4_RS5_:
  805|    122|  {
  806|    122|    if (likely (env.argStack.get_count () == 9))
  ------------------
  |  |  258|    122|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 103, False: 19]
  |  |  ------------------
  ------------------
  807|    103|    {
  808|    103|      point_t pt1 = env.get_pt ();
  809|    103|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  810|    103|      point_t pt2 = pt1;
  811|    103|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  812|    103|      point_t pt3 = pt2;
  813|    103|      pt3.move_x (env.eval_arg (4));
  814|    103|      point_t pt4 = pt3;
  815|    103|      pt4.move_x (env.eval_arg (5));
  816|    103|      point_t pt5 = pt4;
  817|    103|      pt5.move (env.eval_arg (6), env.eval_arg (7));
  818|    103|      point_t pt6 = pt5;
  819|    103|      pt6.move_x (env.eval_arg (8));
  820|    103|      pt6.y = env.get_pt ().y;
  821|       |
  822|    103|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  823|    103|    }
  824|     19|    else
  825|     19|      env.set_error ();
  826|    122|  }
_ZN3CFF12path_procs_tI25cff2_path_procs_extents_tNS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_extents_param_tE5flex1ERS4_RS5_:
  829|    467|  {
  830|    467|    if (likely (env.argStack.get_count () == 11))
  ------------------
  |  |  258|    467|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 444, False: 23]
  |  |  ------------------
  ------------------
  831|    444|    {
  832|    444|      point_t d;
  833|  2.66k|      for (unsigned int i = 0; i < 10; i += 2)
  ------------------
  |  Branch (833:32): [True: 2.22k, False: 444]
  ------------------
  834|  2.22k|	d.move (env.eval_arg (i), env.eval_arg (i+1));
  835|       |
  836|    444|      point_t pt1 = env.get_pt ();
  837|    444|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  838|    444|      point_t pt2 = pt1;
  839|    444|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  840|    444|      point_t pt3 = pt2;
  841|    444|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  842|    444|      point_t pt4 = pt3;
  843|    444|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  844|    444|      point_t pt5 = pt4;
  845|    444|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  846|    444|      point_t pt6 = pt5;
  847|       |
  848|    444|      if (fabs (d.x.to_real ()) > fabs (d.y.to_real ()))
  ------------------
  |  Branch (848:11): [True: 320, False: 124]
  ------------------
  849|    320|      {
  850|    320|	pt6.move_x (env.eval_arg (10));
  851|    320|	pt6.y = env.get_pt ().y;
  852|    320|      }
  853|    124|      else
  854|    124|      {
  855|    124|	pt6.x = env.get_pt ().x;
  856|    124|	pt6.move_y (env.eval_arg (10));
  857|    124|      }
  858|       |
  859|    444|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  860|    444|    }
  861|     23|    else
  862|     23|      env.set_error ();
  863|    467|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE8in_errorEv:
  135|  1.91M|  {
  136|  1.91M|    return callStack.in_error () || SUPER::in_error ();
  ------------------
  |  Branch (136:12): [True: 443, False: 1.90M]
  |  Branch (136:37): [True: 7.75k, False: 1.90M]
  ------------------
  137|  1.91M|  }
_ZNK3CFF15cs_interp_env_tINS_8number_tENS_5SubrsIN2OT7IntTypeIjLj4EEEEEE10is_endcharEv:
  187|  1.90M|  bool is_endchar () const { return endchar_flag; }
_ZN3CFF16cs_interpreter_tINS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_cs_opset_path_t17cff2_path_param_tEC2ERS3_:
  878|  10.6k|  cs_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF16cs_interpreter_tINS_20cff2_cs_interp_env_tINS_8number_tEEE20cff2_cs_opset_path_t17cff2_path_param_tE9interpretERS5_:
  881|  10.6k|  {
  882|  10.6k|    SUPER::env.set_endchar (false);
  883|       |
  884|  10.6k|    unsigned max_ops = HB_CFF_MAX_OPS;
  ------------------
  |  |  105|  10.6k|#define HB_CFF_MAX_OPS 10000
  ------------------
  885|   951k|    for (;;) {
  886|   951k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  887|   951k|      if (unlikely (SUPER::env.in_error () || !--max_ops))
  ------------------
  |  |  259|  1.89M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.29k, False: 943k]
  |  |  |  Branch (259:47): [True: 7.25k, False: 943k]
  |  |  |  Branch (259:47): [True: 44, False: 943k]
  |  |  ------------------
  ------------------
  888|  7.29k|      {
  889|  7.29k|	SUPER::env.set_error ();
  890|  7.29k|	return false;
  891|  7.29k|      }
  892|   943k|      if (SUPER::env.is_endchar ())
  ------------------
  |  Branch (892:11): [True: 3.38k, False: 940k]
  ------------------
  893|  3.38k|	break;
  894|   943k|    }
  895|       |
  896|  3.38k|    return true;
  897|  10.6k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE10process_opEjRS4_RS5_:
  243|   948k|  {
  244|   948k|    switch (op) {
  245|       |
  246|  14.4k|      case OpCode_return:
  ------------------
  |  |  152|  14.4k|#define OpCode_return		 11 /* CFF */
  ------------------
  |  Branch (246:7): [True: 14.4k, False: 933k]
  ------------------
  247|  14.4k|	env.return_from_subr ();
  248|  14.4k|	break;
  249|  3.38k|      case OpCode_endchar:
  ------------------
  |  |  155|  3.38k|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (249:7): [True: 3.38k, False: 944k]
  ------------------
  250|  3.38k|	OPSET::check_width (op, env, param);
  251|  3.38k|	env.set_endchar (true);
  252|  3.38k|	OPSET::flush_args_and_op (op, env, param);
  253|  3.38k|	break;
  254|       |
  255|  22.1k|      case OpCode_fixedcs:
  ------------------
  |  |  174|  22.1k|#define OpCode_fixedcs		255 /* 32-bit fixed */
  ------------------
  |  Branch (255:7): [True: 22.1k, False: 925k]
  ------------------
  256|  22.1k|	env.argStack.push_fixed_from_substr (env.str_ref);
  257|  22.1k|	break;
  258|       |
  259|  1.73k|      case OpCode_callsubr:
  ------------------
  |  |  151|  1.73k|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (259:7): [True: 1.73k, False: 946k]
  ------------------
  260|  1.73k|	env.call_subr (env.localSubrs, CSType_LocalSubr);
  261|  1.73k|	break;
  262|       |
  263|  15.0k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  15.0k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (263:7): [True: 15.0k, False: 933k]
  ------------------
  264|  15.0k|	env.call_subr (env.globalSubrs, CSType_GlobalSubr);
  265|  15.0k|	break;
  266|       |
  267|  6.26k|      case OpCode_hstem:
  ------------------
  |  |  142|  6.26k|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (267:7): [True: 6.26k, False: 941k]
  ------------------
  268|  14.8k|      case OpCode_hstemhm:
  ------------------
  |  |  159|  14.8k|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (268:7): [True: 8.59k, False: 939k]
  ------------------
  269|  14.8k|	OPSET::check_width (op, env, param);
  270|  14.8k|	OPSET::process_hstem (op, env, param);
  271|  14.8k|	break;
  272|  1.66k|      case OpCode_vstem:
  ------------------
  |  |  144|  1.66k|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (272:7): [True: 1.66k, False: 946k]
  ------------------
  273|  4.49k|      case OpCode_vstemhm:
  ------------------
  |  |  164|  4.49k|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (273:7): [True: 2.83k, False: 945k]
  ------------------
  274|  4.49k|	OPSET::check_width (op, env, param);
  275|  4.49k|	OPSET::process_vstem (op, env, param);
  276|  4.49k|	break;
  277|  1.06k|      case OpCode_hintmask:
  ------------------
  |  |  160|  1.06k|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (277:7): [True: 1.06k, False: 947k]
  ------------------
  278|  2.29k|      case OpCode_cntrmask:
  ------------------
  |  |  161|  2.29k|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (278:7): [True: 1.23k, False: 946k]
  ------------------
  279|  2.29k|	OPSET::check_width (op, env, param);
  280|  2.29k|	OPSET::process_hintmask (op, env, param);
  281|  2.29k|	break;
  282|  4.15k|      case OpCode_rmoveto:
  ------------------
  |  |  162|  4.15k|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (282:7): [True: 4.15k, False: 943k]
  ------------------
  283|  4.15k|	OPSET::check_width (op, env, param);
  284|  4.15k|	PATH::rmoveto (env, param);
  285|  4.15k|	OPSET::process_post_move (op, env, param);
  286|  4.15k|	break;
  287|  7.31k|      case OpCode_hmoveto:
  ------------------
  |  |  163|  7.31k|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (287:7): [True: 7.31k, False: 940k]
  ------------------
  288|  7.31k|	OPSET::check_width (op, env, param);
  289|  7.31k|	PATH::hmoveto (env, param);
  290|  7.31k|	OPSET::process_post_move (op, env, param);
  291|  7.31k|	break;
  292|  12.4k|      case OpCode_vmoveto:
  ------------------
  |  |  145|  12.4k|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (292:7): [True: 12.4k, False: 935k]
  ------------------
  293|  12.4k|	OPSET::check_width (op, env, param);
  294|  12.4k|	PATH::vmoveto (env, param);
  295|  12.4k|	OPSET::process_post_move (op, env, param);
  296|  12.4k|	break;
  297|  6.90k|      case OpCode_rlineto:
  ------------------
  |  |  146|  6.90k|#define OpCode_rlineto		  5 /* CFF, CFF2 */
  ------------------
  |  Branch (297:7): [True: 6.90k, False: 941k]
  ------------------
  298|  6.90k|	PATH::rlineto (env, param);
  299|  6.90k|	process_post_path (op, env, param);
  300|  6.90k|	break;
  301|  8.64k|      case OpCode_hlineto:
  ------------------
  |  |  147|  8.64k|#define OpCode_hlineto		  6 /* CFF, CFF2 */
  ------------------
  |  Branch (301:7): [True: 8.64k, False: 939k]
  ------------------
  302|  8.64k|	PATH::hlineto (env, param);
  303|  8.64k|	process_post_path (op, env, param);
  304|  8.64k|	break;
  305|  90.3k|      case OpCode_vlineto:
  ------------------
  |  |  148|  90.3k|#define OpCode_vlineto		  7 /* CFF, CFF2 */
  ------------------
  |  Branch (305:7): [True: 90.3k, False: 857k]
  ------------------
  306|  90.3k|	PATH::vlineto (env, param);
  307|  90.3k|	process_post_path (op, env, param);
  308|  90.3k|	break;
  309|  9.75k|      case OpCode_rrcurveto:
  ------------------
  |  |  149|  9.75k|#define OpCode_rrcurveto	  8 /* CFF, CFF2 */
  ------------------
  |  Branch (309:7): [True: 9.75k, False: 938k]
  ------------------
  310|  9.75k|	PATH::rrcurveto (env, param);
  311|  9.75k|	process_post_path (op, env, param);
  312|  9.75k|	break;
  313|  3.68k|      case OpCode_rcurveline:
  ------------------
  |  |  165|  3.68k|#define OpCode_rcurveline	 24 /* CFF, CFF2 */
  ------------------
  |  Branch (313:7): [True: 3.68k, False: 944k]
  ------------------
  314|  3.68k|	PATH::rcurveline (env, param);
  315|  3.68k|	process_post_path (op, env, param);
  316|  3.68k|	break;
  317|  4.22k|      case OpCode_rlinecurve:
  ------------------
  |  |  166|  4.22k|#define OpCode_rlinecurve	 25 /* CFF, CFF2 */
  ------------------
  |  Branch (317:7): [True: 4.22k, False: 943k]
  ------------------
  318|  4.22k|	PATH::rlinecurve (env, param);
  319|  4.22k|	process_post_path (op, env, param);
  320|  4.22k|	break;
  321|  4.42k|      case OpCode_vvcurveto:
  ------------------
  |  |  167|  4.42k|#define OpCode_vvcurveto	 26 /* CFF, CFF2 */
  ------------------
  |  Branch (321:7): [True: 4.42k, False: 943k]
  ------------------
  322|  4.42k|	PATH::vvcurveto (env, param);
  323|  4.42k|	process_post_path (op, env, param);
  324|  4.42k|	break;
  325|  2.02k|      case OpCode_hhcurveto:
  ------------------
  |  |  168|  2.02k|#define OpCode_hhcurveto	 27 /* CFF, CFF2 */
  ------------------
  |  Branch (325:7): [True: 2.02k, False: 946k]
  ------------------
  326|  2.02k|	PATH::hhcurveto (env, param);
  327|  2.02k|	process_post_path (op, env, param);
  328|  2.02k|	break;
  329|  6.49k|      case OpCode_vhcurveto:
  ------------------
  |  |  171|  6.49k|#define OpCode_vhcurveto	 30 /* CFF, CFF2 */
  ------------------
  |  Branch (329:7): [True: 6.49k, False: 941k]
  ------------------
  330|  6.49k|	PATH::vhcurveto (env, param);
  331|  6.49k|	process_post_path (op, env, param);
  332|  6.49k|	break;
  333|  2.86k|      case OpCode_hvcurveto:
  ------------------
  |  |  172|  2.86k|#define OpCode_hvcurveto	 31 /* CFF, CFF2 */
  ------------------
  |  Branch (333:7): [True: 2.86k, False: 945k]
  ------------------
  334|  2.86k|	PATH::hvcurveto (env, param);
  335|  2.86k|	process_post_path (op, env, param);
  336|  2.86k|	break;
  337|       |
  338|    786|      case OpCode_hflex:
  ------------------
  |  |  211|    786|#define OpCode_hflex		Make_OpCode_ESC(34) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    786|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    786|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:7): [True: 786, False: 947k]
  ------------------
  339|    786|	PATH::hflex (env, param);
  340|    786|	OPSET::process_post_flex (op, env, param);
  341|    786|	break;
  342|       |
  343|     93|      case OpCode_flex:
  ------------------
  |  |  212|     93|#define OpCode_flex		Make_OpCode_ESC(35) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|     93|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     93|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (343:7): [True: 93, False: 948k]
  ------------------
  344|     93|	PATH::flex (env, param);
  345|     93|	OPSET::process_post_flex (op, env, param);
  346|     93|	break;
  347|       |
  348|    313|      case OpCode_hflex1:
  ------------------
  |  |  213|    313|#define OpCode_hflex1		Make_OpCode_ESC(36) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    313|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    313|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (348:7): [True: 313, False: 947k]
  ------------------
  349|    313|	PATH::hflex1 (env, param);
  350|    313|	OPSET::process_post_flex (op, env, param);
  351|    313|	break;
  352|       |
  353|    431|      case OpCode_flex1:
  ------------------
  |  |  214|    431|#define OpCode_flex1		Make_OpCode_ESC(37) /* CFF, CFF2 */
  |  |  ------------------
  |  |  |  |   93|    431|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    431|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (353:7): [True: 431, False: 947k]
  ------------------
  354|    431|	PATH::flex1 (env, param);
  355|    431|	OPSET::process_post_flex (op, env, param);
  356|    431|	break;
  357|       |
  358|   704k|      default:
  ------------------
  |  Branch (358:7): [True: 704k, False: 243k]
  ------------------
  359|   704k|	SUPER::process_op (op, env);
  360|   704k|	break;
  361|   948k|    }
  362|   948k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE11check_widthEjRS4_RS5_:
  392|  48.9k|  {}
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE17flush_args_and_opEjRS4_RS5_:
  410|   189k|  {
  411|   189k|    OPSET::flush_args (env, param);
  412|   189k|    OPSET::flush_op (op, env, param);
  413|   189k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE10flush_argsERS4_RS5_:
  416|   189k|  {
  417|   189k|    env.pop_n_args (env.argStack.get_count ());
  418|   189k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE8flush_opEjRS4_RS5_:
  421|   189k|  {
  422|   189k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE13process_hstemEjRS4_RS5_:
  365|  14.8k|  {
  366|  14.8k|    env.hstem_count += env.argStack.get_count () / 2;
  367|  14.8k|    OPSET::flush_args_and_op (op, env, param);
  368|  14.8k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE13process_vstemEjRS4_RS5_:
  371|  4.49k|  {
  372|  4.49k|    env.vstem_count += env.argStack.get_count () / 2;
  373|  4.49k|    OPSET::flush_args_and_op (op, env, param);
  374|  4.49k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE16process_hintmaskEjRS4_RS5_:
  377|  2.29k|  {
  378|  2.29k|    env.determine_hintmask_size ();
  379|  2.29k|    if (likely (env.str_ref.avail (env.hintmask_size)))
  ------------------
  |  |  258|  2.29k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.67k, False: 618]
  |  |  ------------------
  ------------------
  380|  1.67k|    {
  381|  1.67k|      OPSET::flush_hintmask (op, env, param);
  382|  1.67k|      env.str_ref.inc (env.hintmask_size);
  383|  1.67k|    }
  384|  2.29k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE14flush_hintmaskEjRS4_RS5_:
  425|  1.67k|  {
  426|  1.67k|    OPSET::flush_args_and_op (op, env, param);
  427|  1.67k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7rmovetoERS4_RS5_:
  455|  4.15k|  {
  456|  4.15k|    point_t pt1 = env.get_pt ();
  457|  4.15k|    const number_t &dy = env.pop_arg ();
  458|  4.15k|    const number_t &dx = env.pop_arg ();
  459|  4.15k|    pt1.move (dx, dy);
  460|  4.15k|    PATH::moveto (env, param, pt1);
  461|  4.15k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE17process_post_moveEjRS4_RS5_:
  395|  23.8k|  {
  396|  23.8k|    if (!env.seen_moveto)
  ------------------
  |  Branch (396:9): [True: 0, False: 23.8k]
  ------------------
  397|      0|    {
  398|      0|      env.determine_hintmask_size ();
  399|      0|      env.seen_moveto = true;
  400|      0|    }
  401|  23.8k|    OPSET::flush_args_and_op (op, env, param);
  402|  23.8k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7hmovetoERS4_RS5_:
  464|  7.31k|  {
  465|  7.31k|    point_t pt1 = env.get_pt ();
  466|  7.31k|    pt1.move_x (env.pop_arg ());
  467|  7.31k|    PATH::moveto (env, param, pt1);
  468|  7.31k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7vmovetoERS4_RS5_:
  471|  12.4k|  {
  472|  12.4k|    point_t pt1 = env.get_pt ();
  473|  12.4k|    pt1.move_y (env.pop_arg ());
  474|  12.4k|    PATH::moveto (env, param, pt1);
  475|  12.4k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7rlinetoERS4_RS5_:
  478|  6.90k|  {
  479|  14.9k|    for (unsigned int i = 0; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (479:30): [True: 7.99k, False: 6.90k]
  ------------------
  480|  7.99k|    {
  481|  7.99k|      point_t pt1 = env.get_pt ();
  482|  7.99k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  483|  7.99k|      PATH::line (env, param, pt1);
  484|  7.99k|    }
  485|  6.90k|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE17process_post_pathEjRS4_RS5_:
  405|   139k|  {
  406|   139k|    OPSET::flush_args_and_op (op, env, param);
  407|   139k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7hlinetoERS4_RS5_:
  488|  8.64k|  {
  489|  8.64k|    point_t pt1;
  490|  8.64k|    unsigned int i = 0;
  491|  19.6k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (491:12): [True: 11.0k, False: 8.64k]
  ------------------
  492|  11.0k|    {
  493|  11.0k|      pt1 = env.get_pt ();
  494|  11.0k|      pt1.move_x (env.eval_arg (i));
  495|  11.0k|      PATH::line (env, param, pt1);
  496|  11.0k|      pt1.move_y (env.eval_arg (i+1));
  497|  11.0k|      PATH::line (env, param, pt1);
  498|  11.0k|    }
  499|  8.64k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (499:9): [True: 4.66k, False: 3.97k]
  ------------------
  500|  4.66k|    {
  501|  4.66k|      pt1 = env.get_pt ();
  502|  4.66k|      pt1.move_x (env.eval_arg (i));
  503|  4.66k|      PATH::line (env, param, pt1);
  504|  4.66k|    }
  505|  8.64k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE7vlinetoERS4_RS5_:
  508|  90.3k|  {
  509|  90.3k|    point_t pt1;
  510|  90.3k|    unsigned int i = 0;
  511|   109k|    for (; i + 2 <= env.argStack.get_count (); i += 2)
  ------------------
  |  Branch (511:12): [True: 18.6k, False: 90.3k]
  ------------------
  512|  18.6k|    {
  513|  18.6k|      pt1 = env.get_pt ();
  514|  18.6k|      pt1.move_y (env.eval_arg (i));
  515|  18.6k|      PATH::line (env, param, pt1);
  516|  18.6k|      pt1.move_x (env.eval_arg (i+1));
  517|  18.6k|      PATH::line (env, param, pt1);
  518|  18.6k|    }
  519|  90.3k|    if (i < env.argStack.get_count ())
  ------------------
  |  Branch (519:9): [True: 10.0k, False: 80.3k]
  ------------------
  520|  10.0k|    {
  521|  10.0k|      pt1 = env.get_pt ();
  522|  10.0k|      pt1.move_y (env.eval_arg (i));
  523|  10.0k|      PATH::line (env, param, pt1);
  524|  10.0k|    }
  525|  90.3k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE9rrcurvetoERS4_RS5_:
  528|  9.75k|  {
  529|  14.8k|    for (unsigned int i = 0; i + 6 <= env.argStack.get_count (); i += 6)
  ------------------
  |  Branch (529:30): [True: 5.06k, False: 9.75k]
  ------------------
  530|  5.06k|    {
  531|  5.06k|      point_t pt1 = env.get_pt ();
  532|  5.06k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  533|  5.06k|      point_t pt2 = pt1;
  534|  5.06k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  535|  5.06k|      point_t pt3 = pt2;
  536|  5.06k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  537|  5.06k|      PATH::curve (env, param, pt1, pt2, pt3);
  538|  5.06k|    }
  539|  9.75k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE10rcurvelineERS4_RS5_:
  542|  3.68k|  {
  543|  3.68k|    unsigned int arg_count = env.argStack.get_count ();
  544|  3.68k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  3.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.77k, False: 1.90k]
  |  |  ------------------
  ------------------
  545|  1.77k|      return;
  546|       |
  547|  1.90k|    unsigned int i = 0;
  548|  1.90k|    unsigned int curve_limit = arg_count - 2;
  549|  5.40k|    for (; i + 6 <= curve_limit; i += 6)
  ------------------
  |  Branch (549:12): [True: 3.49k, False: 1.90k]
  ------------------
  550|  3.49k|    {
  551|  3.49k|      point_t pt1 = env.get_pt ();
  552|  3.49k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  553|  3.49k|      point_t pt2 = pt1;
  554|  3.49k|      pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  555|  3.49k|      point_t pt3 = pt2;
  556|  3.49k|      pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  557|  3.49k|      PATH::curve (env, param, pt1, pt2, pt3);
  558|  3.49k|    }
  559|       |
  560|  1.90k|    point_t pt1 = env.get_pt ();
  561|  1.90k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  562|  1.90k|    PATH::line (env, param, pt1);
  563|  1.90k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE10rlinecurveERS4_RS5_:
  566|  4.22k|  {
  567|  4.22k|    unsigned int arg_count = env.argStack.get_count ();
  568|  4.22k|    if (unlikely (arg_count < 8))
  ------------------
  |  |  259|  4.22k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.23k, False: 2.99k]
  |  |  ------------------
  ------------------
  569|  1.23k|      return;
  570|       |
  571|  2.99k|    unsigned int i = 0;
  572|  2.99k|    unsigned int line_limit = arg_count - 6;
  573|  13.1k|    for (; i + 2 <= line_limit; i += 2)
  ------------------
  |  Branch (573:12): [True: 10.1k, False: 2.99k]
  ------------------
  574|  10.1k|    {
  575|  10.1k|      point_t pt1 = env.get_pt ();
  576|  10.1k|      pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  577|  10.1k|      PATH::line (env, param, pt1);
  578|  10.1k|    }
  579|       |
  580|  2.99k|    point_t pt1 = env.get_pt ();
  581|  2.99k|    pt1.move (env.eval_arg (i), env.eval_arg (i+1));
  582|  2.99k|    point_t pt2 = pt1;
  583|  2.99k|    pt2.move (env.eval_arg (i+2), env.eval_arg (i+3));
  584|  2.99k|    point_t pt3 = pt2;
  585|  2.99k|    pt3.move (env.eval_arg (i+4), env.eval_arg (i+5));
  586|  2.99k|    PATH::curve (env, param, pt1, pt2, pt3);
  587|  2.99k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE9vvcurvetoERS4_RS5_:
  590|  4.42k|  {
  591|  4.42k|    unsigned int i = 0;
  592|  4.42k|    point_t pt1 = env.get_pt ();
  593|  4.42k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (593:9): [True: 3.30k, False: 1.12k]
  ------------------
  594|  3.30k|      pt1.move_x (env.eval_arg (i++));
  595|  6.89k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (595:12): [True: 2.46k, False: 4.42k]
  ------------------
  596|  2.46k|    {
  597|  2.46k|      pt1.move_y (env.eval_arg (i));
  598|  2.46k|      point_t pt2 = pt1;
  599|  2.46k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  600|  2.46k|      point_t pt3 = pt2;
  601|  2.46k|      pt3.move_y (env.eval_arg (i+3));
  602|  2.46k|      PATH::curve (env, param, pt1, pt2, pt3);
  603|  2.46k|      pt1 = env.get_pt ();
  604|  2.46k|    }
  605|  4.42k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE9hhcurvetoERS4_RS5_:
  608|  2.02k|  {
  609|  2.02k|    unsigned int i = 0;
  610|  2.02k|    point_t pt1 = env.get_pt ();
  611|  2.02k|    if ((env.argStack.get_count () & 1) != 0)
  ------------------
  |  Branch (611:9): [True: 1.05k, False: 968]
  ------------------
  612|  1.05k|      pt1.move_y (env.eval_arg (i++));
  613|  5.31k|    for (; i + 4 <= env.argStack.get_count (); i += 4)
  ------------------
  |  Branch (613:12): [True: 3.29k, False: 2.02k]
  ------------------
  614|  3.29k|    {
  615|  3.29k|      pt1.move_x (env.eval_arg (i));
  616|  3.29k|      point_t pt2 = pt1;
  617|  3.29k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  618|  3.29k|      point_t pt3 = pt2;
  619|  3.29k|      pt3.move_x (env.eval_arg (i+3));
  620|  3.29k|      PATH::curve (env, param, pt1, pt2, pt3);
  621|  3.29k|      pt1 = env.get_pt ();
  622|  3.29k|    }
  623|  2.02k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE9vhcurvetoERS4_RS5_:
  626|  6.49k|  {
  627|  6.49k|    point_t pt1, pt2, pt3;
  628|  6.49k|    unsigned int i = 0;
  629|  6.49k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (629:9): [True: 2.95k, False: 3.54k]
  ------------------
  630|  2.95k|    {
  631|  2.95k|      point_t pt1 = env.get_pt ();
  632|  2.95k|      pt1.move_y (env.eval_arg (i));
  633|  2.95k|      point_t pt2 = pt1;
  634|  2.95k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  635|  2.95k|      point_t pt3 = pt2;
  636|  2.95k|      pt3.move_x (env.eval_arg (i+3));
  637|  2.95k|      i += 4;
  638|       |
  639|  4.34k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (639:14): [True: 1.38k, False: 2.95k]
  ------------------
  640|  1.38k|      {
  641|  1.38k|	PATH::curve (env, param, pt1, pt2, pt3);
  642|  1.38k|	pt1 = env.get_pt ();
  643|  1.38k|	pt1.move_x (env.eval_arg (i));
  644|  1.38k|	pt2 = pt1;
  645|  1.38k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  646|  1.38k|	pt3 = pt2;
  647|  1.38k|	pt3.move_y (env.eval_arg (i+3));
  648|  1.38k|	PATH::curve (env, param, pt1, pt2, pt3);
  649|       |
  650|  1.38k|	pt1 = pt3;
  651|  1.38k|	pt1.move_y (env.eval_arg (i+4));
  652|  1.38k|	pt2 = pt1;
  653|  1.38k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  654|  1.38k|	pt3 = pt2;
  655|  1.38k|	pt3.move_x (env.eval_arg (i+7));
  656|  1.38k|      }
  657|  2.95k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (657:11): [True: 1.91k, False: 1.04k]
  ------------------
  658|  1.91k|	pt3.move_y (env.eval_arg (i));
  659|  2.95k|      PATH::curve (env, param, pt1, pt2, pt3);
  660|  2.95k|    }
  661|  3.54k|    else
  662|  3.54k|    {
  663|  7.72k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (663:14): [True: 4.18k, False: 3.54k]
  ------------------
  664|  4.18k|      {
  665|  4.18k|	pt1 = env.get_pt ();
  666|  4.18k|	pt1.move_y (env.eval_arg (i));
  667|  4.18k|	pt2 = pt1;
  668|  4.18k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  669|  4.18k|	pt3 = pt2;
  670|  4.18k|	pt3.move_x (env.eval_arg (i+3));
  671|  4.18k|	PATH::curve (env, param, pt1, pt2, pt3);
  672|       |
  673|  4.18k|	pt1 = pt3;
  674|  4.18k|	pt1.move_x (env.eval_arg (i+4));
  675|  4.18k|	pt2 = pt1;
  676|  4.18k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  677|  4.18k|	pt3 = pt2;
  678|  4.18k|	pt3.move_y (env.eval_arg (i+7));
  679|  4.18k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (679:6): [True: 2.94k, False: 1.23k]
  |  Branch (679:46): [True: 749, False: 2.20k]
  ------------------
  680|    749|	  pt3.move_x (env.eval_arg (i+8));
  681|  4.18k|	PATH::curve (env, param, pt1, pt2, pt3);
  682|  4.18k|      }
  683|  3.54k|    }
  684|  6.49k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE9hvcurvetoERS4_RS5_:
  687|  2.86k|  {
  688|  2.86k|    point_t pt1, pt2, pt3;
  689|  2.86k|    unsigned int i = 0;
  690|  2.86k|    if ((env.argStack.get_count () % 8) >= 4)
  ------------------
  |  Branch (690:9): [True: 1.32k, False: 1.53k]
  ------------------
  691|  1.32k|    {
  692|  1.32k|      point_t pt1 = env.get_pt ();
  693|  1.32k|      pt1.move_x (env.eval_arg (i));
  694|  1.32k|      point_t pt2 = pt1;
  695|  1.32k|      pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  696|  1.32k|      point_t pt3 = pt2;
  697|  1.32k|      pt3.move_y (env.eval_arg (i+3));
  698|  1.32k|      i += 4;
  699|       |
  700|  2.15k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (700:14): [True: 831, False: 1.32k]
  ------------------
  701|    831|      {
  702|    831|	PATH::curve (env, param, pt1, pt2, pt3);
  703|    831|	pt1 = env.get_pt ();
  704|    831|	pt1.move_y (env.eval_arg (i));
  705|    831|	pt2 = pt1;
  706|    831|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  707|    831|	pt3 = pt2;
  708|    831|	pt3.move_x (env.eval_arg (i+3));
  709|    831|	PATH::curve (env, param, pt1, pt2, pt3);
  710|       |
  711|    831|	pt1 = pt3;
  712|    831|	pt1.move_x (env.eval_arg (i+4));
  713|    831|	pt2 = pt1;
  714|    831|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  715|    831|	pt3 = pt2;
  716|    831|	pt3.move_y (env.eval_arg (i+7));
  717|    831|      }
  718|  1.32k|      if (i < env.argStack.get_count ())
  ------------------
  |  Branch (718:11): [True: 804, False: 520]
  ------------------
  719|    804|	pt3.move_x (env.eval_arg (i));
  720|  1.32k|      PATH::curve (env, param, pt1, pt2, pt3);
  721|  1.32k|    }
  722|  1.53k|    else
  723|  1.53k|    {
  724|  3.61k|      for (; i + 8 <= env.argStack.get_count (); i += 8)
  ------------------
  |  Branch (724:14): [True: 2.08k, False: 1.53k]
  ------------------
  725|  2.08k|      {
  726|  2.08k|	pt1 = env.get_pt ();
  727|  2.08k|	pt1.move_x (env.eval_arg (i));
  728|  2.08k|	pt2 = pt1;
  729|  2.08k|	pt2.move (env.eval_arg (i+1), env.eval_arg (i+2));
  730|  2.08k|	pt3 = pt2;
  731|  2.08k|	pt3.move_y (env.eval_arg (i+3));
  732|  2.08k|	PATH::curve (env, param, pt1, pt2, pt3);
  733|       |
  734|  2.08k|	pt1 = pt3;
  735|  2.08k|	pt1.move_y (env.eval_arg (i+4));
  736|  2.08k|	pt2 = pt1;
  737|  2.08k|	pt2.move (env.eval_arg (i+5), env.eval_arg (i+6));
  738|  2.08k|	pt3 = pt2;
  739|  2.08k|	pt3.move_x (env.eval_arg (i+7));
  740|  2.08k|	if ((env.argStack.get_count () - i < 16) && ((env.argStack.get_count () & 1) != 0))
  ------------------
  |  Branch (740:6): [True: 960, False: 1.12k]
  |  Branch (740:46): [True: 567, False: 393]
  ------------------
  741|    567|	  pt3.move_y (env.eval_arg (i+8));
  742|  2.08k|	PATH::curve (env, param, pt1, pt2, pt3);
  743|  2.08k|      }
  744|  1.53k|    }
  745|  2.86k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE5hflexERS4_RS5_:
  758|    786|  {
  759|    786|    if (likely (env.argStack.get_count () == 7))
  ------------------
  |  |  258|    786|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 551, False: 235]
  |  |  ------------------
  ------------------
  760|    551|    {
  761|    551|      point_t pt1 = env.get_pt ();
  762|    551|      pt1.move_x (env.eval_arg (0));
  763|    551|      point_t pt2 = pt1;
  764|    551|      pt2.move (env.eval_arg (1), env.eval_arg (2));
  765|    551|      point_t pt3 = pt2;
  766|    551|      pt3.move_x (env.eval_arg (3));
  767|    551|      point_t pt4 = pt3;
  768|    551|      pt4.move_x (env.eval_arg (4));
  769|    551|      point_t pt5 = pt4;
  770|    551|      pt5.move_x (env.eval_arg (5));
  771|    551|      pt5.y = pt1.y;
  772|    551|      point_t pt6 = pt5;
  773|    551|      pt6.move_x (env.eval_arg (6));
  774|       |
  775|    551|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  776|    551|    }
  777|    235|    else
  778|    235|      env.set_error ();
  779|    786|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE6curve2ERS4_RS5_RKNS_7point_tESB_SB_SB_SB_SB_:
  869|    841|  {
  870|    841|    PATH::curve (env, param, pt1, pt2, pt3);
  871|    841|    PATH::curve (env, param, pt4, pt5, pt6);
  872|    841|  }
_ZN3CFF10cs_opset_tINS_8number_tE20cff2_cs_opset_path_tNS_20cff2_cs_interp_env_tIS1_EE17cff2_path_param_t22cff2_path_procs_path_tE17process_post_flexEjRS4_RS5_:
  387|  1.62k|  {
  388|  1.62k|    OPSET::flush_args_and_op (op, env, param);
  389|  1.62k|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE4flexERS4_RS5_:
  782|     93|  {
  783|     93|    if (likely (env.argStack.get_count () == 13))
  ------------------
  |  |  258|     93|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 16, False: 77]
  |  |  ------------------
  ------------------
  784|     16|    {
  785|     16|      point_t pt1 = env.get_pt ();
  786|     16|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  787|     16|      point_t pt2 = pt1;
  788|     16|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  789|     16|      point_t pt3 = pt2;
  790|     16|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  791|     16|      point_t pt4 = pt3;
  792|     16|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  793|     16|      point_t pt5 = pt4;
  794|     16|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  795|     16|      point_t pt6 = pt5;
  796|     16|      pt6.move (env.eval_arg (10), env.eval_arg (11));
  797|       |
  798|     16|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  799|     16|    }
  800|     77|    else
  801|     77|      env.set_error ();
  802|     93|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE6hflex1ERS4_RS5_:
  805|    313|  {
  806|    313|    if (likely (env.argStack.get_count () == 9))
  ------------------
  |  |  258|    313|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 52, False: 261]
  |  |  ------------------
  ------------------
  807|     52|    {
  808|     52|      point_t pt1 = env.get_pt ();
  809|     52|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  810|     52|      point_t pt2 = pt1;
  811|     52|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  812|     52|      point_t pt3 = pt2;
  813|     52|      pt3.move_x (env.eval_arg (4));
  814|     52|      point_t pt4 = pt3;
  815|     52|      pt4.move_x (env.eval_arg (5));
  816|     52|      point_t pt5 = pt4;
  817|     52|      pt5.move (env.eval_arg (6), env.eval_arg (7));
  818|     52|      point_t pt6 = pt5;
  819|     52|      pt6.move_x (env.eval_arg (8));
  820|     52|      pt6.y = env.get_pt ().y;
  821|       |
  822|     52|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  823|     52|    }
  824|    261|    else
  825|    261|      env.set_error ();
  826|    313|  }
_ZN3CFF12path_procs_tI22cff2_path_procs_path_tNS_20cff2_cs_interp_env_tINS_8number_tEEE17cff2_path_param_tE5flex1ERS4_RS5_:
  829|    431|  {
  830|    431|    if (likely (env.argStack.get_count () == 11))
  ------------------
  |  |  258|    431|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 222, False: 209]
  |  |  ------------------
  ------------------
  831|    222|    {
  832|    222|      point_t d;
  833|  1.33k|      for (unsigned int i = 0; i < 10; i += 2)
  ------------------
  |  Branch (833:32): [True: 1.11k, False: 222]
  ------------------
  834|  1.11k|	d.move (env.eval_arg (i), env.eval_arg (i+1));
  835|       |
  836|    222|      point_t pt1 = env.get_pt ();
  837|    222|      pt1.move (env.eval_arg (0), env.eval_arg (1));
  838|    222|      point_t pt2 = pt1;
  839|    222|      pt2.move (env.eval_arg (2), env.eval_arg (3));
  840|    222|      point_t pt3 = pt2;
  841|    222|      pt3.move (env.eval_arg (4), env.eval_arg (5));
  842|    222|      point_t pt4 = pt3;
  843|    222|      pt4.move (env.eval_arg (6), env.eval_arg (7));
  844|    222|      point_t pt5 = pt4;
  845|    222|      pt5.move (env.eval_arg (8), env.eval_arg (9));
  846|    222|      point_t pt6 = pt5;
  847|       |
  848|    222|      if (fabs (d.x.to_real ()) > fabs (d.y.to_real ()))
  ------------------
  |  Branch (848:11): [True: 127, False: 95]
  ------------------
  849|    127|      {
  850|    127|	pt6.move_x (env.eval_arg (10));
  851|    127|	pt6.y = env.get_pt ().y;
  852|    127|      }
  853|     95|      else
  854|     95|      {
  855|     95|	pt6.x = env.get_pt ().x;
  856|     95|	pt6.move_y (env.eval_arg (10));
  857|     95|      }
  858|       |
  859|    222|      curve2 (env, param, pt1, pt2, pt3, pt4, pt5, pt6);
  860|    222|    }
  861|    209|    else
  862|    209|      env.set_error ();
  863|    431|  }

_ZN3CFF17top_dict_values_tINS_19cff1_top_dict_val_tEE4finiEv:
   55|  64.3k|  void fini () { dict_values_t<OPSTR>::fini (); }
_ZN3CFF17top_dict_values_tINS_8op_str_tEE4finiEv:
   55|  63.0k|  void fini () { dict_values_t<OPSTR>::fini (); }
_ZN3CFF10dict_val_t4initEv:
   38|  48.5k|  void init () {}
_ZN3CFF12dict_opset_t10process_opEjRNS_12interp_env_tINS_8number_tEEE:
   64|   194k|  {
   65|   194k|    switch (op) {
   66|  4.90k|      case OpCode_longintdict:  /* 5-byte integer */
  ------------------
  |  |   72|  4.90k|#define OpCode_longintdict	 29 /* 32-bit integer, All */
  ------------------
  |  Branch (66:7): [True: 4.90k, False: 189k]
  ------------------
   67|  4.90k|	env.argStack.push_longint_from_substr (env.str_ref);
   68|  4.90k|	break;
   69|       |
   70|  1.94k|      case OpCode_BCD:  /* real number */
  ------------------
  |  |   73|  1.94k|#define OpCode_BCD		 30 /* Real number, CFF2 Top/FD */
  ------------------
  |  Branch (70:7): [True: 1.94k, False: 192k]
  ------------------
   71|  1.94k|	env.argStack.push_real (parse_bcd (env.str_ref));
   72|  1.94k|	break;
   73|       |
   74|   187k|      default:
  ------------------
  |  Branch (74:7): [True: 187k, False: 6.85k]
  ------------------
   75|   187k|	opset_t<number_t>::process_op (op, env);
   76|   187k|	break;
   77|   194k|    }
   78|   194k|  }
_ZN3CFF12dict_opset_t9parse_bcdERNS_14byte_str_ref_tE:
   82|  1.94k|  {
   83|  1.94k|    if (unlikely (str_ref.in_error ())) return .0;
  ------------------
  |  |  259|  1.94k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.94k]
  |  |  ------------------
  ------------------
   84|       |
   85|  1.94k|    enum Nibble { DECIMAL=10, EXP_POS, EXP_NEG, RESERVED, NEG, END };
   86|       |
   87|  1.94k|    char buf[32];
   88|  1.94k|    unsigned char byte = 0;
   89|  20.7k|    for (unsigned i = 0, count = 0; count < ARRAY_LENGTH (buf); ++i, ++count)
  ------------------
  |  Branch (89:37): [True: 20.7k, False: 4]
  ------------------
   90|  20.7k|    {
   91|  20.7k|      unsigned nibble;
   92|  20.7k|      if (!(i & 1))
  ------------------
  |  Branch (92:11): [True: 10.6k, False: 10.0k]
  ------------------
   93|  10.6k|      {
   94|  10.6k|	if (unlikely (!str_ref.avail ())) break;
  ------------------
  |  |  259|  10.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 10.5k]
  |  |  ------------------
  ------------------
   95|       |
   96|  10.5k|	byte = str_ref[0];
   97|  10.5k|	str_ref.inc ();
   98|  10.5k|	nibble = byte >> 4;
   99|  10.5k|      }
  100|  10.0k|      else
  101|  10.0k|	nibble = byte & 0x0F;
  102|       |
  103|  20.6k|      if (unlikely (nibble == RESERVED)) break;
  ------------------
  |  |  259|  20.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 20.6k]
  |  |  ------------------
  ------------------
  104|  20.6k|      else if (nibble == END)
  ------------------
  |  Branch (104:16): [True: 1.91k, False: 18.7k]
  ------------------
  105|  1.91k|      {
  106|  1.91k|	const char *p = buf;
  107|  1.91k|	double pv;
  108|  1.91k|	if (unlikely (!hb_parse_double (&p, p + count, &pv, true/* whole buffer */)))
  ------------------
  |  |  259|  1.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 1.90k]
  |  |  ------------------
  ------------------
  109|     16|	  break;
  110|  1.90k|	return pv;
  111|  1.91k|      }
  112|  18.7k|      else
  113|  18.7k|      {
  114|  18.7k|	buf[count] = "0123456789.EE?-?"[nibble];
  115|  18.7k|	if (nibble == EXP_NEG)
  ------------------
  |  Branch (115:6): [True: 181, False: 18.5k]
  ------------------
  116|    181|	{
  117|    181|	  ++count;
  118|    181|	  if (unlikely (count == ARRAY_LENGTH (buf))) break;
  ------------------
  |  |  259|    181|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 180]
  |  |  ------------------
  ------------------
  119|    180|	  buf[count] = '-';
  120|    180|	}
  121|  18.7k|      }
  122|  20.6k|    }
  123|       |
  124|     46|    str_ref.set_error ();
  125|     46|    return .0;
  126|  1.94k|  }
_ZN3CFF17top_dict_values_tINS_19cff1_top_dict_val_tEE4initEv:
   50|  34.4k|  {
   51|  34.4k|    dict_values_t<OPSTR>::init ();
   52|  34.4k|    charStringsOffset = 0;
   53|  34.4k|    FDArrayOffset = 0;
   54|  34.4k|  }
_ZN3CFF16top_dict_opset_tINS_19cff1_top_dict_val_tEE10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_17top_dict_values_tIS1_EE:
  157|  32.1k|  {
  158|  32.1k|    switch (op) {
  159|  1.46k|      case OpCode_CharStrings:
  ------------------
  |  |   58|  1.46k|#define OpCode_CharStrings	 17 /* CFF Top, CFF2 Top */
  ------------------
  |  Branch (159:7): [True: 1.46k, False: 30.6k]
  ------------------
  160|  1.46k|	dictval.charStringsOffset = env.argStack.pop_uint ();
  161|  1.46k|	env.clear_args ();
  162|  1.46k|	break;
  163|    164|      case OpCode_FDArray:
  ------------------
  |  |  135|    164|#define OpCode_FDArray		Make_OpCode_ESC(36) /* CFF Top_CID, CFF2 Top */
  |  |  ------------------
  |  |  |  |   93|    164|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    164|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (163:7): [True: 164, False: 31.9k]
  ------------------
  164|    164|	dictval.FDArrayOffset = env.argStack.pop_uint ();
  165|    164|	env.clear_args ();
  166|    164|	break;
  167|     46|      case OpCode_FontMatrix:
  ------------------
  |  |  106|     46|#define OpCode_FontMatrix	Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/
  |  |  ------------------
  |  |  |  |   93|     46|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     46|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (167:7): [True: 46, False: 32.0k]
  ------------------
  168|     46|	env.clear_args ();
  169|     46|	break;
  170|  30.4k|      default:
  ------------------
  |  Branch (170:7): [True: 30.4k, False: 1.67k]
  ------------------
  171|  30.4k|	dict_opset_t::process_op (op, env);
  172|  30.4k|	break;
  173|  32.1k|    }
  174|  32.1k|  }
_ZN3CFF18dict_interpreter_tINS_21cff1_top_dict_opset_tENS_22cff1_top_dict_values_tENS_26cff1_top_dict_interp_env_tEE9interpretERS2_:
  183|  1.66k|  {
  184|  1.66k|    param.init ();
  185|  43.8k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 42.3k, False: 1.50k]
  ------------------
  186|  42.3k|    {
  187|  42.3k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  42.3k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  42.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 161, False: 42.1k]
  |  |  ------------------
  ------------------
  189|    161|	return false;
  190|  42.3k|    }
  191|       |
  192|  1.50k|    return true;
  193|  1.66k|  }
_ZN3CFF18dict_interpreter_tINS_22cff1_font_dict_opset_tENS_23cff1_font_dict_values_tENS_12interp_env_tINS_8number_tEEEE9interpretERS2_:
  183|  23.5k|  {
  184|  23.5k|    param.init ();
  185|  74.4k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 50.9k, False: 23.5k]
  ------------------
  186|  50.9k|    {
  187|  50.9k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  50.9k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  50.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67, False: 50.8k]
  |  |  ------------------
  ------------------
  189|     67|	return false;
  190|  50.9k|    }
  191|       |
  192|  23.5k|    return true;
  193|  23.5k|  }
_ZN3CFF18dict_interpreter_tINS_25cff1_private_dict_opset_tENS_31cff1_private_dict_values_base_tINS_10dict_val_tEEENS_12interp_env_tINS_8number_tEEEE9interpretERS4_:
  183|  24.7k|  {
  184|  24.7k|    param.init ();
  185|  47.1k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 22.4k, False: 24.7k]
  ------------------
  186|  22.4k|    {
  187|  22.4k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  22.4k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  22.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 48, False: 22.4k]
  |  |  ------------------
  ------------------
  189|     48|	return false;
  190|  22.4k|    }
  191|       |
  192|  24.7k|    return true;
  193|  24.7k|  }
_ZN3CFF17top_dict_values_tINS_8op_str_tEE4initEv:
   50|  34.4k|  {
   51|  34.4k|    dict_values_t<OPSTR>::init ();
   52|  34.4k|    charStringsOffset = 0;
   53|  34.4k|    FDArrayOffset = 0;
   54|  34.4k|  }
_ZN3CFF16top_dict_opset_tINS_8op_str_tEE10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_17top_dict_values_tIS1_EE:
  157|  11.5k|  {
  158|  11.5k|    switch (op) {
  159|  1.12k|      case OpCode_CharStrings:
  ------------------
  |  |   58|  1.12k|#define OpCode_CharStrings	 17 /* CFF Top, CFF2 Top */
  ------------------
  |  Branch (159:7): [True: 1.12k, False: 10.4k]
  ------------------
  160|  1.12k|	dictval.charStringsOffset = env.argStack.pop_uint ();
  161|  1.12k|	env.clear_args ();
  162|  1.12k|	break;
  163|  1.11k|      case OpCode_FDArray:
  ------------------
  |  |  135|  1.11k|#define OpCode_FDArray		Make_OpCode_ESC(36) /* CFF Top_CID, CFF2 Top */
  |  |  ------------------
  |  |  |  |   93|  1.11k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.11k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (163:7): [True: 1.11k, False: 10.4k]
  ------------------
  164|  1.11k|	dictval.FDArrayOffset = env.argStack.pop_uint ();
  165|  1.11k|	env.clear_args ();
  166|  1.11k|	break;
  167|      0|      case OpCode_FontMatrix:
  ------------------
  |  |  106|      0|#define OpCode_FontMatrix	Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/
  |  |  ------------------
  |  |  |  |   93|      0|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|      0|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (167:7): [True: 0, False: 11.5k]
  ------------------
  168|      0|	env.clear_args ();
  169|      0|	break;
  170|  9.35k|      default:
  ------------------
  |  Branch (170:7): [True: 9.35k, False: 2.23k]
  ------------------
  171|  9.35k|	dict_opset_t::process_op (op, env);
  172|  9.35k|	break;
  173|  11.5k|    }
  174|  11.5k|  }
_ZN3CFF18dict_interpreter_tINS_21cff2_top_dict_opset_tENS_22cff2_top_dict_values_tENS_12interp_env_tINS_8number_tEEEE9interpretERS2_:
  183|  1.24k|  {
  184|  1.24k|    param.init ();
  185|  13.2k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 12.1k, False: 1.10k]
  ------------------
  186|  12.1k|    {
  187|  12.1k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  12.1k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  12.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 136, False: 12.0k]
  |  |  ------------------
  ------------------
  189|    136|	return false;
  190|  12.1k|    }
  191|       |
  192|  1.10k|    return true;
  193|  1.24k|  }
_ZN3CFF18dict_interpreter_tINS_22cff2_font_dict_opset_tENS_23cff2_font_dict_values_tENS_12interp_env_tINS_8number_tEEEE9interpretERS2_:
  183|  46.2k|  {
  184|  46.2k|    param.init ();
  185|   117k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 71.1k, False: 46.1k]
  ------------------
  186|  71.1k|    {
  187|  71.1k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  71.1k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  71.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 73, False: 71.1k]
  |  |  ------------------
  ------------------
  189|     73|	return false;
  190|  71.1k|    }
  191|       |
  192|  46.1k|    return true;
  193|  46.2k|  }
_ZN3CFF18dict_interpreter_tINS_25cff2_private_dict_opset_tENS_31cff2_private_dict_values_base_tINS_10dict_val_tEEENS_27cff2_priv_dict_interp_env_tEE9interpretERS4_:
  183|  46.1k|  {
  184|  46.1k|    param.init ();
  185|  71.9k|    while (SUPER::env.str_ref.avail ())
  ------------------
  |  Branch (185:12): [True: 25.7k, False: 46.1k]
  ------------------
  186|  25.7k|    {
  187|  25.7k|      OPSET::process_op (SUPER::env.fetch_op (), SUPER::env, param);
  188|  25.7k|      if (unlikely (SUPER::env.in_error ()))
  ------------------
  |  |  259|  25.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33, False: 25.7k]
  |  |  ------------------
  ------------------
  189|     33|	return false;
  190|  25.7k|    }
  191|       |
  192|  46.1k|    return true;
  193|  46.1k|  }
_ZN3CFF18dict_interpreter_tINS_21cff1_top_dict_opset_tENS_22cff1_top_dict_values_tENS_26cff1_top_dict_interp_env_tEEC2ERS3_:
  180|  1.66k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF18dict_interpreter_tINS_22cff1_font_dict_opset_tENS_23cff1_font_dict_values_tENS_12interp_env_tINS_8number_tEEEEC2ERS5_:
  180|  23.5k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF18dict_interpreter_tINS_25cff1_private_dict_opset_tENS_31cff1_private_dict_values_base_tINS_10dict_val_tEEENS_12interp_env_tINS_8number_tEEEEC2ERS7_:
  180|  24.7k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF18dict_interpreter_tINS_21cff2_top_dict_opset_tENS_22cff2_top_dict_values_tENS_12interp_env_tINS_8number_tEEEEC2ERS5_:
  180|  1.24k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF18dict_interpreter_tINS_22cff2_font_dict_opset_tENS_23cff2_font_dict_values_tENS_12interp_env_tINS_8number_tEEEEC2ERS5_:
  180|  46.2k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}
_ZN3CFF18dict_interpreter_tINS_25cff2_private_dict_opset_tENS_31cff2_private_dict_values_base_tINS_10dict_val_tEEENS_27cff2_priv_dict_interp_env_tEEC2ERS5_:
  180|  46.1k|  dict_interpreter_t (ENV& env_) : interpreter_t<ENV> (env_) {}

_ZN3CFF20cff1_cs_interp_env_t11set_in_seacEb:
   71|   274k|  void set_in_seac (bool _in_seac) { in_seac = _in_seac; }
_ZN3CFF15cff1_cs_opset_tI23cff1_cs_opset_extents_t20cff1_extents_param_t25cff1_path_procs_extents_tE10process_opEjRNS_20cff1_cs_interp_env_tERS2_:
   90|  2.14M|  {
   91|  2.14M|    switch (op) {
   92|    441|      case OpCode_dotsection:
  ------------------
  |  |  177|    441|#define OpCode_dotsection	Make_OpCode_ESC(0) /* CFF (obsoleted) */
  |  |  ------------------
  |  |  |  |   93|    441|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    441|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (92:7): [True: 441, False: 2.14M]
  ------------------
   93|    441|	SUPER::flush_args_and_op (op, env, param);
   94|    441|	break;
   95|       |
   96|   162k|      case OpCode_endchar:
  ------------------
  |  |  155|   162k|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (96:7): [True: 162k, False: 1.98M]
  ------------------
   97|   162k|	OPSET::check_width (op, env, param);
   98|   162k|	if (env.argStack.get_count () >= 4)
  ------------------
  |  Branch (98:6): [True: 10.5k, False: 152k]
  ------------------
   99|  10.5k|	{
  100|  10.5k|	  OPSET::process_seac (env, param);
  101|  10.5k|	}
  102|   162k|	OPSET::flush_args_and_op (op, env, param);
  103|   162k|	env.set_endchar (true);
  104|   162k|	break;
  105|       |
  106|  1.97M|      default:
  ------------------
  |  Branch (106:7): [True: 1.97M, False: 163k]
  ------------------
  107|  1.97M|	SUPER::process_op (op, env, param);
  108|  2.14M|    }
  109|  2.14M|  }
_ZN3CFF15cff1_cs_opset_tI23cff1_cs_opset_extents_t20cff1_extents_param_t25cff1_path_procs_extents_tE10flush_argsERNS_20cff1_cs_interp_env_tERS2_:
  146|   400k|  {
  147|   400k|    SUPER::flush_args (env, param);
  148|   400k|    env.clear_args ();  /* pop off width */
  149|   400k|  }
_ZN3CFF20cff1_cs_interp_env_t10clear_argsEv:
   66|   423k|  {
   67|   423k|    arg_start = 0;
   68|   423k|    SUPER::clear_args ();
   69|   423k|  }
_ZN3CFF15cff1_cs_opset_tI23cff1_cs_opset_extents_t20cff1_extents_param_t25cff1_path_procs_extents_tE11check_widthEjRNS_20cff1_cs_interp_env_tERS2_:
  112|   267k|  {
  113|   267k|    if (!env.processed_width)
  ------------------
  |  Branch (113:9): [True: 219k, False: 48.7k]
  ------------------
  114|   219k|    {
  115|   219k|      bool  has_width = false;
  116|   219k|      switch (op)
  117|   219k|      {
  118|   157k|	case OpCode_endchar:
  ------------------
  |  |  155|   157k|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (118:2): [True: 157k, False: 62.1k]
  ------------------
  119|   161k|	case OpCode_hstem:
  ------------------
  |  |  142|   161k|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (119:2): [True: 4.45k, False: 214k]
  ------------------
  120|   170k|	case OpCode_hstemhm:
  ------------------
  |  |  159|   170k|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (120:2): [True: 9.00k, False: 210k]
  ------------------
  121|   171k|	case OpCode_vstem:
  ------------------
  |  |  144|   171k|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (121:2): [True: 1.01k, False: 218k]
  ------------------
  122|   200k|	case OpCode_vstemhm:
  ------------------
  |  |  164|   200k|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (122:2): [True: 29.2k, False: 189k]
  ------------------
  123|   204k|	case OpCode_hintmask:
  ------------------
  |  |  160|   204k|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (123:2): [True: 3.42k, False: 215k]
  ------------------
  124|   207k|	case OpCode_cntrmask:
  ------------------
  |  |  161|   207k|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (124:2): [True: 3.41k, False: 215k]
  ------------------
  125|   207k|	  has_width = ((env.argStack.get_count () & 1) != 0);
  126|   207k|	  break;
  127|  4.89k|	case OpCode_hmoveto:
  ------------------
  |  |  163|  4.89k|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (127:2): [True: 4.89k, False: 214k]
  ------------------
  128|  8.62k|	case OpCode_vmoveto:
  ------------------
  |  |  145|  8.62k|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (128:2): [True: 3.72k, False: 215k]
  ------------------
  129|  8.62k|	  has_width = (env.argStack.get_count () > 1);
  130|  8.62k|	  break;
  131|  3.02k|	case OpCode_rmoveto:
  ------------------
  |  |  162|  3.02k|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (131:2): [True: 3.02k, False: 216k]
  ------------------
  132|  3.02k|	  has_width = (env.argStack.get_count () > 2);
  133|  3.02k|	  break;
  134|      0|	default:
  ------------------
  |  Branch (134:2): [True: 0, False: 219k]
  ------------------
  135|      0|	  return;
  136|   219k|      }
  137|   219k|      env.set_width (has_width);
  138|   219k|    }
  139|   267k|  }
_ZN3CFF20cff1_cs_interp_env_t9set_widthEb:
   52|   220k|  {
   53|   220k|    if (likely (!processed_width && (SUPER::argStack.get_count () > 0)))
  ------------------
  |  |  258|   440k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 189k, False: 30.9k]
  |  |  |  Branch (258:45): [True: 220k, False: 0]
  |  |  |  Branch (258:45): [True: 189k, False: 30.9k]
  |  |  ------------------
  ------------------
   54|   189k|    {
   55|   189k|      if (has_width_)
  ------------------
  |  Branch (55:11): [True: 159k, False: 29.1k]
  ------------------
   56|   159k|      {
   57|   159k|	width = SUPER::argStack[0];
   58|   159k|	has_width = true;
   59|   159k|	arg_start = 1;
   60|   159k|      }
   61|   189k|    }
   62|   220k|    processed_width = true;
   63|   220k|  }
_ZN3CFF15cff1_cs_opset_tI20cff1_cs_opset_path_t17cff1_path_param_t22cff1_path_procs_path_tE10process_opEjRNS_20cff1_cs_interp_env_tERS2_:
   90|   128k|  {
   91|   128k|    switch (op) {
   92|    130|      case OpCode_dotsection:
  ------------------
  |  |  177|    130|#define OpCode_dotsection	Make_OpCode_ESC(0) /* CFF (obsoleted) */
  |  |  ------------------
  |  |  |  |   93|    130|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    130|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (92:7): [True: 130, False: 128k]
  ------------------
   93|    130|	SUPER::flush_args_and_op (op, env, param);
   94|    130|	break;
   95|       |
   96|    484|      case OpCode_endchar:
  ------------------
  |  |  155|    484|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (96:7): [True: 484, False: 127k]
  ------------------
   97|    484|	OPSET::check_width (op, env, param);
   98|    484|	if (env.argStack.get_count () >= 4)
  ------------------
  |  Branch (98:6): [True: 215, False: 269]
  ------------------
   99|    215|	{
  100|    215|	  OPSET::process_seac (env, param);
  101|    215|	}
  102|    484|	OPSET::flush_args_and_op (op, env, param);
  103|    484|	env.set_endchar (true);
  104|    484|	break;
  105|       |
  106|   127k|      default:
  ------------------
  |  Branch (106:7): [True: 127k, False: 614]
  ------------------
  107|   127k|	SUPER::process_op (op, env, param);
  108|   128k|    }
  109|   128k|  }
_ZN3CFF15cff1_cs_opset_tI20cff1_cs_opset_path_t17cff1_path_param_t22cff1_path_procs_path_tE10flush_argsERNS_20cff1_cs_interp_env_tERS2_:
  146|  23.4k|  {
  147|  23.4k|    SUPER::flush_args (env, param);
  148|  23.4k|    env.clear_args ();  /* pop off width */
  149|  23.4k|  }
_ZN3CFF15cff1_cs_opset_tI20cff1_cs_opset_path_t17cff1_path_param_t22cff1_path_procs_path_tE11check_widthEjRNS_20cff1_cs_interp_env_tERS2_:
  112|  7.58k|  {
  113|  7.58k|    if (!env.processed_width)
  ------------------
  |  Branch (113:9): [True: 826, False: 6.75k]
  ------------------
  114|    826|    {
  115|    826|      bool  has_width = false;
  116|    826|      switch (op)
  117|    826|      {
  118|    138|	case OpCode_endchar:
  ------------------
  |  |  155|    138|#define OpCode_endchar		 14 /* CFF */
  ------------------
  |  Branch (118:2): [True: 138, False: 688]
  ------------------
  119|    248|	case OpCode_hstem:
  ------------------
  |  |  142|    248|#define OpCode_hstem		  1 /* CFF, CFF2 */
  ------------------
  |  Branch (119:2): [True: 110, False: 716]
  ------------------
  120|    326|	case OpCode_hstemhm:
  ------------------
  |  |  159|    326|#define OpCode_hstemhm		 18 /* CFF, CFF2 */
  ------------------
  |  Branch (120:2): [True: 78, False: 748]
  ------------------
  121|    421|	case OpCode_vstem:
  ------------------
  |  |  144|    421|#define OpCode_vstem		  3 /* CFF, CFF2 */
  ------------------
  |  Branch (121:2): [True: 95, False: 731]
  ------------------
  122|    462|	case OpCode_vstemhm:
  ------------------
  |  |  164|    462|#define OpCode_vstemhm		 23 /* CFF, CFF2 */
  ------------------
  |  Branch (122:2): [True: 41, False: 785]
  ------------------
  123|    491|	case OpCode_hintmask:
  ------------------
  |  |  160|    491|#define OpCode_hintmask		 19 /* CFF, CFF2 */
  ------------------
  |  Branch (123:2): [True: 29, False: 797]
  ------------------
  124|    550|	case OpCode_cntrmask:
  ------------------
  |  |  161|    550|#define OpCode_cntrmask		 20 /* CFF, CFF2 */
  ------------------
  |  Branch (124:2): [True: 59, False: 767]
  ------------------
  125|    550|	  has_width = ((env.argStack.get_count () & 1) != 0);
  126|    550|	  break;
  127|     68|	case OpCode_hmoveto:
  ------------------
  |  |  163|     68|#define OpCode_hmoveto		 22 /* CFF, CFF2 */
  ------------------
  |  Branch (127:2): [True: 68, False: 758]
  ------------------
  128|    219|	case OpCode_vmoveto:
  ------------------
  |  |  145|    219|#define OpCode_vmoveto		  4 /* CFF, CFF2 */
  ------------------
  |  Branch (128:2): [True: 151, False: 675]
  ------------------
  129|    219|	  has_width = (env.argStack.get_count () > 1);
  130|    219|	  break;
  131|     57|	case OpCode_rmoveto:
  ------------------
  |  |  162|     57|#define OpCode_rmoveto		 21 /* CFF, CFF2 */
  ------------------
  |  Branch (131:2): [True: 57, False: 769]
  ------------------
  132|     57|	  has_width = (env.argStack.get_count () > 2);
  133|     57|	  break;
  134|      0|	default:
  ------------------
  |  Branch (134:2): [True: 0, False: 826]
  ------------------
  135|      0|	  return;
  136|    826|      }
  137|    826|      env.set_width (has_width);
  138|    826|    }
  139|  7.58k|  }
_ZN3CFF20cff1_cs_interp_env_tC2IKN2OT4cff113accelerator_tEEERK10hb_array_tIKhERT_jPKij:
   44|   274k|  {
   45|   274k|    processed_width = false;
   46|   274k|    has_width = false;
   47|   274k|    arg_start = 0;
   48|   274k|    in_seac = false;
   49|   274k|  }

_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEEC2IKN2OT4cff213accelerator_tEEERK10hb_array_tIKhERT_jPKij:
   75|  12.0k|  {
   76|  12.0k|    coords = coords_;
   77|  12.0k|    num_coords = num_coords_;
   78|  12.0k|    varStore = acc.varStore;
   79|  12.0k|    seen_blend = false;
   80|  12.0k|    seen_vsindex_ = false;
   81|  12.0k|    scalars.init ();
   82|  12.0k|    do_blend = num_coords && coords && varStore->size;
  ------------------
  |  Branch (82:16): [True: 63, False: 12.0k]
  |  Branch (82:30): [True: 63, False: 0]
  |  Branch (82:40): [True: 63, False: 0]
  ------------------
   83|  12.0k|    set_ivs (acc.privateDicts[fd].ivs);
   84|  12.0k|  }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE7set_ivsEj:
  148|  13.1k|  void	 set_ivs (unsigned int ivs_) { ivs = ivs_; }
_ZN3CFF15cff2_cs_opset_tI23cff2_cs_opset_extents_t20cff2_extents_param_tNS_8number_tE25cff2_path_procs_extents_tE10process_opEjRNS_20cff2_cs_interp_env_tIS3_EERS2_:
  185|   959k|  {
  186|   959k|    switch (op) {
  187|    334|      case OpCode_callsubr:
  ------------------
  |  |  151|    334|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (187:7): [True: 334, False: 958k]
  ------------------
  188|  18.4k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  18.4k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (188:7): [True: 18.1k, False: 941k]
  ------------------
  189|       |	/* a subroutine number shouldn't be a blended value */
  190|       |#if 0
  191|       |	if (unlikely (env.argStack.peek ().blending ()))
  192|       |	{
  193|       |	  env.set_error ();
  194|       |	  break;
  195|       |	}
  196|       |#endif
  197|  18.4k|	SUPER::process_op (op, env, param);
  198|  18.4k|	break;
  199|       |
  200|  2.09k|      case OpCode_blendcs:
  ------------------
  |  |  157|  2.09k|#define OpCode_blendcs		 16 /* CFF2 */
  ------------------
  |  Branch (200:7): [True: 2.09k, False: 957k]
  ------------------
  201|  2.09k|	OPSET::process_blend (env, param);
  202|  2.09k|	break;
  203|       |
  204|    115|      case OpCode_vsindexcs:
  ------------------
  |  |  156|    115|#define OpCode_vsindexcs	 15 /* CFF2 */
  ------------------
  |  Branch (204:7): [True: 115, False: 959k]
  ------------------
  205|       |#if 0
  206|       |	if (unlikely (env.argStack.peek ().blending ()))
  207|       |	{
  208|       |	  env.set_error ();
  209|       |	  break;
  210|       |	}
  211|       |#endif
  212|    115|	OPSET::process_vsindex (env, param);
  213|    115|	break;
  214|       |
  215|   938k|      default:
  ------------------
  |  Branch (215:7): [True: 938k, False: 20.6k]
  ------------------
  216|   938k|	SUPER::process_op (op, env, param);
  217|   959k|    }
  218|   959k|  }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE7pop_argEv:
  110|  52.5k|  {
  111|  52.5k|    return SUPER::argStack.pop ();
  112|  52.5k|  }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE8eval_argEj:
  105|   588k|  {
  106|   588k|    return SUPER::argStack[i];
  107|   588k|  }
_ZN3CFF15cff2_cs_opset_tI23cff2_cs_opset_extents_t20cff2_extents_param_tNS_8number_tE25cff2_path_procs_extents_tE13process_blendERNS_20cff2_cs_interp_env_tIS3_EERS2_:
  243|  2.09k|  {
  244|  2.09k|    unsigned int n, k;
  245|       |
  246|  2.09k|    env.process_blend ();
  247|  2.09k|    k = env.get_region_count ();
  248|  2.09k|    n = env.argStack.pop_uint ();
  249|       |    /* copy the blend values into blend array of the default values */
  250|  2.09k|    unsigned int start = env.argStack.get_count () - ((k+1) * n);
  251|       |    /* let an obvious error case fail, but note CFF2 spec doesn't forbid n==0 */
  252|  2.09k|    if (unlikely (start > env.argStack.get_count ()))
  ------------------
  |  |  259|  2.09k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 41, False: 2.05k]
  |  |  ------------------
  ------------------
  253|     41|    {
  254|     41|      env.set_error ();
  255|     41|      return;
  256|     41|    }
  257|  4.14k|    for (unsigned int i = 0; i < n; i++)
  ------------------
  |  Branch (257:30): [True: 2.09k, False: 2.05k]
  ------------------
  258|  2.09k|    {
  259|  2.09k|      const hb_array_t<const ELEM> blends = env.argStack.sub_array (start + n + (i * k), k);
  260|  2.09k|      process_arg_blend (env, env.argStack[start + i], blends, n, i);
  261|  2.09k|    }
  262|       |
  263|       |    /* pop off blend values leaving default values now adorned with blend values */
  264|  2.05k|    env.argStack.pop (k * n);
  265|  2.05k|  }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE13process_blendEv:
  115|  4.09k|  {
  116|  4.09k|    if (!seen_blend)
  ------------------
  |  Branch (116:9): [True: 1.50k, False: 2.58k]
  ------------------
  117|  1.50k|    {
  118|  1.50k|      region_count = varStore->varStore.get_region_index_count (get_ivs ());
  119|  1.50k|      if (do_blend)
  ------------------
  |  Branch (119:11): [True: 55, False: 1.45k]
  ------------------
  120|     55|      {
  121|     55|	if (unlikely (!scalars.resize_exact (region_count)))
  ------------------
  |  |  259|     55|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 54]
  |  |  ------------------
  ------------------
  122|      1|	  SUPER::set_error ();
  123|     54|	else
  124|     54|	  varStore->varStore.get_region_scalars (get_ivs (), coords, num_coords,
  125|     54|						 &scalars[0], region_count);
  126|     55|      }
  127|  1.50k|      seen_blend = true;
  128|  1.50k|    }
  129|  4.09k|  }
_ZNK3CFF20cff2_cs_interp_env_tINS_8number_tEE7get_ivsEv:
  147|  1.55k|  unsigned int get_ivs () const { return ivs; }
_ZNK3CFF20cff2_cs_interp_env_tINS_8number_tEE16get_region_countEv:
  145|  4.09k|  unsigned int get_region_count () const { return region_count; }
_ZN3CFF15cff2_cs_opset_tI23cff2_cs_opset_extents_t20cff2_extents_param_tNS_8number_tE25cff2_path_procs_extents_tE17process_arg_blendIS3_LPv0EEEvRNS_20cff2_cs_interp_env_tIS3_EERS3_10hb_array_tIKS3_Ejj:
  238|  2.09k|  {
  239|  2.09k|    arg.set_real (arg.to_real () + env.blend_deltas (blends));
  240|  2.09k|  }
_ZNK3CFF20cff2_cs_interp_env_tINS_8number_tEE12blend_deltasE10hb_array_tIKS1_E:
  152|  3.87k|  {
  153|  3.87k|    double v = 0;
  154|  3.87k|    if (do_blend)
  ------------------
  |  Branch (154:9): [True: 619, False: 3.25k]
  ------------------
  155|    619|    {
  156|    619|      if (likely (scalars.length == deltas.length))
  ------------------
  |  |  258|    619|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 618, False: 1]
  |  |  ------------------
  ------------------
  157|    618|      {
  158|    618|        unsigned count = scalars.length;
  159|  2.51k|	for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (159:23): [True: 1.89k, False: 618]
  ------------------
  160|  1.89k|	  v += (double) scalars.arrayZ[i] * deltas.arrayZ[i].to_real ();
  161|    618|      }
  162|    619|    }
  163|  3.87k|    return v;
  164|  3.87k|  }
_ZN3CFF15cff2_cs_opset_tI23cff2_cs_opset_extents_t20cff2_extents_param_tNS_8number_tE25cff2_path_procs_extents_tE15process_vsindexERNS_20cff2_cs_interp_env_tIS3_EERS2_:
  268|    115|  {
  269|    115|    env.process_vsindex ();
  270|    115|    env.clear_args ();
  271|    115|  }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE15process_vsindexEv:
  132|  1.21k|  {
  133|  1.21k|    unsigned int  index = SUPER::argStack.pop_uint ();
  134|  1.21k|    if (unlikely (seen_vsindex () || seen_blend))
  ------------------
  |  |  259|  2.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 148, False: 1.06k]
  |  |  |  Branch (259:47): [True: 135, False: 1.07k]
  |  |  |  Branch (259:47): [True: 13, False: 1.06k]
  |  |  ------------------
  ------------------
  135|    148|    {
  136|    148|     SUPER::set_error ();
  137|    148|    }
  138|  1.06k|    else
  139|  1.06k|    {
  140|  1.06k|      set_ivs (index);
  141|  1.06k|    }
  142|  1.21k|    seen_vsindex_ = true;
  143|  1.21k|  }
_ZNK3CFF20cff2_cs_interp_env_tINS_8number_tEE12seen_vsindexEv:
  149|  1.21k|  bool	 seen_vsindex () const { return seen_vsindex_; }
_ZN3CFF20cff2_cs_interp_env_tINS_8number_tEE8fetch_opEv:
   93|  1.91M|  {
   94|  1.91M|    if (this->str_ref.avail ())
  ------------------
  |  Branch (94:9): [True: 1.87M, False: 33.7k]
  ------------------
   95|  1.87M|      return SUPER::fetch_op ();
   96|       |
   97|       |    /* make up return or endchar op */
   98|  33.7k|    if (this->callStack.is_empty ())
  ------------------
  |  Branch (98:9): [True: 3.69k, False: 30.0k]
  ------------------
   99|  3.69k|      return OpCode_endchar;
  ------------------
  |  |  155|  3.69k|#define OpCode_endchar		 14 /* CFF */
  ------------------
  100|  30.0k|    else
  101|  30.0k|      return OpCode_return;
  ------------------
  |  |  152|  30.0k|#define OpCode_return		 11 /* CFF */
  ------------------
  102|  33.7k|  }
_ZN3CFF15cff2_cs_opset_tI20cff2_cs_opset_path_t17cff2_path_param_tNS_8number_tE22cff2_path_procs_path_tE10process_opEjRNS_20cff2_cs_interp_env_tIS3_EERS2_:
  185|   951k|  {
  186|   951k|    switch (op) {
  187|  1.73k|      case OpCode_callsubr:
  ------------------
  |  |  151|  1.73k|#define OpCode_callsubr		 10 /* CFF, CFF2 */
  ------------------
  |  Branch (187:7): [True: 1.73k, False: 949k]
  ------------------
  188|  16.7k|      case OpCode_callgsubr:
  ------------------
  |  |  170|  16.7k|#define OpCode_callgsubr	 29 /* CFF, CFF2 */
  ------------------
  |  Branch (188:7): [True: 15.0k, False: 936k]
  ------------------
  189|       |	/* a subroutine number shouldn't be a blended value */
  190|       |#if 0
  191|       |	if (unlikely (env.argStack.peek ().blending ()))
  192|       |	{
  193|       |	  env.set_error ();
  194|       |	  break;
  195|       |	}
  196|       |#endif
  197|  16.7k|	SUPER::process_op (op, env, param);
  198|  16.7k|	break;
  199|       |
  200|  1.99k|      case OpCode_blendcs:
  ------------------
  |  |  157|  1.99k|#define OpCode_blendcs		 16 /* CFF2 */
  ------------------
  |  Branch (200:7): [True: 1.99k, False: 949k]
  ------------------
  201|  1.99k|	OPSET::process_blend (env, param);
  202|  1.99k|	break;
  203|       |
  204|  1.09k|      case OpCode_vsindexcs:
  ------------------
  |  |  156|  1.09k|#define OpCode_vsindexcs	 15 /* CFF2 */
  ------------------
  |  Branch (204:7): [True: 1.09k, False: 950k]
  ------------------
  205|       |#if 0
  206|       |	if (unlikely (env.argStack.peek ().blending ()))
  207|       |	{
  208|       |	  env.set_error ();
  209|       |	  break;
  210|       |	}
  211|       |#endif
  212|  1.09k|	OPSET::process_vsindex (env, param);
  213|  1.09k|	break;
  214|       |
  215|   931k|      default:
  ------------------
  |  Branch (215:7): [True: 931k, False: 19.8k]
  ------------------
  216|   931k|	SUPER::process_op (op, env, param);
  217|   951k|    }
  218|   951k|  }
_ZN3CFF15cff2_cs_opset_tI20cff2_cs_opset_path_t17cff2_path_param_tNS_8number_tE22cff2_path_procs_path_tE13process_blendERNS_20cff2_cs_interp_env_tIS3_EERS2_:
  243|  1.99k|  {
  244|  1.99k|    unsigned int n, k;
  245|       |
  246|  1.99k|    env.process_blend ();
  247|  1.99k|    k = env.get_region_count ();
  248|  1.99k|    n = env.argStack.pop_uint ();
  249|       |    /* copy the blend values into blend array of the default values */
  250|  1.99k|    unsigned int start = env.argStack.get_count () - ((k+1) * n);
  251|       |    /* let an obvious error case fail, but note CFF2 spec doesn't forbid n==0 */
  252|  1.99k|    if (unlikely (start > env.argStack.get_count ()))
  ------------------
  |  |  259|  1.99k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 434, False: 1.56k]
  |  |  ------------------
  ------------------
  253|    434|    {
  254|    434|      env.set_error ();
  255|    434|      return;
  256|    434|    }
  257|  3.34k|    for (unsigned int i = 0; i < n; i++)
  ------------------
  |  Branch (257:30): [True: 1.77k, False: 1.56k]
  ------------------
  258|  1.77k|    {
  259|  1.77k|      const hb_array_t<const ELEM> blends = env.argStack.sub_array (start + n + (i * k), k);
  260|  1.77k|      process_arg_blend (env, env.argStack[start + i], blends, n, i);
  261|  1.77k|    }
  262|       |
  263|       |    /* pop off blend values leaving default values now adorned with blend values */
  264|  1.56k|    env.argStack.pop (k * n);
  265|  1.56k|  }
_ZN3CFF15cff2_cs_opset_tI20cff2_cs_opset_path_t17cff2_path_param_tNS_8number_tE22cff2_path_procs_path_tE17process_arg_blendIS3_LPv0EEEvRNS_20cff2_cs_interp_env_tIS3_EERS3_10hb_array_tIKS3_Ejj:
  238|  1.77k|  {
  239|  1.77k|    arg.set_real (arg.to_real () + env.blend_deltas (blends));
  240|  1.77k|  }
_ZN3CFF15cff2_cs_opset_tI20cff2_cs_opset_path_t17cff2_path_param_tNS_8number_tE22cff2_path_procs_path_tE15process_vsindexERNS_20cff2_cs_interp_env_tIS3_EERS2_:
  268|  1.09k|  {
  269|  1.09k|    env.process_vsindex ();
  270|  1.09k|    env.clear_args ();
  271|  1.09k|  }

_Z16_hb_options_initv:
   49|      1|{
   50|      1|  hb_options_union_t u;
   51|      1|  u.i = 0;
   52|      1|  u.opts.initialized = true;
   53|       |
   54|      1|  const char *c = getenv ("HB_OPTIONS");
   55|      1|  if (c)
  ------------------
  |  Branch (55:7): [True: 0, False: 1]
  ------------------
   56|      0|  {
   57|      0|    while (*c)
  ------------------
  |  Branch (57:12): [True: 0, False: 0]
  ------------------
   58|      0|    {
   59|      0|      const char *p = strchr (c, ':');
   60|      0|      if (!p)
  ------------------
  |  Branch (60:11): [True: 0, False: 0]
  ------------------
   61|      0|	p = c + strlen (c);
   62|       |
   63|      0|#define OPTION(name, symbol) \
   64|      0|	if (0 == strncmp (c, name, p - c) && strlen (name) == static_cast<size_t>(p - c)) do { u.opts.symbol = true; } while (0)
   65|       |
   66|      0|      OPTION ("uniscribe-bug-compatible", uniscribe_bug_compatible);
  ------------------
  |  |   64|      0|	if (0 == strncmp (c, name, p - c) && strlen (name) == static_cast<size_t>(p - c)) do { u.opts.symbol = true; } while (0)
  |  |  ------------------
  |  |  |  Branch (64:6): [True: 0, False: 0]
  |  |  |  Branch (64:39): [True: 0, False: 0]
  |  |  |  Branch (64:120): [Folded - Ignored]
  |  |  ------------------
  ------------------
   67|       |
   68|      0|#undef OPTION
   69|       |
   70|      0|      c = *p ? p + 1 : p;
  ------------------
  |  Branch (70:11): [True: 0, False: 0]
  ------------------
   71|      0|    }
   72|       |
   73|      0|  }
   74|       |
   75|       |  /* This is idempotent and threadsafe. */
   76|      1|  _hb_options = u.i;
   77|      1|}
hb_tag_from_string:
   98|  49.3k|{
   99|  49.3k|  char tag[4];
  100|  49.3k|  unsigned int i;
  101|       |
  102|  49.3k|  if (!str || !len || !*str)
  ------------------
  |  Branch (102:7): [True: 0, False: 49.3k]
  |  Branch (102:15): [True: 0, False: 49.3k]
  |  Branch (102:23): [True: 0, False: 49.3k]
  ------------------
  103|      0|    return HB_TAG_NONE;
  ------------------
  |  |  197|      0|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  104|       |
  105|  49.3k|  if (len < 0 || len > 4)
  ------------------
  |  Branch (105:7): [True: 0, False: 49.3k]
  |  Branch (105:18): [True: 0, False: 49.3k]
  ------------------
  106|      0|    len = 4;
  107|  98.6k|  for (i = 0; i < (unsigned) len && str[i]; i++)
  ------------------
  |  Branch (107:15): [True: 49.3k, False: 49.3k]
  |  Branch (107:37): [True: 49.3k, False: 0]
  ------------------
  108|  49.3k|    tag[i] = str[i];
  109|   197k|  for (; i < 4; i++)
  ------------------
  |  Branch (109:10): [True: 147k, False: 49.3k]
  ------------------
  110|   147k|    tag[i] = ' ';
  111|       |
  112|  49.3k|  return HB_TAG (tag[0], tag[1], tag[2], tag[3]);
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  113|  49.3k|}
hb_language_from_string:
  346|   618k|{
  347|   618k|  if (!str || !len || !*str)
  ------------------
  |  Branch (347:7): [True: 0, False: 618k]
  |  Branch (347:15): [True: 472k, False: 145k]
  |  Branch (347:23): [True: 6.77k, False: 138k]
  ------------------
  348|   479k|    return HB_LANGUAGE_INVALID;
  ------------------
  |  |  334|   479k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  349|       |
  350|   138k|  hb_language_item_t *item = nullptr;
  351|   138k|  if (len >= 0)
  ------------------
  |  Branch (351:7): [True: 128k, False: 10.2k]
  ------------------
  352|   128k|  {
  353|       |    /* NUL-terminate it. */
  354|   128k|    char strbuf[64];
  355|   128k|    len = hb_min (len, (int) sizeof (strbuf) - 1);
  356|   128k|    hb_memcpy (strbuf, str, len);
  357|   128k|    strbuf[len] = '\0';
  358|   128k|    item = lang_find_or_insert (strbuf);
  359|   128k|  }
  360|  10.2k|  else
  361|  10.2k|    item = lang_find_or_insert (str);
  362|       |
  363|   138k|  return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
  ------------------
  |  |  258|   138k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 138k, False: 18]
  |  |  ------------------
  ------------------
                return likely (item) ? item->lang : HB_LANGUAGE_INVALID;
  ------------------
  |  |  334|     18|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  364|   618k|}
hb_language_to_string:
  380|  76.6k|{
  381|  76.6k|  if (unlikely (!language)) return nullptr;
  ------------------
  |  |  259|  76.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 76.6k]
  |  |  ------------------
  ------------------
  382|       |
  383|  76.6k|  return language->s;
  384|  76.6k|}
hb_language_get_default:
  405|  65.4k|{
  406|  65.4k|  static hb_atomic_ptr_t <hb_language_t> default_language;
  407|       |
  408|  65.4k|  hb_language_t language = default_language;
  409|  65.4k|  if (unlikely (language == HB_LANGUAGE_INVALID))
  ------------------
  |  |  259|  65.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 65.4k]
  |  |  ------------------
  ------------------
  410|      1|  {
  411|      1|    language = hb_language_from_string (hb_setlocale (LC_CTYPE, nullptr), -1);
  ------------------
  |  |  493|      1|#define hb_setlocale setlocale
  ------------------
  412|      1|    (void) default_language.cmpexch (HB_LANGUAGE_INVALID, language);
  ------------------
  |  |  334|      1|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  413|      1|  }
  414|       |
  415|  65.4k|  return language;
  416|  65.4k|}
hb_language_matches:
  434|    919|{
  435|    919|  if (language == specific) return true;
  ------------------
  |  Branch (435:7): [True: 0, False: 919]
  ------------------
  436|    919|  if (!language || !specific) return false;
  ------------------
  |  Branch (436:7): [True: 694, False: 225]
  |  Branch (436:20): [True: 0, False: 225]
  ------------------
  437|       |
  438|    225|  const char *l = language->s;
  439|    225|  const char *s = specific->s;
  440|    225|  unsigned ll = strlen (l);
  441|    225|  unsigned sl = strlen (s);
  442|       |
  443|    225|  if (ll > sl)
  ------------------
  |  Branch (443:7): [True: 102, False: 123]
  ------------------
  444|    102|    return false;
  445|       |
  446|    123|  return strncmp (l, s, ll) == 0 &&
  ------------------
  |  Branch (446:10): [True: 33, False: 90]
  ------------------
  447|    123|	 (s[ll] == '\0' || s[ll] == '-');
  ------------------
  |  Branch (447:4): [True: 0, False: 33]
  |  Branch (447:21): [True: 0, False: 33]
  ------------------
  448|    225|}
hb_script_get_horizontal_direction:
  558|   630k|{
  559|       |  /* https://docs.google.com/spreadsheets/d/1Y90M0Ie3MUJ6UVCRDOypOtijlMDLNNyyLk36T6iMu0o */
  560|   630k|  switch ((hb_tag_t) script)
  ------------------
  |  Branch (560:11): [True: 624k, False: 6.11k]
  ------------------
  561|   630k|  {
  562|       |    /* Unicode-1.1 additions */
  563|  2.38k|    case HB_SCRIPT_ARABIC:
  ------------------
  |  Branch (563:5): [True: 2.38k, False: 628k]
  ------------------
  564|  3.51k|    case HB_SCRIPT_HEBREW:
  ------------------
  |  Branch (564:5): [True: 1.12k, False: 629k]
  ------------------
  565|       |
  566|       |    /* Unicode-3.0 additions */
  567|  3.99k|    case HB_SCRIPT_SYRIAC:
  ------------------
  |  Branch (567:5): [True: 486, False: 630k]
  ------------------
  568|  4.00k|    case HB_SCRIPT_THAANA:
  ------------------
  |  Branch (568:5): [True: 13, False: 630k]
  ------------------
  569|       |
  570|       |    /* Unicode-4.0 additions */
  571|  4.04k|    case HB_SCRIPT_CYPRIOT:
  ------------------
  |  Branch (571:5): [True: 33, False: 630k]
  ------------------
  572|       |
  573|       |    /* Unicode-4.1 additions */
  574|  4.06k|    case HB_SCRIPT_KHAROSHTHI:
  ------------------
  |  Branch (574:5): [True: 23, False: 630k]
  ------------------
  575|       |
  576|       |    /* Unicode-5.0 additions */
  577|  4.07k|    case HB_SCRIPT_PHOENICIAN:
  ------------------
  |  Branch (577:5): [True: 5, False: 630k]
  ------------------
  578|  4.17k|    case HB_SCRIPT_NKO:
  ------------------
  |  Branch (578:5): [True: 109, False: 630k]
  ------------------
  579|       |
  580|       |    /* Unicode-5.1 additions */
  581|  4.18k|    case HB_SCRIPT_LYDIAN:
  ------------------
  |  Branch (581:5): [True: 5, False: 630k]
  ------------------
  582|       |
  583|       |    /* Unicode-5.2 additions */
  584|  4.19k|    case HB_SCRIPT_AVESTAN:
  ------------------
  |  Branch (584:5): [True: 7, False: 630k]
  ------------------
  585|  4.19k|    case HB_SCRIPT_IMPERIAL_ARAMAIC:
  ------------------
  |  Branch (585:5): [True: 3, False: 630k]
  ------------------
  586|  4.20k|    case HB_SCRIPT_INSCRIPTIONAL_PAHLAVI:
  ------------------
  |  Branch (586:5): [True: 11, False: 630k]
  ------------------
  587|  4.20k|    case HB_SCRIPT_INSCRIPTIONAL_PARTHIAN:
  ------------------
  |  Branch (587:5): [True: 3, False: 630k]
  ------------------
  588|  4.21k|    case HB_SCRIPT_OLD_SOUTH_ARABIAN:
  ------------------
  |  Branch (588:5): [True: 3, False: 630k]
  ------------------
  589|  4.22k|    case HB_SCRIPT_OLD_TURKIC:
  ------------------
  |  Branch (589:5): [True: 17, False: 630k]
  ------------------
  590|  5.78k|    case HB_SCRIPT_SAMARITAN:
  ------------------
  |  Branch (590:5): [True: 1.55k, False: 628k]
  ------------------
  591|       |
  592|       |    /* Unicode-6.0 additions */
  593|  5.85k|    case HB_SCRIPT_MANDAIC:
  ------------------
  |  Branch (593:5): [True: 67, False: 630k]
  ------------------
  594|       |
  595|       |    /* Unicode-6.1 additions */
  596|  5.85k|    case HB_SCRIPT_MEROITIC_CURSIVE:
  ------------------
  |  Branch (596:5): [True: 3, False: 630k]
  ------------------
  597|  5.86k|    case HB_SCRIPT_MEROITIC_HIEROGLYPHS:
  ------------------
  |  Branch (597:5): [True: 5, False: 630k]
  ------------------
  598|       |
  599|       |    /* Unicode-7.0 additions */
  600|  5.88k|    case HB_SCRIPT_MANICHAEAN:
  ------------------
  |  Branch (600:5): [True: 23, False: 630k]
  ------------------
  601|  5.89k|    case HB_SCRIPT_MENDE_KIKAKUI:
  ------------------
  |  Branch (601:5): [True: 7, False: 630k]
  ------------------
  602|  5.89k|    case HB_SCRIPT_NABATAEAN:
  ------------------
  |  Branch (602:5): [True: 3, False: 630k]
  ------------------
  603|  5.89k|    case HB_SCRIPT_OLD_NORTH_ARABIAN:
  ------------------
  |  Branch (603:5): [True: 3, False: 630k]
  ------------------
  604|  5.90k|    case HB_SCRIPT_PALMYRENE:
  ------------------
  |  Branch (604:5): [True: 9, False: 630k]
  ------------------
  605|  5.92k|    case HB_SCRIPT_PSALTER_PAHLAVI:
  ------------------
  |  Branch (605:5): [True: 17, False: 630k]
  ------------------
  606|       |
  607|       |    /* Unicode-8.0 additions */
  608|  5.93k|    case HB_SCRIPT_HATRAN:
  ------------------
  |  Branch (608:5): [True: 7, False: 630k]
  ------------------
  609|       |
  610|       |    /* Unicode-9.0 additions */
  611|  5.95k|    case HB_SCRIPT_ADLAM:
  ------------------
  |  Branch (611:5): [True: 20, False: 630k]
  ------------------
  612|       |
  613|       |    /* Unicode-11.0 additions */
  614|  6.00k|    case HB_SCRIPT_HANIFI_ROHINGYA:
  ------------------
  |  Branch (614:5): [True: 53, False: 630k]
  ------------------
  615|  6.01k|    case HB_SCRIPT_OLD_SOGDIAN:
  ------------------
  |  Branch (615:5): [True: 11, False: 630k]
  ------------------
  616|  6.02k|    case HB_SCRIPT_SOGDIAN:
  ------------------
  |  Branch (616:5): [True: 11, False: 630k]
  ------------------
  617|       |
  618|       |    /* Unicode-12.0 additions */
  619|  6.02k|    case HB_SCRIPT_ELYMAIC:
  ------------------
  |  Branch (619:5): [True: 3, False: 630k]
  ------------------
  620|       |
  621|       |    /* Unicode-13.0 additions */
  622|  6.04k|    case HB_SCRIPT_CHORASMIAN:
  ------------------
  |  Branch (622:5): [True: 15, False: 630k]
  ------------------
  623|  6.05k|    case HB_SCRIPT_YEZIDI:
  ------------------
  |  Branch (623:5): [True: 11, False: 630k]
  ------------------
  624|       |
  625|       |    /* Unicode-14.0 additions */
  626|  6.06k|    case HB_SCRIPT_OLD_UYGHUR:
  ------------------
  |  Branch (626:5): [True: 15, False: 630k]
  ------------------
  627|       |
  628|  6.06k|      return HB_DIRECTION_RTL;
  629|       |
  630|       |
  631|       |    /* https://github.com/harfbuzz/harfbuzz/issues/1000 */
  632|      3|    case HB_SCRIPT_OLD_HUNGARIAN:
  ------------------
  |  Branch (632:5): [True: 3, False: 630k]
  ------------------
  633|     32|    case HB_SCRIPT_OLD_ITALIC:
  ------------------
  |  Branch (633:5): [True: 29, False: 630k]
  ------------------
  634|     37|    case HB_SCRIPT_RUNIC:
  ------------------
  |  Branch (634:5): [True: 5, False: 630k]
  ------------------
  635|     44|    case HB_SCRIPT_TIFINAGH:
  ------------------
  |  Branch (635:5): [True: 7, False: 630k]
  ------------------
  636|       |
  637|     44|      return HB_DIRECTION_INVALID;
  638|   630k|  }
  639|       |
  640|   624k|  return HB_DIRECTION_LTR;
  641|   630k|}
hb-common.cc:_ZL19lang_find_or_insertPKc:
  296|   138k|{
  297|   138k|retry:
  298|   138k|  hb_language_item_t *first_lang = langs;
  299|       |
  300|  7.85M|  for (hb_language_item_t *lang = first_lang; lang; lang = lang->next)
  ------------------
  |  Branch (300:47): [True: 7.85M, False: 196]
  ------------------
  301|  7.85M|    if (*lang == key)
  ------------------
  |  Branch (301:9): [True: 138k, False: 7.71M]
  ------------------
  302|   138k|      return lang;
  303|       |
  304|       |  /* Not found; allocate one. */
  305|    196|  hb_language_item_t *lang = (hb_language_item_t *) hb_calloc (1, sizeof (hb_language_item_t));
  ------------------
  |  |  234|    196|#define hb_calloc hb_calloc_impl
  ------------------
  306|    196|  if (unlikely (!lang))
  ------------------
  |  |  259|    196|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 187]
  |  |  ------------------
  ------------------
  307|      9|    return nullptr;
  308|    187|  lang->next = first_lang;
  309|    187|  *lang = key;
  310|    187|  if (unlikely (!lang->lang))
  ------------------
  |  |  259|    187|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 178]
  |  |  ------------------
  ------------------
  311|      9|  {
  312|      9|    hb_free (lang);
  ------------------
  |  |  236|      9|#define hb_free hb_free_impl
  ------------------
  313|      9|    return nullptr;
  314|      9|  }
  315|       |
  316|    178|  if (unlikely (!langs.cmpexch (first_lang, lang)))
  ------------------
  |  |  259|    178|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 178]
  |  |  ------------------
  ------------------
  317|      0|  {
  318|      0|    lang->fini ();
  319|      0|    hb_free (lang);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  320|      0|    goto retry;
  321|      0|  }
  322|       |
  323|    178|  if (!first_lang)
  ------------------
  |  Branch (323:7): [True: 1, False: 177]
  ------------------
  324|      1|    hb_atexit (free_langs); /* First person registers atexit() callback. */
  ------------------
  |  |  466|      1|#    define hb_atexit atexit
  ------------------
  325|       |
  326|    178|  return lang;
  327|    178|}
_ZNK18hb_language_item_teqEPKc:
  253|  7.85M|  { return lang_equal (lang, s); }
hb-common.cc:_ZL10lang_equalPK18hb_language_impl_tPKv:
  218|  7.85M|{
  219|  7.85M|  const unsigned char *p1 = (const unsigned char *) v1;
  220|  7.85M|  const unsigned char *p2 = (const unsigned char *) v2;
  221|       |
  222|  8.50M|  while (*p1 && *p1 == canon_map[*p2]) {
  ------------------
  |  Branch (222:10): [True: 8.27M, False: 231k]
  |  Branch (222:17): [True: 648k, False: 7.62M]
  ------------------
  223|   648k|    p1++;
  224|   648k|    p2++;
  225|   648k|  }
  226|       |
  227|  7.85M|  return *p1 == canon_map[*p2];
  228|  7.85M|}
_ZN18hb_language_item_taSEPKc:
  256|    187|  {
  257|       |    /* We can't call strdup(), because we allow custom allocators. */
  258|    187|    size_t len = strlen(s) + 1;
  259|    187|    lang = (hb_language_t) hb_malloc(len);
  ------------------
  |  |  233|    187|#define hb_malloc hb_malloc_impl
  ------------------
  260|    187|    if (likely (lang))
  ------------------
  |  |  258|    187|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 178, False: 9]
  |  |  ------------------
  ------------------
  261|    178|    {
  262|    178|      hb_memcpy((unsigned char *) lang, s, len);
  263|  3.23k|      for (unsigned char *p = (unsigned char *) lang; *p; p++)
  ------------------
  |  Branch (263:55): [True: 3.06k, False: 178]
  ------------------
  264|  3.06k|	*p = canon_map[*p];
  265|    178|    }
  266|       |
  267|    187|    return *this;
  268|    187|  }
_ZN18hb_language_item_t4finiEv:
  270|    178|  void fini () { hb_free ((void *) lang); }
  ------------------
  |  |  236|    178|#define hb_free hb_free_impl
  ------------------
hb-common.cc:_ZL10free_langsv:
  280|      1|{
  281|      1|retry:
  282|      1|  hb_language_item_t *first_lang = langs;
  283|      1|  if (unlikely (!langs.cmpexch (first_lang, nullptr)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  284|      0|    goto retry;
  285|       |
  286|    179|  while (first_lang) {
  ------------------
  |  Branch (286:10): [True: 178, False: 1]
  ------------------
  287|    178|    hb_language_item_t *next = first_lang->next;
  288|    178|    first_lang->fini ();
  289|    178|    hb_free (first_lang);
  ------------------
  |  |  236|    178|#define hb_free hb_free_impl
  ------------------
  290|    178|    first_lang = next;
  291|    178|  }
  292|      1|}

hb-aat-layout.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   312M|		  ...) {}
_ZN13hb_no_trace_tIbE3retIbEET_OS2_PKcj:
  346|   523M|	 unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
_ZN13hb_no_trace_tIbE3retIlEET_OS2_PKcj:
  346|  1.84M|	 unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
_ZN13hb_no_trace_tIbE3retIRbEET_OS3_PKcj:
  346|  55.8k|	 unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
_ZN13hb_no_trace_tI10hb_empty_tE3retIS0_EET_OS3_PKcj:
  346|  3.23M|	 unsigned int line HB_UNUSED = 0) { return std::forward<T> (v); }
hb-blob.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  4.03M|		  ...) {}
hb-buffer.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   311k|		  ...) {}
hb-common.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  5.00M|		  ...) {}
hb-draw.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  66.1k|		  ...) {}
hb-face.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   847k|		  ...) {}
hb-font.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   410k|		  ...) {}
hb-map.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  66.2k|		  ...) {}
hb-ot-color.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  13.0M|		  ...) {}
hb-ot-face.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   127k|		  ...) {}
hb-ot-font.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   628k|		  ...) {}
hb-ot-layout.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   117M|		  ...) {}
_ZZNK2OT7RuleSetINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextEENKUlRKNS_4RuleIS2_EEE_clESC_:
  349|  1.76M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
_ZZNK2OT7RuleSetINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextEENKUlRKNS_4RuleIS2_EEE_clESC_:
  349|  27.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
_ZZNK2OT12ChainRuleSetINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextEENKUlRKNS_9ChainRuleIS2_EEE_clESC_:
  349|   532k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
_ZZNK2OT12ChainRuleSetINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextEENKUlRKNS_9ChainRuleIS2_EEE_clESC_:
  349|   492k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
hb-ot-math.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  7.38M|		  ...) {}
hb-ot-meta.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  39.7k|		  ...) {}
hb-ot-metrics.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  35.0k|		  ...) {}
hb-ot-name.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  1.20M|		  ...) {}
hb-set.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   198k|		  ...) {}
hb-shape-plan.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  2.97M|		  ...) {}
hb-unicode.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|   582k|		  ...) {}
hb-ot-shaper-arabic.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|  14.8k|		  ...) {}
hb-ot-shaper-indic.cc:_ZL10hb_optionsv:
   64|  2.63k|{
   65|       |#ifdef HB_NO_GETENV
   66|       |  return hb_options_t ();
   67|       |#endif
   68|       |  /* Make a local copy, so we can access bitfield threadsafely. */
   69|  2.63k|  hb_options_union_t u;
   70|  2.63k|  u.i = _hb_options;
   71|       |
   72|  2.63k|  if (unlikely (!u.i))
  ------------------
  |  |  259|  2.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 2.63k]
  |  |  ------------------
  ------------------
   73|      1|  {
   74|      1|    _hb_options_init ();
   75|      1|    u.i = _hb_options;
   76|      1|  }
   77|       |
   78|  2.63k|  return u.opts;
   79|  2.63k|}
hb-ot-shaper-khmer.cc:_ZL10hb_optionsv:
   64|    262|{
   65|       |#ifdef HB_NO_GETENV
   66|       |  return hb_options_t ();
   67|       |#endif
   68|       |  /* Make a local copy, so we can access bitfield threadsafely. */
   69|    262|  hb_options_union_t u;
   70|    262|  u.i = _hb_options;
   71|       |
   72|    262|  if (unlikely (!u.i))
  ------------------
  |  |  259|    262|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 262]
  |  |  ------------------
  ------------------
   73|      0|  {
   74|      0|    _hb_options_init ();
   75|      0|    u.i = _hb_options;
   76|      0|  }
   77|       |
   78|    262|  return u.opts;
   79|    262|}
hb-paint.cc:_ZL13_hb_debug_msgILi0EEvPKcPKvS1_bjiS1_z:
  229|      2|		  ...) {}

_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl9SinglePosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  5.66k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl7PairPosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  35.0k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl10CursivePosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  9.05k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl11MarkBasePosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  15.6k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl10MarkLigPosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  16.2k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GPOS_impl11MarkMarkPosENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  20.0k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_7ContextENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  48.7k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_12ChainContextENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  49.6k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_9ExtensionINS0_6Layout9GPOS_impl12ExtensionPosEEENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  3.08k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_16ExtensionFormat1INS0_6Layout9GPOS_impl12ExtensionPosEEES9_EEbPKT_PKT0_:
   50|    705|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE24stop_sublookup_iterationES2_:
   55|  1.12M|  static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
_ZN21hb_dispatch_context_tIN2OT18hb_paint_context_tE10hb_empty_tLj0EE12may_dispatchINS0_5PaintENS0_7IntTypeIhLj1EEEEEbPKT_PKT0_:
   50|  1.70M|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_6Layout9GSUB_impl11SingleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  69.8k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_6Layout9GSUB_impl13MultipleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  1.67M|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_6Layout9GSUB_impl14AlternateSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  1.34k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_6Layout9GSUB_impl13LigatureSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|   775k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_7ContextENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|   330k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_12ChainContextENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  2.24M|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT24hb_would_apply_context_tEbLj0EE12may_dispatchINS0_6Layout9GSUB_impl23ReverseChainSingleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  3.12M|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GSUB_impl11SingleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  8.98k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GSUB_impl13MultipleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  61.1k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GSUB_impl14AlternateSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  9.56k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GSUB_impl13LigatureSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  34.5k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_9ExtensionINS0_6Layout9GSUB_impl14ExtensionSubstEEENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  7.21k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_16ExtensionFormat1INS0_6Layout9GSUB_impl14ExtensionSubstEEES9_EEbPKT_PKT0_:
   50|    442|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
_ZN21hb_dispatch_context_tIN2OT33hb_accelerate_subtables_context_tE10hb_empty_tLj0EE12may_dispatchINS0_6Layout9GSUB_impl23ReverseChainSingleSubstENS0_7IntTypeItLj2EEEEEbPKT_PKT0_:
   50|  19.2k|  bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }

hb_draw_funcs_set_move_to_func:
  141|      1|				 hb_destroy_func_t	  destroy)		\
  142|      1|{										\
  143|      1|  if (!_hb_draw_funcs_set_preamble (dfuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (143:7): [True: 0, False: 1]
  ------------------
  144|      1|      return;                                                            \
  145|      1|										\
  146|      1|  if (dfuncs->destroy && dfuncs->destroy->name)					\
  ------------------
  |  Branch (146:7): [True: 0, False: 1]
  |  Branch (146:26): [True: 0, False: 0]
  ------------------
  147|      1|    dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); \
  ------------------
  |  Branch (147:28): [True: 0, False: 0]
  ------------------
  148|      1|									 \
  149|      1|  if (!_hb_draw_funcs_set_middle (dfuncs, user_data, destroy))           \
  ------------------
  |  Branch (149:7): [True: 0, False: 1]
  ------------------
  150|      1|      return;                                                            \
  151|      1|									\
  152|      1|  if (func)								\
  ------------------
  |  Branch (152:7): [True: 1, False: 0]
  ------------------
  153|      1|    dfuncs->func.name = func;						\
  154|      1|  else									\
  155|      1|    dfuncs->func.name = hb_draw_##name##_nil;				\
  156|      1|									\
  157|      1|  if (dfuncs->user_data)						\
  ------------------
  |  Branch (157:7): [True: 0, False: 1]
  ------------------
  158|      1|    dfuncs->user_data->name = user_data;				\
  159|      1|  if (dfuncs->destroy)							\
  ------------------
  |  Branch (159:7): [True: 0, False: 1]
  ------------------
  160|      1|    dfuncs->destroy->name = destroy;					\
  161|      1|}
hb_draw_funcs_set_line_to_func:
  141|      1|				 hb_destroy_func_t	  destroy)		\
  142|      1|{										\
  143|      1|  if (!_hb_draw_funcs_set_preamble (dfuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (143:7): [True: 0, False: 1]
  ------------------
  144|      1|      return;                                                            \
  145|      1|										\
  146|      1|  if (dfuncs->destroy && dfuncs->destroy->name)					\
  ------------------
  |  Branch (146:7): [True: 0, False: 1]
  |  Branch (146:26): [True: 0, False: 0]
  ------------------
  147|      1|    dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); \
  ------------------
  |  Branch (147:28): [True: 0, False: 0]
  ------------------
  148|      1|									 \
  149|      1|  if (!_hb_draw_funcs_set_middle (dfuncs, user_data, destroy))           \
  ------------------
  |  Branch (149:7): [True: 0, False: 1]
  ------------------
  150|      1|      return;                                                            \
  151|      1|									\
  152|      1|  if (func)								\
  ------------------
  |  Branch (152:7): [True: 1, False: 0]
  ------------------
  153|      1|    dfuncs->func.name = func;						\
  154|      1|  else									\
  155|      1|    dfuncs->func.name = hb_draw_##name##_nil;				\
  156|      1|									\
  157|      1|  if (dfuncs->user_data)						\
  ------------------
  |  Branch (157:7): [True: 0, False: 1]
  ------------------
  158|      1|    dfuncs->user_data->name = user_data;				\
  159|      1|  if (dfuncs->destroy)							\
  ------------------
  |  Branch (159:7): [True: 0, False: 1]
  ------------------
  160|      1|    dfuncs->destroy->name = destroy;					\
  161|      1|}
hb_draw_funcs_set_quadratic_to_func:
  141|      1|				 hb_destroy_func_t	  destroy)		\
  142|      1|{										\
  143|      1|  if (!_hb_draw_funcs_set_preamble (dfuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (143:7): [True: 0, False: 1]
  ------------------
  144|      1|      return;                                                            \
  145|      1|										\
  146|      1|  if (dfuncs->destroy && dfuncs->destroy->name)					\
  ------------------
  |  Branch (146:7): [True: 0, False: 1]
  |  Branch (146:26): [True: 0, False: 0]
  ------------------
  147|      1|    dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); \
  ------------------
  |  Branch (147:28): [True: 0, False: 0]
  ------------------
  148|      1|									 \
  149|      1|  if (!_hb_draw_funcs_set_middle (dfuncs, user_data, destroy))           \
  ------------------
  |  Branch (149:7): [True: 0, False: 1]
  ------------------
  150|      1|      return;                                                            \
  151|      1|									\
  152|      1|  if (func)								\
  ------------------
  |  Branch (152:7): [True: 1, False: 0]
  ------------------
  153|      1|    dfuncs->func.name = func;						\
  154|      1|  else									\
  155|      1|    dfuncs->func.name = hb_draw_##name##_nil;				\
  156|      1|									\
  157|      1|  if (dfuncs->user_data)						\
  ------------------
  |  Branch (157:7): [True: 0, False: 1]
  ------------------
  158|      1|    dfuncs->user_data->name = user_data;				\
  159|      1|  if (dfuncs->destroy)							\
  ------------------
  |  Branch (159:7): [True: 0, False: 1]
  ------------------
  160|      1|    dfuncs->destroy->name = destroy;					\
  161|      1|}
hb_draw_funcs_set_cubic_to_func:
  141|      1|				 hb_destroy_func_t	  destroy)		\
  142|      1|{										\
  143|      1|  if (!_hb_draw_funcs_set_preamble (dfuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (143:7): [True: 0, False: 1]
  ------------------
  144|      1|      return;                                                            \
  145|      1|										\
  146|      1|  if (dfuncs->destroy && dfuncs->destroy->name)					\
  ------------------
  |  Branch (146:7): [True: 0, False: 1]
  |  Branch (146:26): [True: 0, False: 0]
  ------------------
  147|      1|    dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); \
  ------------------
  |  Branch (147:28): [True: 0, False: 0]
  ------------------
  148|      1|									 \
  149|      1|  if (!_hb_draw_funcs_set_middle (dfuncs, user_data, destroy))           \
  ------------------
  |  Branch (149:7): [True: 0, False: 1]
  ------------------
  150|      1|      return;                                                            \
  151|      1|									\
  152|      1|  if (func)								\
  ------------------
  |  Branch (152:7): [True: 1, False: 0]
  ------------------
  153|      1|    dfuncs->func.name = func;						\
  154|      1|  else									\
  155|      1|    dfuncs->func.name = hb_draw_##name##_nil;				\
  156|      1|									\
  157|      1|  if (dfuncs->user_data)						\
  ------------------
  |  Branch (157:7): [True: 0, False: 1]
  ------------------
  158|      1|    dfuncs->user_data->name = user_data;				\
  159|      1|  if (dfuncs->destroy)							\
  ------------------
  |  Branch (159:7): [True: 0, False: 1]
  ------------------
  160|      1|    dfuncs->destroy->name = destroy;					\
  161|      1|}
hb_draw_funcs_create:
  182|  33.3k|{
  183|  33.3k|  hb_draw_funcs_t *dfuncs;
  184|  33.3k|  if (unlikely (!(dfuncs = hb_object_create<hb_draw_funcs_t> ())))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 489, False: 32.8k]
  |  |  ------------------
  ------------------
  185|    489|    return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
  ------------------
  |  |  124|    489|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  186|       |
  187|  32.8k|  dfuncs->func =  Null (hb_draw_funcs_t).func;
  ------------------
  |  |  124|  32.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  188|       |
  189|  32.8k|  return dfuncs;
  190|  33.3k|}
hb_draw_funcs_get_empty:
  214|      1|{
  215|      1|  return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  216|      1|}
hb_draw_funcs_destroy:
  250|  33.3k|{
  251|  33.3k|  if (!hb_object_destroy (dfuncs)) return;
  ------------------
  |  Branch (251:7): [True: 489, False: 32.8k]
  ------------------
  252|       |
  253|  32.8k|  if (dfuncs->destroy)
  ------------------
  |  Branch (253:7): [True: 0, False: 32.8k]
  ------------------
  254|      0|  {
  255|      0|#define HB_DRAW_FUNC_IMPLEMENT(name) \
  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  257|      0|      HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
  ------------------
  |  |   36|      0|  HB_DRAW_FUNC_IMPLEMENT (move_to) \
  |  |  ------------------
  |  |  |  |  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (256:55): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|  HB_DRAW_FUNC_IMPLEMENT (line_to) \
  |  |  ------------------
  |  |  |  |  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (256:55): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|      0|  HB_DRAW_FUNC_IMPLEMENT (quadratic_to) \
  |  |  ------------------
  |  |  |  |  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (256:55): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   39|      0|  HB_DRAW_FUNC_IMPLEMENT (cubic_to) \
  |  |  ------------------
  |  |  |  |  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (256:55): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   40|      0|  HB_DRAW_FUNC_IMPLEMENT (close_path) \
  |  |  ------------------
  |  |  |  |  256|      0|    if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (256:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (256:55): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|      0|#undef HB_DRAW_FUNC_IMPLEMENT
  259|      0|  }
  260|       |
  261|  32.8k|  hb_free (dfuncs->destroy);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  262|  32.8k|  hb_free (dfuncs->user_data);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  263|       |
  264|  32.8k|  hb_free (dfuncs);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  265|  32.8k|}
hb_draw_funcs_make_immutable:
  320|      1|{
  321|      1|  if (hb_object_is_immutable (dfuncs))
  ------------------
  |  Branch (321:7): [True: 0, False: 1]
  ------------------
  322|      0|    return;
  323|       |
  324|      1|  hb_object_make_immutable (dfuncs);
  325|      1|}
hb-draw.cc:_ZL27_hb_draw_funcs_set_preambleP15hb_draw_funcs_tbPPvPPFvS1_E:
   90|      4|{
   91|      4|  if (hb_object_is_immutable (dfuncs))
  ------------------
  |  Branch (91:7): [True: 0, False: 4]
  ------------------
   92|      0|  {
   93|      0|    if (*destroy)
  ------------------
  |  Branch (93:9): [True: 0, False: 0]
  ------------------
   94|      0|      (*destroy) (*user_data);
   95|      0|    return false;
   96|      0|  }
   97|       |
   98|      4|  if (func_is_null)
  ------------------
  |  Branch (98:7): [True: 0, False: 4]
  ------------------
   99|      0|  {
  100|      0|    if (*destroy)
  ------------------
  |  Branch (100:9): [True: 0, False: 0]
  ------------------
  101|      0|      (*destroy) (*user_data);
  102|      0|    *destroy = nullptr;
  103|      0|    *user_data = nullptr;
  104|      0|  }
  105|       |
  106|      4|  return true;
  107|      4|}
hb-draw.cc:_ZL25_hb_draw_funcs_set_middleP15hb_draw_funcs_tPvPFvS1_E:
  113|      4|{
  114|      4|  if (user_data && !dfuncs->user_data)
  ------------------
  |  Branch (114:7): [True: 0, False: 4]
  |  Branch (114:20): [True: 0, False: 0]
  ------------------
  115|      0|  {
  116|      0|    dfuncs->user_data = (decltype (dfuncs->user_data)) hb_calloc (1, sizeof (*dfuncs->user_data));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  117|      0|    if (unlikely (!dfuncs->user_data))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  118|      0|      goto fail;
  119|      0|  }
  120|      4|  if (destroy && !dfuncs->destroy)
  ------------------
  |  Branch (120:7): [True: 0, False: 4]
  |  Branch (120:18): [True: 0, False: 0]
  ------------------
  121|      0|  {
  122|      0|    dfuncs->destroy = (decltype (dfuncs->destroy)) hb_calloc (1, sizeof (*dfuncs->destroy));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  123|      0|    if (unlikely (!dfuncs->destroy))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  124|      0|      goto fail;
  125|      0|  }
  126|       |
  127|      4|  return true;
  128|       |
  129|      0|fail:
  130|      0|  if (destroy)
  ------------------
  |  Branch (130:7): [True: 0, False: 0]
  ------------------
  131|      0|    (destroy) (user_data);
  132|      0|  return false;
  133|      4|}
hb-draw.cc:_ZL19hb_draw_move_to_nilP15hb_draw_funcs_tPvP15hb_draw_state_tffS1_:
   46|  15.5k|		     void *user_data HB_UNUSED) {}
hb-draw.cc:_ZL19hb_draw_line_to_nilP15hb_draw_funcs_tPvP15hb_draw_state_tffS1_:
   52|   113k|		     void *user_data HB_UNUSED) {}
hb-draw.cc:_ZL24hb_draw_quadratic_to_nilP15hb_draw_funcs_tPvP15hb_draw_state_tffffS1_:
   60|  10.4k|{
   61|  10.4k|#define HB_ONE_THIRD 0.33333333f
   62|  10.4k|  dfuncs->emit_cubic_to (draw_data, *st,
   63|  10.4k|			 (st->current_x + 2.f * control_x) * HB_ONE_THIRD,
  ------------------
  |  |   61|  10.4k|#define HB_ONE_THIRD 0.33333333f
  ------------------
   64|  10.4k|			 (st->current_y + 2.f * control_y) * HB_ONE_THIRD,
  ------------------
  |  |   61|  10.4k|#define HB_ONE_THIRD 0.33333333f
  ------------------
   65|  10.4k|			 (to_x + 2.f * control_x) * HB_ONE_THIRD,
  ------------------
  |  |   61|  10.4k|#define HB_ONE_THIRD 0.33333333f
  ------------------
   66|  10.4k|			 (to_y + 2.f * control_y) * HB_ONE_THIRD,
  ------------------
  |  |   61|  10.4k|#define HB_ONE_THIRD 0.33333333f
  ------------------
   67|  10.4k|			 to_x, to_y);
   68|  10.4k|#undef HB_ONE_THIRD
   69|  10.4k|}
hb-draw.cc:_ZL20hb_draw_cubic_to_nilP15hb_draw_funcs_tPvP15hb_draw_state_tffffffS1_:
   77|  47.9k|		      void *user_data HB_UNUSED) {}
hb-draw.cc:_ZL22hb_draw_close_path_nilP15hb_draw_funcs_tPvP15hb_draw_state_tS1_:
   82|  38.0k|			void *user_data HB_UNUSED) {}

_ZN15hb_draw_funcs_t12emit_move_toEPvR15hb_draw_state_tff:
   67|  38.0k|  { func.move_to (this, draw_data, &st,
   68|  38.0k|		  to_x, to_y,
   69|  38.0k|		  !user_data ? nullptr : user_data->move_to); }
  ------------------
  |  Branch (69:5): [True: 38.0k, False: 0]
  ------------------
_ZN15hb_draw_funcs_t12emit_line_toEPvR15hb_draw_state_tff:
   72|   219k|  { func.line_to (this, draw_data, &st,
   73|   219k|		  to_x, to_y,
   74|   219k|		  !user_data ? nullptr : user_data->line_to); }
  ------------------
  |  Branch (74:5): [True: 219k, False: 0]
  ------------------
_ZN15hb_draw_funcs_t17emit_quadratic_toEPvR15hb_draw_state_tffff:
   78|  66.1k|  { func.quadratic_to (this, draw_data, &st,
   79|  66.1k|		       control_x, control_y,
   80|  66.1k|		       to_x, to_y,
   81|  66.1k|		       !user_data ? nullptr : user_data->quadratic_to); }
  ------------------
  |  Branch (81:10): [True: 66.1k, False: 0]
  ------------------
_ZN15hb_draw_funcs_t13emit_cubic_toEPvR15hb_draw_state_tffffff:
   86|  96.1k|  { func.cubic_to (this, draw_data, &st,
   87|  96.1k|		   control1_x, control1_y,
   88|  96.1k|		   control2_x, control2_y,
   89|  96.1k|		   to_x, to_y,
   90|  96.1k|		   !user_data ? nullptr : user_data->cubic_to); }
  ------------------
  |  Branch (90:6): [True: 96.1k, False: 0]
  ------------------
_ZN15hb_draw_funcs_t15emit_close_pathEPvR15hb_draw_state_t:
   92|  38.0k|  { func.close_path (this, draw_data, &st,
   93|  38.0k|		     !user_data ? nullptr : user_data->close_path); }
  ------------------
  |  Branch (93:8): [True: 38.0k, False: 0]
  ------------------
_ZN15hb_draw_funcs_t7move_toEPvR15hb_draw_state_tff:
   98|  46.0k|  {
   99|  46.0k|    if (st.path_open) close_path (draw_data, st);
  ------------------
  |  Branch (99:9): [True: 15.1k, False: 30.9k]
  ------------------
  100|  46.0k|    st.current_x = to_x;
  101|  46.0k|    st.current_y = to_y;
  102|  46.0k|  }
_ZN15hb_draw_funcs_t7line_toEPvR15hb_draw_state_tff:
  106|   200k|  {
  107|   200k|    if (!st.path_open) start_path (draw_data, st);
  ------------------
  |  Branch (107:9): [True: 21.3k, False: 179k]
  ------------------
  108|   200k|    emit_line_to (draw_data, st, to_x, to_y);
  109|   200k|    st.current_x = to_x;
  110|   200k|    st.current_y = to_y;
  111|   200k|  }
_ZN15hb_draw_funcs_t12quadratic_toEPvR15hb_draw_state_tffff:
  117|  66.1k|  {
  118|  66.1k|    if (!st.path_open) start_path (draw_data, st);
  ------------------
  |  Branch (118:9): [True: 8.07k, False: 58.0k]
  ------------------
  119|  66.1k|    emit_quadratic_to (draw_data, st, control_x, control_y, to_x, to_y);
  120|  66.1k|    st.current_x = to_x;
  121|  66.1k|    st.current_y = to_y;
  122|  66.1k|  }
_ZN15hb_draw_funcs_t8cubic_toEPvR15hb_draw_state_tffffff:
  129|  85.7k|  {
  130|  85.7k|    if (!st.path_open) start_path (draw_data, st);
  ------------------
  |  Branch (130:9): [True: 8.61k, False: 77.1k]
  ------------------
  131|  85.7k|    emit_cubic_to (draw_data, st, control1_x, control1_y, control2_x, control2_y, to_x, to_y);
  132|  85.7k|    st.current_x = to_x;
  133|  85.7k|    st.current_y = to_y;
  134|  85.7k|  }
_ZN15hb_draw_funcs_t10close_pathEPvR15hb_draw_state_t:
  138|   174k|  {
  139|   174k|    if (st.path_open)
  ------------------
  |  Branch (139:9): [True: 38.0k, False: 136k]
  ------------------
  140|  38.0k|    {
  141|  38.0k|      if ((st.path_start_x != st.current_x) || (st.path_start_y != st.current_y))
  ------------------
  |  Branch (141:11): [True: 17.0k, False: 21.0k]
  |  Branch (141:48): [True: 1.87k, False: 19.2k]
  ------------------
  142|  18.8k|	emit_line_to (draw_data, st, st.path_start_x, st.path_start_y);
  143|  38.0k|      emit_close_path (draw_data, st);
  144|  38.0k|    }
  145|   174k|    st.path_open = false;
  146|   174k|    st.path_start_x = st.current_x = st.path_start_y = st.current_y = 0;
  147|   174k|  }
_ZN15hb_draw_funcs_t10start_pathEPvR15hb_draw_state_t:
  152|  38.0k|  {
  153|  38.0k|    assert (!st.path_open);
  154|      0|    emit_move_to (draw_data, st, st.current_x, st.current_y);
  155|  38.0k|    st.path_open = true;
  156|  38.0k|    st.path_start_x = st.current_x;
  157|  38.0k|    st.path_start_y = st.current_y;
  158|  38.0k|  }
_ZN17hb_draw_session_tC2EP15hb_draw_funcs_tPvf:
  167|   139k|  {}
_ZN17hb_draw_session_tD2Ev:
  169|   139k|  ~hb_draw_session_t () { close_path (); }
_ZN17hb_draw_session_t7move_toEff:
  172|  46.0k|  {
  173|  46.0k|    if (likely (not_slanted))
  ------------------
  |  |  258|  46.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 46.0k, False: 0]
  |  |  ------------------
  ------------------
  174|  46.0k|      funcs->move_to (draw_data, st,
  175|  46.0k|		      to_x, to_y);
  176|      0|    else
  177|      0|      funcs->move_to (draw_data, st,
  178|      0|		      to_x + to_y * slant, to_y);
  179|  46.0k|  }
_ZN17hb_draw_session_t7line_toEff:
  181|   200k|  {
  182|   200k|    if (likely (not_slanted))
  ------------------
  |  |  258|   200k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 200k, False: 0]
  |  |  ------------------
  ------------------
  183|   200k|      funcs->line_to (draw_data, st,
  184|   200k|		      to_x, to_y);
  185|      0|    else
  186|      0|      funcs->line_to (draw_data, st,
  187|      0|		      to_x + to_y * slant, to_y);
  188|   200k|  }
_ZN17hb_draw_session_t12quadratic_toEffff:
  192|  66.1k|  {
  193|  66.1k|    if (likely (not_slanted))
  ------------------
  |  |  258|  66.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 66.1k, False: 0]
  |  |  ------------------
  ------------------
  194|  66.1k|      funcs->quadratic_to (draw_data, st,
  195|  66.1k|			   control_x, control_y,
  196|  66.1k|			   to_x, to_y);
  197|      0|    else
  198|      0|      funcs->quadratic_to (draw_data, st,
  199|      0|			   control_x + control_y * slant, control_y,
  200|      0|			   to_x + to_y * slant, to_y);
  201|  66.1k|  }
_ZN17hb_draw_session_t8cubic_toEffffff:
  206|  85.7k|  {
  207|  85.7k|    if (likely (not_slanted))
  ------------------
  |  |  258|  85.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 85.7k, False: 0]
  |  |  ------------------
  ------------------
  208|  85.7k|      funcs->cubic_to (draw_data, st,
  209|  85.7k|		       control1_x, control1_y,
  210|  85.7k|		       control2_x, control2_y,
  211|  85.7k|		       to_x, to_y);
  212|      0|    else
  213|      0|      funcs->cubic_to (draw_data, st,
  214|      0|		       control1_x + control1_y * slant, control1_y,
  215|      0|		       control2_x + control2_y * slant, control2_y,
  216|      0|		       to_x + to_y * slant, to_y);
  217|  85.7k|  }
_ZN17hb_draw_session_t10close_pathEv:
  219|   158k|  {
  220|   158k|    funcs->close_path (draw_data, st);
  221|   158k|  }

hb_face_create_for_tables:
  127|  33.3k|{
  128|  33.3k|  hb_face_t *face;
  129|       |
  130|  33.3k|  if (!reference_table_func || !(face = hb_object_create<hb_face_t> ())) {
  ------------------
  |  Branch (130:7): [True: 0, False: 33.3k]
  |  Branch (130:32): [True: 7, False: 33.3k]
  ------------------
  131|      7|    if (destroy)
  ------------------
  |  Branch (131:9): [True: 7, False: 0]
  ------------------
  132|      7|      destroy (user_data);
  133|      7|    return hb_face_get_empty ();
  134|      7|  }
  135|       |
  136|  33.3k|  face->reference_table_func = reference_table_func;
  137|  33.3k|  face->user_data = user_data;
  138|  33.3k|  face->destroy = destroy;
  139|       |
  140|  33.3k|  face->num_glyphs = -1;
  141|       |
  142|  33.3k|  face->data.init0 (face);
  143|  33.3k|  face->table.init0 (face);
  144|       |
  145|  33.3k|  return face;
  146|  33.3k|}
hb_face_create:
  224|  33.3k|{
  225|  33.3k|  hb_face_t *face;
  226|       |
  227|  33.3k|  if (unlikely (!blob))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  228|      0|    blob = hb_blob_get_empty ();
  229|       |
  230|  33.3k|  blob = hb_sanitize_context_t ().sanitize_blob<OT::OpenTypeFontFile> (hb_blob_reference (blob));
  231|       |
  232|  33.3k|  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (blob, index);
  233|       |
  234|  33.3k|  if (unlikely (!closure))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 33.3k]
  |  |  ------------------
  ------------------
  235|      7|  {
  236|      7|    hb_blob_destroy (blob);
  237|      7|    return hb_face_get_empty ();
  238|      7|  }
  239|       |
  240|  33.3k|  face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
  241|  33.3k|				    closure,
  242|  33.3k|				    _hb_face_for_data_closure_destroy);
  243|       |
  244|  33.3k|  face->index = index;
  245|       |
  246|  33.3k|  return face;
  247|  33.3k|}
hb_face_get_empty:
  260|     14|{
  261|     14|  return const_cast<hb_face_t *> (&Null (hb_face_t));
  ------------------
  |  |  124|     14|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  262|     14|}
hb_face_reference:
  277|  33.2k|{
  278|  33.2k|  return hb_object_reference (face);
  279|  33.2k|}
hb_face_destroy:
  293|  66.5k|{
  294|  66.5k|  if (!hb_object_destroy (face)) return;
  ------------------
  |  Branch (294:7): [True: 33.2k, False: 33.3k]
  ------------------
  295|       |
  296|  33.3k|#ifndef HB_NO_SHAPER
  297|  82.2k|  for (hb_face_t::plan_node_t *node = face->shape_plans; node; )
  ------------------
  |  Branch (297:58): [True: 48.9k, False: 33.3k]
  ------------------
  298|  48.9k|  {
  299|  48.9k|    hb_face_t::plan_node_t *next = node->next;
  300|  48.9k|    hb_shape_plan_destroy (node->shape_plan);
  301|  48.9k|    hb_free (node);
  ------------------
  |  |  236|  48.9k|#define hb_free hb_free_impl
  ------------------
  302|  48.9k|    node = next;
  303|  48.9k|  }
  304|  33.3k|#endif
  305|       |
  306|  33.3k|  face->data.fini ();
  307|  33.3k|  face->table.fini ();
  308|       |
  309|  33.3k|  if (face->destroy)
  ------------------
  |  Branch (309:7): [True: 33.3k, False: 0]
  ------------------
  310|  33.3k|    face->destroy (face->user_data);
  311|       |
  312|  33.3k|  hb_free (face);
  ------------------
  |  |  236|  33.3k|#define hb_free hb_free_impl
  ------------------
  313|  33.3k|}
hb_face_set_user_data:
  335|  34.8k|{
  336|  34.8k|  return hb_object_set_user_data (face, key, data, destroy, replace);
  337|  34.8k|}
hb_face_get_user_data:
  354|  98.6k|{
  355|  98.6k|  return hb_object_get_user_data (face, key);
  356|  98.6k|}
hb_face_make_immutable:
  368|  82.7k|{
  369|  82.7k|  if (hb_object_is_immutable (face))
  ------------------
  |  Branch (369:7): [True: 49.4k, False: 33.2k]
  ------------------
  370|  49.4k|    return;
  371|       |
  372|  33.2k|  hb_object_make_immutable (face);
  373|  33.2k|}
hb_face_reference_table:
  407|  1.28M|{
  408|  1.28M|  if (unlikely (tag == HB_TAG_NONE))
  ------------------
  |  |  259|  1.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28M]
  |  |  ------------------
  ------------------
  409|      0|    return hb_blob_get_empty ();
  410|       |
  411|  1.28M|  return face->reference_table (tag);
  412|  1.28M|}
hb_face_get_upem:
  509|  98.3k|{
  510|  98.3k|  return face->get_upem ();
  511|  98.3k|}
hb_face_get_glyph_count:
  546|   786k|{
  547|   786k|  return face->get_num_glyphs ();
  548|   786k|}
hb_face_collect_unicodes:
  606|  33.3k|{
  607|  33.3k|  face->table.cmap->collect_unicodes (out, face->get_num_glyphs ());
  608|  33.3k|}
hb_face_collect_variation_selectors:
  643|  33.3k|{
  644|  33.3k|  face->table.cmap->collect_variation_selectors (out);
  645|  33.3k|}
hb_face_collect_variation_unicodes:
  661|  33.3k|{
  662|  33.3k|  face->table.cmap->collect_variation_unicodes (variation_selector, out);
  663|  33.3k|}
hb-face.cc:_ZL32_hb_face_for_data_closure_createP9hb_blob_tj:
  156|  33.3k|{
  157|  33.3k|  hb_face_for_data_closure_t *closure;
  158|       |
  159|  33.3k|  closure = (hb_face_for_data_closure_t *) hb_calloc (1, sizeof (hb_face_for_data_closure_t));
  ------------------
  |  |  234|  33.3k|#define hb_calloc hb_calloc_impl
  ------------------
  160|  33.3k|  if (unlikely (!closure))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 33.3k]
  |  |  ------------------
  ------------------
  161|      7|    return nullptr;
  162|       |
  163|  33.3k|  closure->blob = blob;
  164|  33.3k|  closure->index = (uint16_t) (index & 0xFFFFu);
  165|       |
  166|  33.3k|  return closure;
  167|  33.3k|}
hb-face.cc:_ZL33_hb_face_for_data_reference_tableP9hb_face_tjPv:
  180|  1.28M|{
  181|  1.28M|  hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
  182|       |
  183|  1.28M|  if (tag == HB_TAG_NONE)
  ------------------
  |  |  197|  1.28M|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|  1.28M|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (183:7): [True: 0, False: 1.28M]
  ------------------
  184|      0|    return hb_blob_reference (data->blob);
  185|       |
  186|  1.28M|  const OT::OpenTypeFontFile &ot_file = *data->blob->as<OT::OpenTypeFontFile> ();
  187|  1.28M|  unsigned int base_offset;
  188|  1.28M|  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index, &base_offset);
  189|       |
  190|  1.28M|  const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
  191|       |
  192|  1.28M|  hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, base_offset + table.offset, table.length);
  193|       |
  194|  1.28M|  return blob;
  195|  1.28M|}
hb-face.cc:_ZL33_hb_face_for_data_closure_destroyPv:
  171|  33.3k|{
  172|  33.3k|  hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data;
  173|       |
  174|  33.3k|  hb_blob_destroy (closure->blob);
  175|  33.3k|  hb_free (closure);
  ------------------
  |  |  236|  33.3k|#define hb_free hb_free_impl
  ------------------
  176|  33.3k|}

_ZNK9hb_face_t14get_num_glyphsEv:
   97|   995k|  {
   98|   995k|    unsigned int ret = num_glyphs;
   99|   995k|    if (unlikely (ret == UINT_MAX))
  ------------------
  |  |  259|   995k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 962k]
  |  |  ------------------
  ------------------
  100|  33.2k|      return load_num_glyphs ();
  101|   962k|    return ret;
  102|   995k|  }
_ZNK9hb_face_t15reference_tableEj:
   73|  1.28M|  {
   74|  1.28M|    hb_blob_t *blob;
   75|       |
   76|  1.28M|    if (unlikely (!reference_table_func))
  ------------------
  |  |  259|  1.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28M]
  |  |  ------------------
  ------------------
   77|      0|      return hb_blob_get_empty ();
   78|       |
   79|  1.28M|    blob = reference_table_func (/*Oh, well.*/const_cast<hb_face_t *> (this), tag, user_data);
   80|  1.28M|    if (unlikely (!blob))
  ------------------
  |  |  259|  1.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28M]
  |  |  ------------------
  ------------------
   81|      0|      return hb_blob_get_empty ();
   82|       |
   83|  1.28M|    return blob;
   84|  1.28M|  }
_ZNK9hb_face_t8get_upemEv:
   87|   419k|  {
   88|   419k|    unsigned int ret = upem;
   89|   419k|    if (unlikely (!ret))
  ------------------
  |  |  259|   419k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 386k]
  |  |  ------------------
  ------------------
   90|  33.2k|    {
   91|  33.2k|      return load_upem ();
   92|  33.2k|    }
   93|   386k|    return ret;
   94|   419k|  }

hb_font_funcs_create:
  723|      1|{
  724|      1|  hb_font_funcs_t *ffuncs;
  725|       |
  726|      1|  if (!(ffuncs = hb_object_create<hb_font_funcs_t> ()))
  ------------------
  |  Branch (726:7): [True: 0, False: 1]
  ------------------
  727|      0|    return hb_font_funcs_get_empty ();
  728|       |
  729|      1|  ffuncs->get = _hb_font_funcs_default.get;
  730|       |
  731|      1|  return ffuncs;
  732|      1|}
hb_font_funcs_get_empty:
  745|  33.2k|{
  746|  33.2k|  return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_default);
  747|  33.2k|}
hb_font_funcs_reference:
  761|  98.4k|{
  762|  98.4k|  return hb_object_reference (ffuncs);
  763|  98.4k|}
hb_font_funcs_destroy:
  777|   131k|{
  778|   131k|  if (!hb_object_destroy (ffuncs)) return;
  ------------------
  |  Branch (778:7): [True: 131k, False: 1]
  ------------------
  779|       |
  780|      1|  if (ffuncs->destroy)
  ------------------
  |  Branch (780:7): [True: 0, False: 1]
  ------------------
  781|      0|  {
  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  784|      0|    HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
  ------------------
  |  |   43|      0|  HB_FONT_FUNC_IMPLEMENT (get_,font_h_extents) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      0|  HB_FONT_FUNC_IMPLEMENT (get_,font_v_extents) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|      0|  HB_FONT_FUNC_IMPLEMENT (get_,nominal_glyph) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      0|  HB_FONT_FUNC_IMPLEMENT (get_,nominal_glyphs) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|      0|  HB_FONT_FUNC_IMPLEMENT (get_,variation_glyph) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_advance) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_advance) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_advances) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_advances) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_origin) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_origin) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_h_kerning) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|  HB_IF_NOT_DEPRECATED (HB_FONT_FUNC_IMPLEMENT (get_,glyph_v_kerning)) \
  |  |  ------------------
  |  |  |  |  125|      0|#define HB_IF_NOT_DEPRECATED(x) x
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:33): [True: 0, False: 0]
  |  |  |  |  |  Branch (125:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_extents) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_contour_point) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_name) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|      0|  HB_FONT_FUNC_IMPLEMENT (get_,glyph_from_name) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      0|  HB_FONT_FUNC_IMPLEMENT (,draw_glyph) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      0|  HB_FONT_FUNC_IMPLEMENT (,paint_glyph) \
  |  |  ------------------
  |  |  |  |  782|      0|#define HB_FONT_FUNC_IMPLEMENT(get_,name) if (ffuncs->destroy->name) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (782:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  783|      0|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (783:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|      0|#undef HB_FONT_FUNC_IMPLEMENT
  786|      0|  }
  787|       |
  788|      1|  hb_free (ffuncs->destroy);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  789|      1|  hb_free (ffuncs->user_data);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  790|       |
  791|      1|  hb_free (ffuncs);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  792|      1|}
hb_font_funcs_make_immutable:
  848|      1|{
  849|      1|  if (hb_object_is_immutable (ffuncs))
  ------------------
  |  Branch (849:7): [True: 0, False: 1]
  ------------------
  850|      0|    return;
  851|       |
  852|      1|  hb_object_make_immutable (ffuncs);
  853|      1|}
hb_font_funcs_set_font_h_extents_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_font_v_extents_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_nominal_glyph_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_nominal_glyphs_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_variation_glyph_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_h_advances_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_v_advances_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_v_origin_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_extents_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_name_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_glyph_from_name_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_draw_glyph_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
hb_font_funcs_set_paint_glyph_func:
  928|      1|				 hb_destroy_func_t            destroy)   \
  929|      1|{                                                                        \
  930|      1|  if (!_hb_font_funcs_set_preamble (ffuncs, !func, &user_data, &destroy))\
  ------------------
  |  Branch (930:7): [True: 0, False: 1]
  ------------------
  931|      1|      return;                                                            \
  932|      1|									 \
  933|      1|  if (ffuncs->destroy && ffuncs->destroy->name)                          \
  ------------------
  |  Branch (933:7): [True: 0, False: 1]
  |  Branch (933:26): [True: 0, False: 0]
  ------------------
  934|      1|    ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name); \
  ------------------
  |  Branch (934:28): [True: 0, False: 0]
  ------------------
  935|      1|                                                                         \
  936|      1|  if (!_hb_font_funcs_set_middle (ffuncs, user_data, destroy))           \
  ------------------
  |  Branch (936:7): [True: 0, False: 1]
  ------------------
  937|      1|      return;                                                            \
  938|      1|									 \
  939|      1|  if (func)                                                              \
  ------------------
  |  Branch (939:7): [True: 1, False: 0]
  ------------------
  940|      1|    ffuncs->get.f.name = func;                                           \
  941|      1|  else                                                                   \
  942|      1|    ffuncs->get.f.name = hb_font_##get_##name##_default;                   \
  943|      1|									 \
  944|      1|  if (ffuncs->user_data)                                                 \
  ------------------
  |  Branch (944:7): [True: 0, False: 1]
  ------------------
  945|      1|    ffuncs->user_data->name = user_data;                                 \
  946|      1|  if (ffuncs->destroy)                                                   \
  ------------------
  |  Branch (946:7): [True: 0, False: 1]
  ------------------
  947|      1|    ffuncs->destroy->name = destroy;                                     \
  948|      1|}
_ZN9hb_font_t12has_func_setEj:
  955|  2.32M|{
  956|  2.32M|  return this->klass->get.array[i] != _hb_font_funcs_default.get.array[i];
  957|  2.32M|}
_ZN9hb_font_t8has_funcEj:
  961|  2.15M|{
  962|  2.15M|  return has_func_set (i) ||
  ------------------
  |  Branch (962:10): [True: 0, False: 2.15M]
  ------------------
  963|  2.15M|	 (parent && parent != &_hb_Null_hb_font_t && parent->has_func (i));
  ------------------
  |  Branch (963:4): [True: 2.15M, False: 0]
  |  Branch (963:14): [True: 0, False: 2.15M]
  |  Branch (963:47): [True: 0, False: 0]
  ------------------
  964|  2.15M|}
hb_font_get_glyph:
 1028|   436k|{
 1029|   436k|  if (unlikely (variation_selector))
  ------------------
  |  |  259|   436k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 436k]
  |  |  ------------------
  ------------------
 1030|      0|    return font->get_variation_glyph (unicode, variation_selector, glyph);
 1031|   436k|  return font->get_nominal_glyph (unicode, glyph);
 1032|   436k|}
hb_font_get_nominal_glyph:
 1055|  52.6k|{
 1056|  52.6k|  return font->get_nominal_glyph (unicode, glyph);
 1057|  52.6k|}
hb_font_get_variation_glyph:
 1109|  33.3k|{
 1110|  33.3k|  return font->get_variation_glyph (unicode, variation_selector, glyph);
 1111|  33.3k|}
hb_font_get_glyph_h_advance:
 1128|  33.3k|{
 1129|  33.3k|  return font->get_glyph_h_advance (glyph);
 1130|  33.3k|}
hb_font_get_glyph_v_advance:
 1147|  33.3k|{
 1148|  33.3k|  return font->get_glyph_v_advance (glyph);
 1149|  33.3k|}
hb_font_get_glyph_h_origin:
 1219|  33.3k|{
 1220|  33.3k|  return font->get_glyph_h_origin (glyph, x, y);
 1221|  33.3k|}
hb_font_get_glyph_v_origin:
 1242|  33.3k|{
 1243|  33.3k|  return font->get_glyph_v_origin (glyph, x, y);
 1244|  33.3k|}
hb_font_get_glyph_extents:
 1314|  33.3k|{
 1315|  33.3k|  return font->get_glyph_extents (glyph, extents);
 1316|  33.3k|}
hb_font_get_glyph_contour_point:
 1339|  33.3k|{
 1340|  33.3k|  return font->get_glyph_contour_point (glyph, point_index, x, y);
 1341|  33.3k|}
hb_font_get_glyph_name:
 1364|  33.3k|{
 1365|  33.3k|  return font->get_glyph_name (glyph, name, size);
 1366|  33.3k|}
hb_font_get_glyph_from_name:
 1388|  33.3k|{
 1389|  33.3k|  return font->get_glyph_from_name (name, len, glyph);
 1390|  33.3k|}
hb_font_get_glyph_shape:
 1410|  33.3k|{
 1411|  33.3k|  hb_font_draw_glyph (font, glyph, dfuncs, draw_data);
 1412|  33.3k|}
hb_font_draw_glyph:
 1432|   140k|{
 1433|   140k|  font->draw_glyph (glyph, dfuncs, draw_data);
 1434|   140k|}
hb_font_create:
 1852|  33.3k|{
 1853|  33.3k|  hb_font_t *font = _hb_font_create (face);
 1854|       |
 1855|  33.3k|#ifndef HB_NO_OT_FONT
 1856|       |  /* Install our in-house, very lightweight, funcs. */
 1857|  33.3k|  hb_ot_font_set_funcs (font);
 1858|  33.3k|#endif
 1859|       |
 1860|  33.3k|#ifndef HB_NO_VAR
 1861|  33.3k|  if (face && face->index >> 16)
  ------------------
  |  Branch (1861:7): [True: 33.3k, False: 0]
  |  Branch (1861:15): [True: 0, False: 33.3k]
  ------------------
 1862|      0|    hb_font_set_var_named_instance (font, (face->index >> 16) - 1);
 1863|  33.3k|#endif
 1864|       |
 1865|  33.3k|  return font;
 1866|  33.3k|}
hb_font_get_empty:
 1952|  33.3k|{
 1953|  33.3k|  return const_cast<hb_font_t *> (&Null (hb_font_t));
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1954|  33.3k|}
hb_font_destroy:
 1984|  66.5k|{
 1985|  66.5k|  if (!hb_object_destroy (font)) return;
  ------------------
  |  Branch (1985:7): [True: 33.3k, False: 33.2k]
  ------------------
 1986|       |
 1987|  33.2k|  font->data.fini ();
 1988|       |
 1989|  33.2k|  if (font->destroy)
  ------------------
  |  Branch (1989:7): [True: 33.2k, False: 41]
  ------------------
 1990|  33.2k|    font->destroy (font->user_data);
 1991|       |
 1992|  33.2k|  hb_font_destroy (font->parent);
 1993|  33.2k|  hb_face_destroy (font->face);
 1994|  33.2k|  hb_font_funcs_destroy (font->klass);
 1995|       |
 1996|  33.2k|  hb_free (font->coords);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 1997|  33.2k|  hb_free (font->design_coords);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 1998|       |
 1999|  33.2k|  hb_free (font);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 2000|  33.2k|}
hb_font_get_face:
 2215|  80.9k|{
 2216|  80.9k|  return font->face;
 2217|  80.9k|}
hb_font_set_funcs:
 2237|  98.6k|{
 2238|  98.6k|  if (hb_object_is_immutable (font))
  ------------------
  |  Branch (2238:7): [True: 221, False: 98.4k]
  ------------------
 2239|    221|  {
 2240|    221|    if (destroy)
  ------------------
  |  Branch (2240:9): [True: 221, False: 0]
  ------------------
 2241|    221|      destroy (font_data);
 2242|    221|    return;
 2243|    221|  }
 2244|       |
 2245|  98.4k|  font->serial++;
 2246|       |
 2247|  98.4k|  if (font->destroy)
  ------------------
  |  Branch (2247:7): [True: 65.2k, False: 33.2k]
  ------------------
 2248|  65.2k|    font->destroy (font->user_data);
 2249|       |
 2250|  98.4k|  if (!klass)
  ------------------
  |  Branch (2250:7): [True: 0, False: 98.4k]
  ------------------
 2251|      0|    klass = hb_font_funcs_get_empty ();
 2252|       |
 2253|  98.4k|  hb_font_funcs_reference (klass);
 2254|  98.4k|  hb_font_funcs_destroy (font->klass);
 2255|  98.4k|  font->klass = klass;
 2256|  98.4k|  font->user_data = font_data;
 2257|  98.4k|  font->destroy = destroy;
 2258|  98.4k|}
hb_font_set_scale:
 2333|  33.3k|{
 2334|  33.3k|  if (hb_object_is_immutable (font))
  ------------------
  |  Branch (2334:7): [True: 77, False: 33.2k]
  ------------------
 2335|     77|    return;
 2336|       |
 2337|  33.2k|  if (font->x_scale == x_scale && font->y_scale == y_scale)
  ------------------
  |  Branch (2337:7): [True: 0, False: 33.2k]
  |  Branch (2337:35): [True: 0, False: 0]
  ------------------
 2338|      0|    return;
 2339|       |
 2340|  33.2k|  font->serial++;
 2341|       |
 2342|  33.2k|  font->x_scale = x_scale;
 2343|  33.2k|  font->y_scale = y_scale;
 2344|  33.2k|  font->mults_changed ();
 2345|  33.2k|}
hb_font_set_var_coords_normalized:
 2831|  33.3k|{
 2832|  33.3k|  if (hb_object_is_immutable (font))
  ------------------
  |  Branch (2832:7): [True: 77, False: 33.2k]
  ------------------
 2833|     77|    return;
 2834|       |
 2835|  33.2k|  font->serial_coords = ++font->serial;
 2836|       |
 2837|  33.2k|  int *copy = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr;
  ------------------
  |  |  234|  1.05k|#define hb_calloc hb_calloc_impl
  ------------------
  |  Branch (2837:15): [True: 1.05k, False: 32.2k]
  ------------------
 2838|  33.2k|  int *unmapped = coords_length ? (int *) hb_calloc (coords_length, sizeof (coords[0])) : nullptr;
  ------------------
  |  |  234|  1.05k|#define hb_calloc hb_calloc_impl
  ------------------
  |  Branch (2838:19): [True: 1.05k, False: 32.2k]
  ------------------
 2839|  33.2k|  float *design_coords = coords_length ? (float *) hb_calloc (coords_length, sizeof (design_coords[0])) : nullptr;
  ------------------
  |  |  234|  1.05k|#define hb_calloc hb_calloc_impl
  ------------------
  |  Branch (2839:26): [True: 1.05k, False: 32.2k]
  ------------------
 2840|       |
 2841|  33.2k|  if (unlikely (coords_length && !(copy && unmapped && design_coords)))
  ------------------
  |  |  259|  38.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 33.2k]
  |  |  |  Branch (259:47): [True: 1.05k, False: 1]
  |  |  |  Branch (259:47): [True: 1.05k, False: 1]
  |  |  |  Branch (259:47): [True: 1.05k, False: 0]
  |  |  |  Branch (259:47): [True: 1.05k, False: 32.2k]
  |  |  ------------------
  ------------------
 2842|      2|  {
 2843|      2|    hb_free (copy);
  ------------------
  |  |  236|      2|#define hb_free hb_free_impl
  ------------------
 2844|      2|    hb_free (unmapped);
  ------------------
  |  |  236|      2|#define hb_free hb_free_impl
  ------------------
 2845|      2|    hb_free (design_coords);
  ------------------
  |  |  236|      2|#define hb_free hb_free_impl
  ------------------
 2846|      2|    return;
 2847|      2|  }
 2848|       |
 2849|  33.2k|  if (coords_length)
  ------------------
  |  Branch (2849:7): [True: 1.05k, False: 32.2k]
  ------------------
 2850|  1.05k|  {
 2851|  1.05k|    hb_memcpy (copy, coords, coords_length * sizeof (coords[0]));
 2852|  1.05k|    hb_memcpy (unmapped, coords, coords_length * sizeof (coords[0]));
 2853|  1.05k|  }
 2854|       |
 2855|       |  /* Best effort design coords simulation */
 2856|  33.2k|  font->face->table.avar->unmap_coords (unmapped, coords_length);
 2857|  38.6k|  for (unsigned int i = 0; i < coords_length; ++i)
  ------------------
  |  Branch (2857:28): [True: 5.39k, False: 33.2k]
  ------------------
 2858|  5.39k|    design_coords[i] = font->face->table.fvar->unnormalize_axis_value (i, unmapped[i]);
 2859|  33.2k|  hb_free (unmapped);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 2860|       |
 2861|  33.2k|  _hb_font_adopt_var_coords (font, copy, design_coords, coords_length);
 2862|  33.2k|}
hb-font.cc:_ZL29hb_font_get_nominal_glyph_nilP9hb_font_tPvjPjS1_:
  130|  2.18k|{
  131|  2.18k|  *glyph = 0;
  132|  2.18k|  return false;
  133|  2.18k|}
hb-font.cc:_ZL34hb_font_get_nominal_glyphs_defaultP9hb_font_tPvjPKjjPjjS1_:
  160|    498|{
  161|    498|  if (font->has_nominal_glyph_func_set ())
  ------------------
  |  Branch (161:7): [True: 249, False: 249]
  ------------------
  162|    249|  {
  163|    249|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (163:30): [True: 230, False: 19]
  ------------------
  164|    230|    {
  165|    230|      if (!font->get_nominal_glyph (*first_unicode, first_glyph))
  ------------------
  |  Branch (165:11): [True: 230, False: 0]
  ------------------
  166|    230|	return i;
  167|       |
  168|      0|      first_unicode = &StructAtOffsetUnaligned<hb_codepoint_t> (first_unicode, unicode_stride);
  169|      0|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  170|      0|    }
  171|     19|    return count;
  172|    249|  }
  173|       |
  174|    249|  return font->parent->get_nominal_glyphs (count,
  175|    249|					   first_unicode, unicode_stride,
  176|    249|					   first_glyph, glyph_stride);
  177|    498|}
hb-font.cc:_ZL31hb_font_get_variation_glyph_nilP9hb_font_tPvjjPjS1_:
  186|    124|{
  187|    124|  *glyph = 0;
  188|    124|  return false;
  189|    124|}
hb-font.cc:_ZL31hb_font_get_glyph_h_advance_nilP9hb_font_tPvjS1_:
  208|  1.54k|{
  209|  1.54k|  return font->x_scale;
  210|  1.54k|}
hb-font.cc:_ZL31hb_font_get_glyph_v_advance_nilP9hb_font_tPvjS1_:
  232|    118|{
  233|       |  /* TODO use font_extents.ascender+descender */
  234|    118|  return font->y_scale;
  235|    118|}
hb-font.cc:_ZL36hb_font_get_glyph_h_advances_defaultP9hb_font_tPvjPKjjPijS1_:
  263|    430|{
  264|    430|  if (font->has_glyph_h_advance_func_set ())
  ------------------
  |  Branch (264:7): [True: 215, False: 215]
  ------------------
  265|    215|  {
  266|  1.51k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (266:30): [True: 1.30k, False: 215]
  ------------------
  267|  1.30k|    {
  268|  1.30k|      *first_advance = font->get_glyph_h_advance (*first_glyph);
  269|  1.30k|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  270|  1.30k|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  271|  1.30k|    }
  272|    215|    return;
  273|    215|  }
  274|       |
  275|    215|  font->parent->get_glyph_h_advances (count,
  276|    215|				      first_glyph, glyph_stride,
  277|    215|				      first_advance, advance_stride);
  278|  1.51k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (278:28): [True: 1.30k, False: 215]
  ------------------
  279|  1.30k|  {
  280|  1.30k|    *first_advance = font->parent_scale_x_distance (*first_advance);
  281|  1.30k|    first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  282|  1.30k|  }
  283|    215|}
hb-font.cc:_ZL30hb_font_get_glyph_h_origin_nilP9hb_font_tPvjPiS2_S1_:
  324|  33.3k|{
  325|  33.3k|  *x = *y = 0;
  326|  33.3k|  return true;
  327|  33.3k|}
hb-font.cc:_ZL30hb_font_get_glyph_v_origin_nilP9hb_font_tPvjPiS2_S1_:
  350|    118|{
  351|    118|  *x = *y = 0;
  352|    118|  return false;
  353|    118|}
hb-font.cc:_ZL29hb_font_get_glyph_extents_nilP9hb_font_tPvjP18hb_glyph_extents_tS1_:
  417|    147|{
  418|    147|  hb_memset (extents, 0, sizeof (*extents));
  419|    147|  return false;
  420|    147|}
hb-font.cc:_ZL35hb_font_get_glyph_contour_point_nilP9hb_font_tPvjjPiS2_S1_:
  445|   226k|{
  446|   226k|  *x = *y = 0;
  447|   226k|  return false;
  448|   226k|}
hb-font.cc:_ZL26hb_font_get_glyph_name_nilP9hb_font_tPvjPcjS1_:
  472|    118|{
  473|    118|  if (size) *name = '\0';
  ------------------
  |  Branch (473:7): [True: 118, False: 0]
  ------------------
  474|    118|  return false;
  475|    118|}
hb-font.cc:_ZL31hb_font_get_glyph_from_name_nilP9hb_font_tPvPKciPjS1_:
  495|    118|{
  496|    118|  *glyph = 0;
  497|    118|  return false;
  498|    118|}
hb-font.cc:_ZL22hb_font_draw_glyph_nilP9hb_font_tPvjP15hb_draw_funcs_tS1_S1_:
  518|    118|{
  519|    118|}
hb-font.cc:_ZL27_hb_font_funcs_set_preambleP15hb_font_funcs_tbPPvPPFvS1_E:
  877|     13|{
  878|     13|  if (hb_object_is_immutable (ffuncs))
  ------------------
  |  Branch (878:7): [True: 0, False: 13]
  ------------------
  879|      0|  {
  880|      0|    if (*destroy)
  ------------------
  |  Branch (880:9): [True: 0, False: 0]
  ------------------
  881|      0|      (*destroy) (*user_data);
  882|      0|    return false;
  883|      0|  }
  884|       |
  885|     13|  if (func_is_null)
  ------------------
  |  Branch (885:7): [True: 0, False: 13]
  ------------------
  886|      0|  {
  887|      0|    if (*destroy)
  ------------------
  |  Branch (887:9): [True: 0, False: 0]
  ------------------
  888|      0|      (*destroy) (*user_data);
  889|      0|    *destroy = nullptr;
  890|      0|    *user_data = nullptr;
  891|      0|  }
  892|       |
  893|     13|  return true;
  894|     13|}
hb-font.cc:_ZL25_hb_font_funcs_set_middleP15hb_font_funcs_tPvPFvS1_E:
  900|     13|{
  901|     13|  if (user_data && !ffuncs->user_data)
  ------------------
  |  Branch (901:7): [True: 0, False: 13]
  |  Branch (901:20): [True: 0, False: 0]
  ------------------
  902|      0|  {
  903|      0|    ffuncs->user_data = (decltype (ffuncs->user_data)) hb_calloc (1, sizeof (*ffuncs->user_data));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  904|      0|    if (unlikely (!ffuncs->user_data))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  905|      0|      goto fail;
  906|      0|  }
  907|     13|  if (destroy && !ffuncs->destroy)
  ------------------
  |  Branch (907:7): [True: 0, False: 13]
  |  Branch (907:18): [True: 0, False: 0]
  ------------------
  908|      0|  {
  909|      0|    ffuncs->destroy = (decltype (ffuncs->destroy)) hb_calloc (1, sizeof (*ffuncs->destroy));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  910|      0|    if (unlikely (!ffuncs->destroy))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  911|      0|      goto fail;
  912|      0|  }
  913|       |
  914|     13|  return true;
  915|       |
  916|      0|fail:
  917|      0|  if (destroy)
  ------------------
  |  Branch (917:7): [True: 0, False: 0]
  ------------------
  918|      0|    (destroy) (user_data);
  919|      0|  return false;
  920|     13|}
hb-font.cc:_ZL33hb_font_get_nominal_glyph_defaultP9hb_font_tPvjPjS1_:
  141|  1.87k|{
  142|  1.87k|  if (font->has_nominal_glyphs_func_set ())
  ------------------
  |  Branch (142:7): [True: 0, False: 1.87k]
  ------------------
  143|      0|  {
  144|      0|    return font->get_nominal_glyphs (1, &unicode, 0, glyph, 0);
  145|      0|  }
  146|  1.87k|  return font->parent->get_nominal_glyph (unicode, glyph);
  147|  1.87k|}
hb-font.cc:_ZL35hb_font_get_variation_glyph_defaultP9hb_font_tPvjjPjS1_:
  198|     47|{
  199|     47|  return font->parent->get_variation_glyph (unicode, variation_selector, glyph);
  200|     47|}
hb-font.cc:_ZL35hb_font_get_glyph_h_advance_defaultP9hb_font_tPvjS1_:
  217|   128k|{
  218|   128k|  if (font->has_glyph_h_advances_func_set ())
  ------------------
  |  Branch (218:7): [True: 128k, False: 82]
  ------------------
  219|   128k|  {
  220|   128k|    hb_position_t ret;
  221|   128k|    font->get_glyph_h_advances (1, &glyph, 0, &ret, 0);
  222|   128k|    return ret;
  223|   128k|  }
  224|     82|  return font->parent_scale_x_distance (font->parent->get_glyph_h_advance (glyph));
  225|   128k|}
hb-font.cc:_ZL35hb_font_get_glyph_v_advance_defaultP9hb_font_tPvjS1_:
  242|  33.2k|{
  243|  33.2k|  if (font->has_glyph_v_advances_func_set ())
  ------------------
  |  Branch (243:7): [True: 33.2k, False: 41]
  ------------------
  244|  33.2k|  {
  245|  33.2k|    hb_position_t ret;
  246|  33.2k|    font->get_glyph_v_advances (1, &glyph, 0, &ret, 0);
  247|  33.2k|    return ret;
  248|  33.2k|  }
  249|     41|  return font->parent_scale_y_distance (font->parent->get_glyph_v_advance (glyph));
  250|  33.2k|}
hb-font.cc:_ZL34hb_font_get_glyph_h_origin_defaultP9hb_font_tPvjPiS2_S1_:
  336|  33.2k|{
  337|  33.2k|  hb_bool_t ret = font->parent->get_glyph_h_origin (glyph, x, y);
  338|  33.2k|  if (ret)
  ------------------
  |  Branch (338:7): [True: 33.2k, False: 0]
  ------------------
  339|  33.2k|    font->parent_scale_position (x, y);
  340|  33.2k|  return ret;
  341|  33.2k|}
hb-font.cc:_ZL34hb_font_get_glyph_v_origin_defaultP9hb_font_tPvjPiS2_S1_:
  362|     41|{
  363|     41|  hb_bool_t ret = font->parent->get_glyph_v_origin (glyph, x, y);
  364|     41|  if (ret)
  ------------------
  |  Branch (364:7): [True: 0, False: 41]
  ------------------
  365|      0|    font->parent_scale_position (x, y);
  366|     41|  return ret;
  367|     41|}
hb-font.cc:_ZL33hb_font_get_glyph_extents_defaultP9hb_font_tPvjP18hb_glyph_extents_tS1_:
  428|     70|{
  429|     70|  hb_bool_t ret = font->parent->get_glyph_extents (glyph, extents);
  430|     70|  if (ret) {
  ------------------
  |  Branch (430:7): [True: 0, False: 70]
  ------------------
  431|      0|    font->parent_scale_position (&extents->x_bearing, &extents->y_bearing);
  432|      0|    font->parent_scale_distance (&extents->width, &extents->height);
  433|      0|  }
  434|     70|  return ret;
  435|     70|}
hb-font.cc:_ZL39hb_font_get_glyph_contour_point_defaultP9hb_font_tPvjjPiS2_S1_:
  458|   226k|{
  459|   226k|  hb_bool_t ret = font->parent->get_glyph_contour_point (glyph, point_index, x, y);
  460|   226k|  if (ret)
  ------------------
  |  Branch (460:7): [True: 0, False: 226k]
  ------------------
  461|      0|    font->parent_scale_position (x, y);
  462|   226k|  return ret;
  463|   226k|}
hb-font.cc:_ZL30hb_font_get_glyph_name_defaultP9hb_font_tPvjPcjS1_:
  484|     41|{
  485|     41|  return font->parent->get_glyph_name (glyph, name, size);
  486|     41|}
hb-font.cc:_ZL35hb_font_get_glyph_from_name_defaultP9hb_font_tPvPKciPjS1_:
  507|     41|{
  508|     41|  return font->parent->get_glyph_from_name (name, len, glyph);
  509|     41|}
hb-font.cc:_ZL26hb_font_draw_glyph_defaultP9hb_font_tPvjP15hb_draw_funcs_tS1_S1_:
  644|     41|{
  645|     41|  hb_font_draw_glyph_default_adaptor_t adaptor = {
  646|     41|    draw_funcs,
  647|     41|    draw_data,
  648|     41|    font->parent->x_scale ? (float) font->x_scale / (float) font->parent->x_scale : 0.f,
  ------------------
  |  Branch (648:5): [True: 41, False: 0]
  ------------------
  649|     41|    font->parent->y_scale ? (float) font->y_scale / (float) font->parent->y_scale : 0.f,
  ------------------
  |  Branch (649:5): [True: 41, False: 0]
  ------------------
  650|     41|    font->parent->y_scale ? (font->slant - font->parent->slant) *
  ------------------
  |  Branch (650:5): [True: 41, False: 0]
  ------------------
  651|     41|			    (float) font->x_scale / (float) font->parent->y_scale : 0.f
  652|     41|  };
  653|       |
  654|     41|  font->parent->draw_glyph (glyph,
  655|     41|				 const_cast<hb_draw_funcs_t *> (&_hb_draw_funcs_default),
  656|     41|				 &adaptor);
  657|     41|}
hb-font.cc:_ZL15_hb_font_createP9hb_face_t:
 1810|  33.3k|{
 1811|  33.3k|  hb_font_t *font;
 1812|       |
 1813|  33.3k|  if (unlikely (!face))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
 1814|      0|    face = hb_face_get_empty ();
 1815|       |
 1816|  33.3k|  if (!(font = hb_object_create<hb_font_t> ()))
  ------------------
  |  Branch (1816:7): [True: 77, False: 33.2k]
  ------------------
 1817|     77|    return hb_font_get_empty ();
 1818|       |
 1819|  33.2k|  hb_face_make_immutable (face);
 1820|  33.2k|  font->parent = hb_font_get_empty ();
 1821|  33.2k|  font->face = hb_face_reference (face);
 1822|  33.2k|  font->klass = hb_font_funcs_get_empty ();
 1823|  33.2k|  font->data.init0 (font);
 1824|  33.2k|  font->x_scale = font->y_scale = face->get_upem ();
 1825|  33.2k|  font->embolden_in_place = true;
 1826|  33.2k|  font->x_multf = font->y_multf = 1.f;
 1827|  33.2k|  font->x_mult = font->y_mult = 1 << 16;
 1828|  33.2k|  font->instance_index = HB_FONT_NO_VAR_NAMED_INSTANCE;
  ------------------
  |  | 1185|  33.2k|#define HB_FONT_NO_VAR_NAMED_INSTANCE 0xFFFFFFFF
  ------------------
 1829|       |
 1830|  33.2k|  return font;
 1831|  33.3k|}
hb-font.cc:_ZL25_hb_font_adopt_var_coordsP9hb_font_tPiPfj:
 1873|  33.2k|{
 1874|  33.2k|  hb_free (font->coords);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 1875|  33.2k|  hb_free (font->design_coords);
  ------------------
  |  |  236|  33.2k|#define hb_free hb_free_impl
  ------------------
 1876|       |
 1877|  33.2k|  font->coords = coords;
 1878|  33.2k|  font->design_coords = design_coords;
 1879|  33.2k|  font->num_coords = coords_length;
 1880|       |
 1881|  33.2k|  font->mults_changed (); // Easiest to call this to drop cached data
 1882|  33.2k|}

_ZN9hb_font_t11em_scalef_xEf:
  154|  33.5k|  hb_position_t em_scalef_x (float v) { return em_multf (v, x_multf); }
_ZN9hb_font_t8em_multfEff:
  711|  74.9k|  { return (hb_position_t) roundf (em_fmultf (v, mult)); }
  ------------------
  |  |  207|  74.9k|#define roundf(x) _hb_roundf(x)
  ------------------
_ZN9hb_font_t9em_fmultfEff:
  713|  1.11M|  { return v * mult; }
_ZN9hb_font_t11em_scalef_yEf:
  155|  41.4k|  hb_position_t em_scalef_y (float v) { return em_multf (v, y_multf); }
_ZN9hb_font_t10em_scale_xEs:
  152|  31.7M|  hb_position_t em_scale_x (int16_t v) { return em_mult (v, x_mult); }
_ZN9hb_font_t7em_multEsl:
  709|  35.7M|  { return (hb_position_t) ((v * mult + 32768) >> 16); }
_ZN9hb_font_t10em_scale_yEs:
  153|  3.97M|  hb_position_t em_scale_y (int16_t v) { return em_mult (v, y_mult); }
_ZN9hb_font_t34get_glyph_contour_point_for_originEjj14hb_direction_tPiS1_:
  638|   193k|  {
  639|   193k|    hb_bool_t ret = get_glyph_contour_point (glyph, point_index, x, y);
  640|       |
  641|   193k|    if (ret)
  ------------------
  |  Branch (641:9): [True: 0, False: 193k]
  ------------------
  642|      0|      subtract_glyph_origin_for_direction (glyph, direction, x, y);
  643|       |
  644|   193k|    return ret;
  645|   193k|  }
_ZN9hb_font_t23get_glyph_contour_pointEjjPiS0_:
  400|   453k|  {
  401|   453k|    *x = *y = 0;
  402|   453k|    return klass->get.f.glyph_contour_point (this, user_data,
  403|   453k|					     glyph, point_index,
  404|   453k|					     x, y,
  405|   453k|					     !klass->user_data ? nullptr : klass->user_data->glyph_contour_point);
  ------------------
  |  Branch (405:11): [True: 453k, False: 0]
  ------------------
  406|   453k|  }
_ZN9hb_font_t18get_glyph_h_originEjPiS0_:
  348|  66.5k|  {
  349|  66.5k|    *x = *y = 0;
  350|  66.5k|    return klass->get.f.glyph_h_origin (this, user_data,
  351|  66.5k|					glyph, x, y,
  352|  66.5k|					!klass->user_data ? nullptr : klass->user_data->glyph_h_origin);
  ------------------
  |  Branch (352:6): [True: 66.5k, False: 0]
  ------------------
  353|  66.5k|  }
_ZN9hb_font_t18get_glyph_v_originEjPiS0_:
  357|  33.3k|  {
  358|  33.3k|    *x = *y = 0;
  359|  33.3k|    return klass->get.f.glyph_v_origin (this, user_data,
  360|  33.3k|					glyph, x, y,
  361|  33.3k|					!klass->user_data ? nullptr : klass->user_data->glyph_v_origin);
  ------------------
  |  Branch (361:6): [True: 33.3k, False: 0]
  ------------------
  362|  33.3k|  }
_ZN9hb_font_t19get_glyph_h_advanceEj:
  307|   129k|  {
  308|   129k|    return klass->get.f.glyph_h_advance (this, user_data,
  309|   129k|					 glyph,
  310|   129k|					 !klass->user_data ? nullptr : klass->user_data->glyph_h_advance);
  ------------------
  |  Branch (310:7): [True: 129k, False: 0]
  ------------------
  311|   129k|  }
_ZN9hb_font_t27get_h_extents_with_fallbackEP17hb_font_extents_t:
  453|  66.2k|  {
  454|  66.2k|    if (!get_font_h_extents (extents))
  ------------------
  |  Branch (454:9): [True: 63.5k, False: 2.61k]
  ------------------
  455|  63.5k|    {
  456|  63.5k|      extents->ascender = y_scale * .8;
  457|  63.5k|      extents->descender = extents->ascender - y_scale;
  458|  63.5k|      extents->line_gap = 0;
  459|  63.5k|    }
  460|  66.2k|  }
_ZN9hb_font_t18get_font_h_extentsEP17hb_font_extents_t:
  254|  66.2k|  {
  255|  66.2k|    hb_memset (extents, 0, sizeof (*extents));
  256|  66.2k|    return klass->get.f.font_h_extents (this, user_data,
  257|  66.2k|					extents,
  258|  66.2k|					!klass->user_data ? nullptr : klass->user_data->font_h_extents);
  ------------------
  |  Branch (258:6): [True: 66.2k, False: 0]
  ------------------
  259|  66.2k|  }
_ZN9hb_font_t8dir_multE14hb_direction_t:
  151|   100k|  { return HB_DIRECTION_IS_VERTICAL(direction) ? y_mult : x_mult; }
  ------------------
  |  |  280|   100k|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  |  |  ------------------
  |  |  |  Branch (280:39): [True: 0, False: 100k]
  |  |  ------------------
  ------------------
_ZN9hb_font_t11em_fscale_xEs:
  156|   440k|  float em_fscale_x (int16_t v) { return em_fmult (v, x_multf); }
_ZN9hb_font_t11em_fscale_yEs:
  157|   440k|  float em_fscale_y (int16_t v) { return em_fmult (v, y_multf); }
_ZN9hb_font_t12em_fscalef_xEf:
  158|   522k|  float em_fscalef_x (float v) { return em_fmultf (v, x_multf); }
_ZN9hb_font_t12em_fscalef_yEf:
  159|   522k|  float em_fscalef_y (float v) { return em_fmultf (v, y_multf); }
_ZN9hb_font_t12em_scale_dirEs14hb_direction_t:
  161|  33.3k|  { return em_mult (v, dir_mult (direction)); }
_ZN9hb_font_t23parent_scale_x_distanceEi:
  165|  34.6k|  {
  166|  34.6k|    if (unlikely (parent && parent->x_scale != x_scale))
  ------------------
  |  |  259|  69.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 34.6k, False: 0]
  |  |  |  Branch (259:47): [True: 34.6k, False: 0]
  |  |  |  Branch (259:47): [True: 34.6k, False: 0]
  |  |  ------------------
  ------------------
  167|  34.6k|      return (hb_position_t) (v * (int64_t) this->x_scale / this->parent->x_scale);
  168|      0|    return v;
  169|  34.6k|  }
_ZN9hb_font_t23parent_scale_y_distanceEi:
  171|  33.3k|  {
  172|  33.3k|    if (unlikely (parent && parent->y_scale != y_scale))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 0]
  |  |  |  Branch (259:47): [True: 33.3k, False: 0]
  |  |  |  Branch (259:47): [True: 33.3k, False: 0]
  |  |  ------------------
  ------------------
  173|  33.3k|      return (hb_position_t) (v * (int64_t) this->y_scale / this->parent->y_scale);
  174|      0|    return v;
  175|  33.3k|  }
_ZN9hb_font_t23parent_scale_x_positionEi:
  177|  33.2k|  { return parent_scale_x_distance (v); }
_ZN9hb_font_t23parent_scale_y_positionEi:
  179|  33.2k|  { return parent_scale_y_distance (v); }
_ZN9hb_font_t21parent_scale_positionEPiS0_:
  187|  33.2k|  {
  188|  33.2k|    *x = parent_scale_x_position (*x);
  189|  33.2k|    *y = parent_scale_y_position (*y);
  190|  33.2k|  }
_ZN9hb_font_t19scale_glyph_extentsEP18hb_glyph_extents_t:
  193|   156k|  {
  194|   156k|    float x1 = em_fscale_x (extents->x_bearing);
  195|   156k|    float y1 = em_fscale_y (extents->y_bearing);
  196|   156k|    float x2 = em_fscale_x (extents->x_bearing + extents->width);
  197|   156k|    float y2 = em_fscale_y (extents->y_bearing + extents->height);
  198|       |
  199|       |    /* Apply slant. */
  200|   156k|    if (slant_xy)
  ------------------
  |  Branch (200:9): [True: 0, False: 156k]
  ------------------
  201|      0|    {
  202|      0|      x1 += hb_min (y1 * slant_xy, y2 * slant_xy);
  203|      0|      x2 += hb_max (y1 * slant_xy, y2 * slant_xy);
  204|      0|    }
  205|       |
  206|   156k|    extents->x_bearing = floorf (x1);
  207|   156k|    extents->y_bearing = floorf (y1);
  208|   156k|    extents->width = ceilf (x2) - extents->x_bearing;
  209|   156k|    extents->height = ceilf (y2) - extents->y_bearing;
  210|       |
  211|   156k|    if (x_strength || y_strength)
  ------------------
  |  Branch (211:9): [True: 0, False: 156k]
  |  Branch (211:23): [True: 0, False: 156k]
  ------------------
  212|      0|    {
  213|       |      /* Y */
  214|      0|      int y_shift = y_strength;
  215|      0|      if (y_scale < 0) y_shift = -y_shift;
  ------------------
  |  Branch (215:11): [True: 0, False: 0]
  ------------------
  216|      0|      extents->y_bearing += y_shift;
  217|      0|      extents->height -= y_shift;
  218|       |
  219|       |      /* X */
  220|      0|      int x_shift = x_strength;
  221|      0|      if (x_scale < 0) x_shift = -x_shift;
  ------------------
  |  Branch (221:11): [True: 0, False: 0]
  ------------------
  222|      0|      if (embolden_in_place)
  ------------------
  |  Branch (222:11): [True: 0, False: 0]
  ------------------
  223|      0|	extents->x_bearing -= x_shift / 2;
  224|      0|      extents->width += x_shift;
  225|      0|    }
  226|   156k|  }
_ZN9hb_font_t26has_nominal_glyph_func_setEv:
  245|    498|  { \
  246|    498|    hb_font_funcs_t *funcs = this->klass; \
  247|    498|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  248|    498|    return has_func_set (i); \
  249|    498|  }
_ZN9hb_font_t27has_nominal_glyphs_func_setEv:
  245|  1.87k|  { \
  246|  1.87k|    hb_font_funcs_t *funcs = this->klass; \
  247|  1.87k|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  248|  1.87k|    return has_func_set (i); \
  249|  1.87k|  }
_ZN9hb_font_t28has_glyph_h_advance_func_setEv:
  245|    430|  { \
  246|    430|    hb_font_funcs_t *funcs = this->klass; \
  247|    430|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  248|    430|    return has_func_set (i); \
  249|    430|  }
_ZN9hb_font_t29has_glyph_h_advances_func_setEv:
  245|   128k|  { \
  246|   128k|    hb_font_funcs_t *funcs = this->klass; \
  247|   128k|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  248|   128k|    return has_func_set (i); \
  249|   128k|  }
_ZN9hb_font_t29has_glyph_v_advances_func_setEv:
  245|  33.2k|  { \
  246|  33.2k|    hb_font_funcs_t *funcs = this->klass; \
  247|  33.2k|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  248|  33.2k|    return has_func_set (i); \
  249|  33.2k|  }
_ZN9hb_font_t23has_glyph_h_origin_funcEv:
  238|  1.69M|  { \
  239|  1.69M|    hb_font_funcs_t *funcs = this->klass; \
  240|  1.69M|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  241|  1.69M|    return has_func (i); \
  242|  1.69M|  } \
_ZN9hb_font_t24has_glyph_h_kerning_funcEv:
  238|   463k|  { \
  239|   463k|    hb_font_funcs_t *funcs = this->klass; \
  240|   463k|    unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
  241|   463k|    return has_func (i); \
  242|   463k|  } \
_ZN9hb_font_t9has_glyphEj:
  269|  1.69k|  {
  270|  1.69k|    hb_codepoint_t glyph;
  271|  1.69k|    return get_nominal_glyph (unicode, &glyph);
  272|  1.69k|  }
_ZN9hb_font_t17get_nominal_glyphEjPjj:
  277|  2.15M|  {
  278|  2.15M|    *glyph = not_found;
  279|  2.15M|    return klass->get.f.nominal_glyph (this, user_data,
  280|  2.15M|				       unicode, glyph,
  281|  2.15M|				       !klass->user_data ? nullptr : klass->user_data->nominal_glyph);
  ------------------
  |  Branch (281:12): [True: 2.15M, False: 0]
  ------------------
  282|  2.15M|  }
_ZN9hb_font_t18get_nominal_glyphsEjPKjjPjj:
  288|   571k|  {
  289|   571k|    return klass->get.f.nominal_glyphs (this, user_data,
  290|   571k|					count,
  291|   571k|					first_unicode, unicode_stride,
  292|   571k|					first_glyph, glyph_stride,
  293|   571k|					!klass->user_data ? nullptr : klass->user_data->nominal_glyphs);
  ------------------
  |  Branch (293:6): [True: 571k, False: 0]
  ------------------
  294|   571k|  }
_ZN9hb_font_t19get_variation_glyphEjjPjj:
  299|  34.5k|  {
  300|  34.5k|    *glyph = not_found;
  301|  34.5k|    return klass->get.f.variation_glyph (this, user_data,
  302|  34.5k|					 unicode, variation_selector, glyph,
  303|  34.5k|					 !klass->user_data ? nullptr : klass->user_data->variation_glyph);
  ------------------
  |  Branch (303:7): [True: 34.5k, False: 0]
  ------------------
  304|  34.5k|  }
_ZN9hb_font_t19get_glyph_v_advanceEj:
  314|  33.3k|  {
  315|  33.3k|    return klass->get.f.glyph_v_advance (this, user_data,
  316|  33.3k|					 glyph,
  317|  33.3k|					 !klass->user_data ? nullptr : klass->user_data->glyph_v_advance);
  ------------------
  |  Branch (317:7): [True: 33.3k, False: 0]
  ------------------
  318|  33.3k|  }
_ZN9hb_font_t20get_glyph_h_advancesEjPKjjPij:
  325|   693k|  {
  326|   693k|    return klass->get.f.glyph_h_advances (this, user_data,
  327|   693k|					  count,
  328|   693k|					  first_glyph, glyph_stride,
  329|   693k|					  first_advance, advance_stride,
  330|   693k|					  !klass->user_data ? nullptr : klass->user_data->glyph_h_advances);
  ------------------
  |  Branch (330:8): [True: 693k, False: 0]
  ------------------
  331|   693k|  }
_ZN9hb_font_t20get_glyph_v_advancesEjPKjjPij:
  338|  33.2k|  {
  339|  33.2k|    return klass->get.f.glyph_v_advances (this, user_data,
  340|  33.2k|					  count,
  341|  33.2k|					  first_glyph, glyph_stride,
  342|  33.2k|					  first_advance, advance_stride,
  343|  33.2k|					  !klass->user_data ? nullptr : klass->user_data->glyph_v_advances);
  ------------------
  |  Branch (343:8): [True: 33.2k, False: 0]
  ------------------
  344|  33.2k|  }
_ZN9hb_font_t17get_glyph_extentsEjP18hb_glyph_extents_t:
  390|   750k|  {
  391|   750k|    hb_memset (extents, 0, sizeof (*extents));
  392|   750k|    return klass->get.f.glyph_extents (this, user_data,
  393|   750k|				       glyph,
  394|   750k|				       extents,
  395|   750k|				       !klass->user_data ? nullptr : klass->user_data->glyph_extents);
  ------------------
  |  Branch (395:12): [True: 750k, False: 0]
  ------------------
  396|   750k|  }
_ZN9hb_font_t14get_glyph_nameEjPcj:
  410|  33.3k|  {
  411|  33.3k|    if (size) *name = '\0';
  ------------------
  |  Branch (411:9): [True: 33.3k, False: 0]
  ------------------
  412|  33.3k|    return klass->get.f.glyph_name (this, user_data,
  413|  33.3k|				    glyph,
  414|  33.3k|				    name, size,
  415|  33.3k|				    !klass->user_data ? nullptr : klass->user_data->glyph_name);
  ------------------
  |  Branch (415:9): [True: 33.3k, False: 0]
  ------------------
  416|  33.3k|  }
_ZN9hb_font_t19get_glyph_from_nameEPKciPj:
  420|  33.3k|  {
  421|  33.3k|    *glyph = 0;
  422|  33.3k|    if (len == -1) len = strlen (name);
  ------------------
  |  Branch (422:9): [True: 0, False: 33.3k]
  ------------------
  423|  33.3k|    return klass->get.f.glyph_from_name (this, user_data,
  424|  33.3k|					 name, len,
  425|  33.3k|					 glyph,
  426|  33.3k|					 !klass->user_data ? nullptr : klass->user_data->glyph_from_name);
  ------------------
  |  Branch (426:7): [True: 33.3k, False: 0]
  ------------------
  427|  33.3k|  }
_ZN9hb_font_t10draw_glyphEjP15hb_draw_funcs_tPv:
  431|   140k|  {
  432|   140k|    klass->get.f.draw_glyph (this, user_data,
  433|   140k|			     glyph,
  434|   140k|			     draw_funcs, draw_data,
  435|   140k|			     !klass->user_data ? nullptr : klass->user_data->draw_glyph);
  ------------------
  |  Branch (435:9): [True: 140k, False: 0]
  ------------------
  436|   140k|  }
_ZN9hb_font_t13mults_changedEv:
  690|  66.5k|  {
  691|  66.5k|    float upem = face->get_upem ();
  692|       |
  693|  66.5k|    x_multf = x_scale / upem;
  694|  66.5k|    y_multf = y_scale / upem;
  695|  66.5k|    bool x_neg = x_scale < 0;
  696|  66.5k|    x_mult = (x_neg ? -((int64_t) -x_scale << 16) : ((int64_t) x_scale << 16)) / upem;
  ------------------
  |  Branch (696:15): [True: 0, False: 66.5k]
  ------------------
  697|  66.5k|    bool y_neg = y_scale < 0;
  698|  66.5k|    y_mult = (y_neg ? -((int64_t) -y_scale << 16) : ((int64_t) y_scale << 16)) / upem;
  ------------------
  |  Branch (698:15): [True: 0, False: 66.5k]
  ------------------
  699|       |
  700|  66.5k|    x_strength = fabsf (roundf (x_scale * x_embolden));
  ------------------
  |  |  207|  66.5k|#define roundf(x) _hb_roundf(x)
  ------------------
  701|  66.5k|    y_strength = fabsf (roundf (y_scale * y_embolden));
  ------------------
  |  |  207|  66.5k|#define roundf(x) _hb_roundf(x)
  ------------------
  702|       |
  703|  66.5k|    slant_xy = y_scale ? slant * x_scale / y_scale : 0.f;
  ------------------
  |  Branch (703:16): [True: 66.5k, False: 0]
  ------------------
  704|       |
  705|  66.5k|    data.fini ();
  706|  66.5k|  }
_ZN9hb_font_t8em_fmultEsf:
  715|   881k|  { return (float) v * mult; }

_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIsLj2EEEERS4_EixEj:
   90|  53.5k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIsLj2EEEERS4_E4thizEv:
   70|  53.5k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_sink_tI10hb_array_tI28hb_aat_layout_feature_type_tEEclI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS8_KFS1_vEL24hb_function_sortedness_t0ELPv0EELSE_0EEEvT_:
  881|  33.3k|  {
  882|  33.3k|    for (; it; ++it)
  ------------------
  |  Branch (882:12): [True: 18, False: 33.3k]
  ------------------
  883|     18|      s << *it;
  884|  33.3k|  }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EES6_EcvbEv:
   80|  33.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EES6_E4thizEv:
   69|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS2_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  33.3k|  bool __more__ () const { return bool (it); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_EcvbEv:
   80|  33.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
   69|  66.7k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E8__more__Ev:
  203|  33.3k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
  194|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
   69|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_ElsIS1_EERS2_T_:
  109|     18|  iter_t& operator << (const T v) &  { **thiz() = v; ++*thiz(); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E4thizEv:
   70|    144|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_EdeEv:
   88|     18|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E8__item__Ev:
  199|     18|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E4thizEv:
  194|     18|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_EixEj:
   89|     18|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E4thizEv:
   69|     18|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_EppEv:
   93|     18|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E8__next__Ev:
  208|     18|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_E4thizEv:
  195|     18|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI28hb_aat_layout_feature_type_tERS1_EpLEj:
   91|     18|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EES6_EdeEv:
   88|     18|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EES6_E4thizEv:
   70|     54|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS2_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|     18|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_EdeEv:
   87|     18|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E8__item__Ev:
  199|     18|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11FeatureNameEERS3_EixEj:
   89|     18|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EES6_EppEv:
   93|     18|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS2_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|     18|  void __next__ () { ++it; }
_ZNR9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_EppEv:
   93|     18|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
   70|     36|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E8__next__Ev:
  208|     18|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
  195|     18|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN3AAT11FeatureNameEERS3_EpLEj:
   91|     18|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN3AAT11FeatureNameEERS3_E4thizEv:
   70|     36|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN21hb_map_iter_factory_tIMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0EEclI17hb_sorted_array_tIKS1_ELPv0EEE13hb_map_iter_tIT_S4_LS5_0ELDnEESD_:
  408|  33.3k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS2_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EEC2ERKS4_S7_:
  374|  33.3k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
_ZNK9hb_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEERS3_EpsEv:
   75|  33.3k|  iter_t operator + () const { return *thiz(); }
hb-aat-layout.cc:_ZNK4$_23clIMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOS7_:
  418|  33.3k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0EEC2ES4_:
  402|  33.3k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-aat-layout.cc:_ZNK4$_26clI10hb_array_tI28hb_aat_layout_feature_type_tEEE9hb_sink_tIT_EOS5_:
  893|  33.3k|  { return hb_sink_t<Sink> (s); }
_ZN9hb_sink_tI10hb_array_tI28hb_aat_layout_feature_type_tEEC2ES2_:
  876|  33.3k|  hb_sink_t (Sink s) : s (s) {}
_ZN9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EixEj:
   90|      3|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_E4thizEv:
   70|     11|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_sink_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tEEclI13hb_map_iter_tIS0_IKN3AAT11SettingNameEEZNKS6_11FeatureName18get_selector_infosEjPjPS1_SB_PKvEUlRS8_E_L24hb_function_sortedness_t0ELPv0EELSI_0EEEvT_:
  881|  33.3k|  {
  882|  33.3k|    for (; it; ++it)
  ------------------
  |  Branch (882:12): [True: 2, False: 33.3k]
  ------------------
  883|      2|      s << *it;
  884|  33.3k|  }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EES8_EcvbEv:
   80|  33.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EES8_E4thizEv:
   69|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS1_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS6_PKvEUlRS3_E_L24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  33.3k|  bool __more__ () const { return bool (it); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EcvbEv:
   80|  33.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_E4thizEv:
   69|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11SettingNameEERS3_E8__more__Ev:
  203|  33.3k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11SettingNameEERS3_E4thizEv:
  194|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_ElsIS1_EERS2_T_:
  109|      2|  iter_t& operator << (const T v) &  { **thiz() = v; ++*thiz(); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E4thizEv:
   70|     16|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_EdeEv:
   88|      2|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E8__item__Ev:
  199|      2|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E4thizEv:
  194|      2|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_EixEj:
   89|      2|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E4thizEv:
   69|      2|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_EppEv:
   93|      2|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E8__next__Ev:
  208|      2|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_E4thizEv:
  195|      2|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tERS1_EpLEj:
   91|      2|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EES8_EdeEv:
   88|      2|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EES8_E4thizEv:
   70|      6|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS1_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS6_PKvEUlRS3_E_L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|      2|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EdeEv:
   87|      2|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11SettingNameEERS3_E8__item__Ev:
  199|      2|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EixEj:
   89|      2|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EES8_EppEv:
   93|      2|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS1_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS6_PKvEUlRS3_E_L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|      2|  void __next__ () { ++it; }
_ZNR9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EppEv:
   93|      2|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11SettingNameEERS3_E8__next__Ev:
  208|      2|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN3AAT11SettingNameEERS3_E4thizEv:
  195|      2|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EpLEj:
   91|      2|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN21hb_map_iter_factory_tIZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS2_PKvEUlRKNS0_11SettingNameEE_L24hb_function_sortedness_t0EEclI10hb_array_tIS8_ELPv0EEE13hb_map_iter_tIT_SA_LSB_0ELDnEESI_:
  408|  33.3k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZN13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS1_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS6_PKvEUlRS3_E_L24hb_function_sortedness_t0ELPv0EEC2ERKS4_SC_:
  374|  33.3k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
_ZNK9hb_iter_tI10hb_array_tIKN3AAT11SettingNameEERS3_EpsEv:
   75|  33.3k|  iter_t operator + () const { return *thiz(); }
hb-aat-layout.cc:_ZNK4$_23clIZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSD_:
  418|  33.3k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS2_PKvEUlRKNS0_11SettingNameEE_L24hb_function_sortedness_t0EEC2ESA_:
  402|  33.3k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-aat-layout.cc:_ZNK4$_26clI10hb_array_tI37hb_aat_layout_feature_selector_info_tEEE9hb_sink_tIT_EOS5_:
  893|  33.3k|  { return hb_sink_t<Sink> (s); }
_ZN9hb_sink_tI10hb_array_tI37hb_aat_layout_feature_selector_info_tEEC2ES2_:
  876|  33.3k|  hb_sink_t (Sink s) : s (s) {}
_ZNK9hb_iter_tI10hb_array_tIKN3AAT7FeatureEERS3_E13get_item_sizeEv:
   62|  19.5k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  19.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
hb-aat-layout.cc:_ZNK4$_10clI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ExtendedTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EERK4$_11SJ_LSF_0EEEbOT_OT0_OT1_:
  996|  7.99k|  {
  997|  8.29k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (997:33): [True: 6.69k, False: 1.59k]
  ------------------
  998|  6.69k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (998:11): [True: 6.40k, False: 293]
  ------------------
  999|  6.40k|	return false;
 1000|  1.59k|    return true;
 1001|  7.99k|  }
hb-aat-layout.cc:_ZNK3$_9clIR13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ExtendedTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSI_:
  159|  7.99k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4iterEv:
   74|  7.99k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   69|  16.2k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEcvbEv:
   80|  8.29k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ExtendedTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  8.29k|  bool __more__ () const { return bool (it); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEERS3_EcvbEv:
   80|  30.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
   69|  56.5k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E8__more__Ev:
  203|  30.3k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
  194|  56.5k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E3lenEv:
   81|  30.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
   69|  56.5k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEdeEv:
   88|  6.69k|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   70|  7.28k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ExtendedTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  6.69k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEERS3_EdeEv:
   87|  26.2k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E8__item__Ev:
  199|  26.2k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_EixEj:
   89|  26.2k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEppEv:
   93|    293|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ExtendedTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|    293|  void __next__ () { ++it; }
_ZNR9hb_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEERS3_EppEv:
   93|    614|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
   70|  1.22k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E8__next__Ev:
  208|    614|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
  195|    614|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_EpLEj:
   91|    614|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN12hb_aat_map_t13range_flags_tEERS3_E4thizEv:
   70|  1.22k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN21hb_map_iter_factory_tIZNK3AAT5ChainINS0_13ExtendedTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_L24hb_function_sortedness_t0EEclI17hb_sorted_array_tIKS7_ELPv0EEE13hb_map_iter_tIT_S8_LS9_0ELDnEESH_:
  408|  7.99k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ExtendedTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EEC2ERKS4_SB_:
  374|  7.99k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-aat-layout.cc:_ZNK3$_9clIRPK11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS8_:
  159|  29.6k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-aat-layout.cc:_ZNK4$_23clIZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSB_:
  418|  7.99k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK3AAT5ChainINS0_13ExtendedTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_L24hb_function_sortedness_t0EEC2ES8_:
  402|  7.99k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-aat-layout.cc:_ZNK4$_10clI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ObsoleteTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EERK4$_11SJ_LSF_0EEEbOT_OT0_OT1_:
  996|  21.6k|  {
  997|  22.0k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (997:33): [True: 19.5k, False: 2.42k]
  ------------------
  998|  19.5k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (998:11): [True: 19.2k, False: 321]
  ------------------
  999|  19.2k|	return false;
 1000|  2.42k|    return true;
 1001|  21.6k|  }
hb-aat-layout.cc:_ZNK3$_9clIR13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ObsoleteTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSI_:
  159|  21.6k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4iterEv:
   74|  21.6k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   69|  43.7k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEcvbEv:
   80|  22.0k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ObsoleteTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  22.0k|  bool __more__ () const { return bool (it); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEdeEv:
   88|  19.5k|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   70|  20.2k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ObsoleteTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  19.5k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNR9hb_iter_tI13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS3_E_L24hb_function_sortedness_t0ELPv0EEbEppEv:
   93|    321|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ObsoleteTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|    321|  void __next__ () { ++it; }
_ZN21hb_map_iter_factory_tIZNK3AAT5ChainINS0_13ObsoleteTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_L24hb_function_sortedness_t0EEclI17hb_sorted_array_tIKS7_ELPv0EEE13hb_map_iter_tIT_S8_LS9_0ELDnEESH_:
  408|  21.6k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZN13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS5_13ObsoleteTypesEE5applyEPNS5_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0ELPv0EEC2ERKS4_SB_:
  374|  21.6k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-aat-layout.cc:_ZNK4$_23clIZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSB_:
  418|  21.6k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK3AAT5ChainINS0_13ObsoleteTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_L24hb_function_sortedness_t0EEC2ES8_:
  402|  21.6k|  hb_map_iter_factory_t (Proj f) : f (f) {}
_Z7hb_fillI10hb_array_tIjEjLPv0EEvOT_RKT0_:
 1013|  14.5k|{
 1014|   985k|  for (auto i = hb_iter (c); i; i++)
  ------------------
  |  Branch (1014:30): [True: 971k, False: 14.5k]
  ------------------
 1015|   971k|    *i = v;
 1016|  14.5k|}
_ZNK9hb_iter_tI10hb_array_tIjERjE4iterEv:
   74|  14.5k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIjERjE4thizEv:
   69|  5.51M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIjERjEcvbEv:
   80|   985k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIjERjE8__more__Ev:
  203|   985k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIjERjE4thizEv:
  194|  4.50M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIjERjE3lenEv:
   81|   985k|  unsigned len () const { return thiz()->__len__ (); }
_ZN9hb_iter_tI10hb_array_tIjERjEppEi:
  101|   971k|  iter_t operator ++ (int) { iter_t c (*thiz()); ++*thiz(); return c; }
_ZN9hb_iter_tI10hb_array_tIjERjE4thizEv:
   70|  27.1M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIjERjEppEv:
   93|  3.52M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIjERjE8__next__Ev:
  208|  3.52M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIjERjE4thizEv:
  195|  3.52M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIjERjEpLEj:
   91|  3.52M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIjERjEdeEv:
   88|  3.52M|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIjERjE8__item__Ev:
  199|  3.52M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIjERjEixEj:
   89|  3.52M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EpsEv:
   75|  1.71k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E4thizEv:
   69|  11.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZN10hb_apply_tIRFvPvEEclI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEELS0_0EEEvT_:
  681|  1.71k|  {
  682|  3.77k|    for (; it; ++it)
  ------------------
  |  Branch (682:12): [True: 2.05k, False: 1.71k]
  ------------------
  683|  2.05k|      (void) hb_invoke (a, *it);
  684|  1.71k|  }
_ZNK9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EcvbEv:
   80|  3.77k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E8__more__Ev:
  203|  3.77k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E4thizEv:
  194|  5.83k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E3lenEv:
   81|  3.77k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EppEv:
   93|  2.05k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E4thizEv:
   70|  10.2k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E8__next__Ev:
  208|  2.05k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E4thizEv:
  195|  2.05k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EpLEj:
   91|  2.05k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EdeEv:
   88|  2.05k|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_E8__item__Ev:
  199|  2.05k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEERS7_EixEj:
   89|  2.05k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNO9hb_iter_tI10hb_array_tIKPN22hb_serialize_context_t8object_tEERS4_EppEv:
   94|  4.86k|  iter_t  operator ++ () && { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKPN22hb_serialize_context_t8object_tEERS4_E4thizEv:
   70|  19.4k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKPN22hb_serialize_context_t8object_tEERS4_E8__next__Ev:
  208|  4.86k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKPN22hb_serialize_context_t8object_tEERS4_E4thizEv:
  195|  4.86k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKPN22hb_serialize_context_t8object_tEERS4_EpLEj:
   91|  4.86k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNR9hb_iter_tI10hb_array_tIKjERS1_EpLEj:
   91|  5.07k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKjERS1_E4thizEv:
   70|  30.1k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIN2OT6Layout6Common11RangeRecordINS2_10SmallTypesEEEERS6_E13get_item_sizeEv:
   62|     66|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|     66|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EcvbEv:
   80|  2.87M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_E4thizEv:
   69|  8.62M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT5IndexEERS3_E8__more__Ev:
  203|  2.87M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT5IndexEERS3_E4thizEv:
  194|  5.42M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_E3lenEv:
   81|  2.87M|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EppEv:
   93|  2.54M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_E4thizEv:
   70|  12.7M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT5IndexEERS3_E8__next__Ev:
  208|  2.54M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT5IndexEERS3_E4thizEv:
  195|  2.54M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EpLEj:
   91|  2.54M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EdeEv:
   88|  2.54M|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT5IndexEERS3_E8__item__Ev:
  199|  2.54M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EixEj:
   89|  2.54M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EpsEv:
   75|   327k|  iter_t operator + () const { return *thiz(); }
_ZN9hb_sink_tI10hb_array_tIjEEclIS0_IKN2OT5IndexEELPv0EEEvT_:
  881|   327k|  {
  882|  2.87M|    for (; it; ++it)
  ------------------
  |  Branch (882:12): [True: 2.54M, False: 327k]
  ------------------
  883|  2.54M|      s << *it;
  884|   327k|  }
_ZNR9hb_iter_tI10hb_array_tIjERjElsIN2OT5IndexEEERS1_T_:
  109|  2.54M|  iter_t& operator << (const T v) &  { **thiz() = v; ++*thiz(); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EpsEv:
   75|  33.3k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E4thizEv:
   69|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZN9hb_sink_tI10hb_array_tIjEEclIS0_IKN2OT7IntTypeIjLj3EEEELPv0EEEvT_:
  881|  33.3k|  {
  882|  33.3k|    for (; it; ++it)
  ------------------
  |  Branch (882:12): [True: 1, False: 33.3k]
  ------------------
  883|      1|      s << *it;
  884|  33.3k|  }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EcvbEv:
   80|  33.3k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E8__more__Ev:
  203|  33.3k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E4thizEv:
  194|  33.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EppEv:
   93|      1|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E4thizEv:
   70|      5|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E8__next__Ev:
  208|      1|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E4thizEv:
  195|      1|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EpLEj:
   91|      1|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EdeEv:
   88|      1|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E8__item__Ev:
  199|      1|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_EixEj:
   89|      1|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI10hb_array_tIjERjElsIN2OT7IntTypeIjLj3EEEEERS1_T_:
  109|      1|  iter_t& operator << (const T v) &  { **thiz() = v; ++*thiz(); return *thiz(); }
_ZNK9hb_iter_tI14hb_iota_iter_tIjjEjE4iterEv:
   74|  3.49k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI14hb_iota_iter_tIjjEjE4thizEv:
   69|  68.1M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI14hb_iota_iter_tIjjEjEdeEv:
   87|  43.1M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK14hb_iota_iter_tIjjE8__item__Ev:
  776|  43.1M|  __item_t__ __item__ () const { return hb_ridentity (v); }
_ZNK9hb_iter_tI14hb_iota_iter_tIjjEjEcvbEv:
   80|  25.0M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK14hb_iota_iter_tIjjE8__more__Ev:
  777|  25.0M|  bool __more__ () const { return true; }
_ZNR9hb_iter_tI14hb_iota_iter_tIjjEjEppEv:
   93|  11.1M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI14hb_iota_iter_tIjjEjE4thizEv:
   70|  29.9M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN14hb_iota_iter_tIjjE8__next__Ev:
  779|  11.1M|  void __next__ () { inc (step, hb_prioritize); }
  ------------------
  |  |   81|  11.1M|#define hb_prioritize hb_priority<16> ()
  ------------------
_ZN14hb_iota_iter_tIjjE3incEj11hb_priorityILj0EE:
  769|  11.1M|  { v += s; }
_ZN9hb_iter_tI10hb_array_tIiERiE4thizEv:
   70|   110k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIiERiE4thizEv:
  194|   373k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIiERiE4thizEv:
   69|   746k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID16EERS3_E3lenEv:
   81|  7.53k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
   69|  7.53k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID24EERS3_E3lenEv:
   81|  2.28k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID24EERS3_E4thizEv:
   69|  2.28k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEERS9_E13get_item_sizeEv:
   62|   200k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|   200k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E4iterEv:
   74|  19.4M|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E4thizEv:
   69|   797M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EpsEv:
   75|  19.4M|  iter_t operator + () const { return *thiz(); }
_ZN21hb_map_iter_factory_tIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE_L24hb_function_sortedness_t0EEclI10hb_array_tIS6_ELPv0EEE13hb_map_iter_tIT_S8_LS9_0ELDnEESG_:
  408|   674k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbE4iterEv:
   74|   674k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   69|  4.61M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbEcvbEv:
   80|  3.94M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E_L24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  3.94M|  bool __more__ () const { return bool (it); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EcvbEv:
   80|   196M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E8__more__Ev:
  203|   196M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E4thizEv:
  194|   379M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E3lenEv:
   81|   196M|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbEppEv:
   93|  3.26M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   70|  9.86M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E_L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  3.26M|  void __next__ () { ++it; }
_ZNR9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EppEv:
   93|   177M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E4thizEv:
   70|   709M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E8__next__Ev:
  208|   177M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E4thizEv:
  195|   177M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EpLEj:
   91|   177M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EEbEdeEv:
   88|  3.33M|  item_t operator * () { return thiz()->__item__ (); }
_ZNK13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E_L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  3.33M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EdeEv:
   87|   182M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_E8__item__Ev:
  199|   182M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEERS4_EixEj:
   89|   182M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZN21hb_map_iter_factory_tIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_L24hb_function_sortedness_t0EEclI10hb_array_tIS6_ELPv0EEE13hb_map_iter_tIT_S8_LS9_0ELDnEESG_:
  408|  18.7M|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbE4iterEv:
   74|  18.7M|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   69|   211M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbEcvbEv:
   80|   192M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E0_L24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|   192M|  bool __more__ () const { return bool (it); }
_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbEppEv:
   93|   174M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbE4thizEv:
   70|   527M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E0_L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|   174M|  void __next__ () { ++it; }
_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EEbEdeEv:
   88|   179M|  item_t operator * () { return thiz()->__item__ (); }
_ZNK13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E0_L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|   179M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpsEv:
   75|   990k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   69|  9.25M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EcvbEv:
   80|  2.24M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__more__Ev:
  203|  2.24M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  194|  4.13M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E3lenEv:
   81|  2.24M|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EppEv:
   93|  1.25M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   70|  5.03M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__next__Ev:
  208|  1.25M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  195|  1.25M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpLEj:
   91|  1.25M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EdeEv:
   87|  1.88M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__item__Ev:
  199|  1.88M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EixEj:
   89|  1.88M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpsEv:
   75|  32.3k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   69|   162k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EcvbEv:
   80|  35.5k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__more__Ev:
  203|  35.5k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  194|  65.2k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E3lenEv:
   81|  35.5k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EppEv:
   93|  3.22k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   70|  12.8k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__next__Ev:
  208|  3.22k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  195|  3.22k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpLEj:
   91|  3.22k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EdeEv:
   87|  29.6k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__item__Ev:
  199|  29.6k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EixEj:
   89|  29.6k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpsEv:
   75|   852k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   69|  30.4M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EcvbEv:
   80|  7.72M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__more__Ev:
  203|  7.72M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  194|  14.8M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E3lenEv:
   81|  7.72M|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EppEv:
   93|  6.87M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   70|  27.5M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__next__Ev:
  208|  6.87M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  195|  6.87M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpLEj:
   91|  6.87M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EdeEv:
   87|  7.07M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__item__Ev:
  199|  7.07M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EixEj:
   89|  7.07M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpsEv:
   75|   435k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   69|  2.48M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EcvbEv:
   80|   529k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__more__Ev:
  203|   529k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  194|  1.02M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E3lenEv:
   81|   529k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EppEv:
   93|  93.9k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
   70|   375k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__next__Ev:
  208|  93.9k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E4thizEv:
  195|  93.9k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EpLEj:
   91|  93.9k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EdeEv:
   87|   493k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_E8__item__Ev:
  199|   493k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSA_EixEj:
   89|   493k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeItLj2EEEERS4_E13get_item_sizeEv:
   62|  1.88M|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  1.88M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj3EEEERS4_E13get_item_sizeEv:
   62|  29.6k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  29.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E5beginEv:
   77|  51.5k|  iter_t begin () const { return _begin (); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E6_beginEv:
   76|  51.5k|  iter_t _begin () const { return *thiz(); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E4thizEv:
   69|   103k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E3endEv:
   79|  51.5k|  iter_t end () const { return _end (); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E4_endEv:
   78|  51.5k|  iter_t _end () const { return thiz()->__end__ (); }
_ZN9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_EdeEv:
   88|   936k|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_E4thizEv:
   70|  2.77M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_23VarCompositeGlyphRecordEEERKS3_EppEv:
   93|   920k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIiERiEcvbEv:
   80|   373k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIiERiE8__more__Ev:
  203|   373k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK9hb_iter_tI10hb_array_tIiERiE3lenEv:
   81|   373k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E5beginEv:
   77|  46.4k|  iter_t begin () const { return _begin (); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E6_beginEv:
   76|  46.4k|  iter_t _begin () const { return *thiz(); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E4thizEv:
   69|  92.8k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E3endEv:
   79|  46.4k|  iter_t end () const { return _end (); }
_ZNK9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E4_endEv:
   78|  46.4k|  iter_t _end () const { return thiz()->__end__ (); }
_ZN9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_EdeEv:
   88|   146k|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_E4thizEv:
   70|   410k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tIN2OT9glyf_impl19composite_iter_tmplINS1_20CompositeGlyphRecordEEERKS3_EppEv:
   93|   132k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_EixEj:
   90|  2.11M|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_E4thizEv:
   70|  2.74M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7HBFixedINS1_7IntTypeIsLj2EEELj14EEEERS6_E13get_item_sizeEv:
   62|   165k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|   165k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZN9hb_iter_tI10hb_array_tIiERiEixEj:
   90|   110k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_E13get_item_sizeEv:
   62|  12.5k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  12.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_EcvbEv:
   80|   333k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_E4thizEv:
   69|   666k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT15contour_point_tEERS2_E8__more__Ev:
  203|   333k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT15contour_point_tEERS2_E4thizEv:
  194|   333k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_E3lenEv:
   81|   333k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIN2OT15contour_point_tEERS2_EpLEj:
   91|   318k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKcERS1_E13get_item_sizeEv:
   62|  1.54M|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  1.54M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZN9hb_iter_tI10hb_array_tIKN2OT14ResourceRecordEERS3_EixEj:
   90|    417|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT14ResourceRecordEERS3_E4thizEv:
   70|    417|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_sink_tI10hb_array_tIjEEC2ES1_:
  876|   365k|  hb_sink_t (Sink s) : s (s) {}
hb-face.cc:_ZNK3$_8clIR10hb_array_tIjEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS4_:
  159|  14.5k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-face.cc:_ZNK3$_8clIN12hb_hashmap_tIjjLb1EE6item_tEEE10hb_array_tIT_EPS5_j:
  165|  32.3k|  { return hb_array_t<Type> (array, length); }
_ZN9hb_iter_tI10hb_array_tIKN2OT10AxisRecordEERS3_EixEj:
   90|  5.39k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT10AxisRecordEERS3_E4thizEv:
   70|  5.39k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT10AxisRecordEERS3_E13get_item_sizeEv:
   62|    936|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|    936|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZN9hb_iter_tI10hb_array_tIKN2OT5IndexEERS3_EixEj:
   90|    125|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EixEj:
   90|     62|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E4thizEv:
   70|  1.76k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_sink_tI10hb_array_tIjEEclIS0_IKN2OT7IntTypeIjLj4EEEELPv0EEEvT_:
  881|  5.28k|  {
  882|  5.62k|    for (; it; ++it)
  ------------------
  |  Branch (882:12): [True: 341, False: 5.28k]
  ------------------
  883|    341|      s << *it;
  884|  5.28k|  }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EcvbEv:
   80|  5.62k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E4thizEv:
   69|  16.8k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E8__more__Ev:
  203|  5.62k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E4thizEv:
  194|  5.96k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E3lenEv:
   81|  5.62k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIjERjElsIN2OT7IntTypeIjLj4EEEEERS1_T_:
  109|    341|  iter_t& operator << (const T v) &  { **thiz() = v; ++*thiz(); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EdeEv:
   88|    341|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E8__item__Ev:
  199|    341|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EixEj:
   89|    341|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EppEv:
   93|    341|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E8__next__Ev:
  208|    341|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_E4thizEv:
  195|    341|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EpLEj:
   91|    341|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIjLj4EEEERS4_EpsEv:
   75|  5.28k|  iter_t operator + () const { return *thiz(); }
hb-ot-color.cc:_ZNK4$_25clI10hb_array_tIjEEE9hb_sink_tIT_EOS4_:
  893|  5.28k|  { return hb_sink_t<Sink> (s); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIhLj1EEEERS4_E13get_item_sizeEv:
   62|   159k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|   159k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIKhERS1_E4thizEv:
   69|  46.1k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIN2OT4cff113accelerator_t7gname_tEERS4_E13get_item_sizeEv:
   62|    829|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|    829|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIKhERS1_EixEj:
   89|  46.1k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT7IntTypeIsLj2EEEERS4_E13get_item_sizeEv:
   62|  79.5k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  79.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIhLj1EEEERS4_EixEj:
   90|   212k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZN9hb_iter_tI10hb_array_tIKN2OT7IntTypeIhLj1EEEERS4_E4thizEv:
   70|   212k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT10NameRecordEERS3_E4thizEv:
   69|  1.70M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT10NameRecordEERS3_EixEj:
   89|  1.70M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tI18hb_ot_name_entry_tERS1_E13get_item_sizeEv:
   62|    651|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|    651|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZN9hb_iter_tI10hb_array_tIKjERS1_EixEj:
   90|  20.0k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E3lenEv:
   81|  14.8k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
   69|  35.1k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_EppEv:
   93|  15.5k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
   70|   141k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E8__next__Ev:
  208|  20.3k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
  195|  20.3k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_EdeEv:
   88|  15.5k|  item_t operator * () { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E8__item__Ev:
  199|  20.3k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
  194|  20.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_EixEj:
   89|  20.3k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_EpLEj:
   91|  40.2k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNR9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID16EERS3_EppEv:
   93|  4.76k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID16EERS3_E4thizEv:
   70|  14.3k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN9hb_iter_tI17hb_sorted_array_tIKN2OT11HBGlyphID16EERS3_EdeEv:
   88|  4.76k|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI10hb_array_tIKN2OT11HBGlyphID16EERS3_EixEj:
   90|  14.8k|  item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EpsEv:
   75|  51.9k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
   69|  4.83M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EcvbEv:
   80|  1.22M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__more__Ev:
  203|  1.22M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
  194|  2.39M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E3lenEv:
   81|  1.22M|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EppEv:
   93|  1.16M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
   70|  4.67M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__next__Ev:
  208|  1.16M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
  195|  1.16M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EpLEj:
   91|  1.16M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EdeEv:
   87|  1.16M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__item__Ev:
  199|  1.16M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EixEj:
   89|  1.16M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EpsEv:
   75|  3.17k|  iter_t operator + () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
   69|  23.9k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EcvbEv:
   80|  6.78k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__more__Ev:
  203|  6.78k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
  194|  10.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E3lenEv:
   81|  6.78k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EppEv:
   93|  3.60k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
   70|  14.4k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__next__Ev:
  208|  3.60k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E4thizEv:
  195|  3.60k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EpLEj:
   91|  3.60k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EdeEv:
   87|  3.61k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_E8__item__Ev:
  199|  3.61k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEERSB_EixEj:
   89|  3.61k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
hb-ot-layout.cc:_ZNK4$_26clI10hb_array_tIjEEE9hb_sink_tIT_EOS4_:
  893|   360k|  { return hb_sink_t<Sink> (s); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EcvbEv:
   80|  1.22M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_E4thizEv:
   69|  2.39M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  1.22M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_E4thizEv:
   70|  2.33M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  1.16M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EppEv:
   93|  1.16M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  1.16M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_10SmallTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS6_8LigatureIS8_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SC_LSD_0ELDnEESR_:
  408|  51.9k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSC_SL_:
  374|  51.9k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSF_:
  159|  51.9k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSF_:
  418|  51.9k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_10SmallTypesEEEEL24hb_function_sortedness_t0EEC2ESC_:
  402|  51.9k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EcvbEv:
   80|  6.78k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_E4thizEv:
   69|  10.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  6.78k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_E4thizEv:
   70|  7.21k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  3.61k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EppEv:
   93|  3.60k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  3.60k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_11MediumTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS6_8LigatureIS8_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SC_LSD_0ELDnEESR_:
  408|  3.17k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSC_SL_:
  374|  3.17k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSF_:
  159|  3.17k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSF_:
  418|  3.17k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_11MediumTypesEEEEL24hb_function_sortedness_t0EEC2ESC_:
  402|  3.17k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EcvbEv:
   80|  2.24M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   69|  4.13M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  2.24M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   70|  2.51M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  1.88M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EppEv:
   93|  1.25M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  1.25M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout10SmallTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS4_4RuleIS7_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SB_LSC_0ELDnEESQ_:
  408|   990k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSB_SK_:
  374|   990k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSE_:
  159|   990k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSE_:
  418|   990k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout10SmallTypesEEEEL24hb_function_sortedness_t0EEC2ESB_:
  402|   990k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EcvbEv:
   80|  35.5k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   69|  65.2k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  35.5k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   70|  6.44k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  29.6k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EppEv:
   93|  3.22k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  3.22k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout11MediumTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS4_4RuleIS7_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SB_LSC_0ELDnEESQ_:
  408|  32.3k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSB_SK_:
  374|  32.3k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSE_:
  159|  32.3k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSE_:
  418|  32.3k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout11MediumTypesEEEEL24hb_function_sortedness_t0EEC2ESB_:
  402|  32.3k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EcvbEv:
   80|  7.72M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   69|  14.8M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|  7.72M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   70|  13.7M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  7.07M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EppEv:
   93|  6.87M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  6.87M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout10SmallTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS4_9ChainRuleIS7_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SB_LSC_0ELDnEESQ_:
  408|   852k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSB_SK_:
  374|   852k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSE_:
  159|   852k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSE_:
  418|   852k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout10SmallTypesEEEEL24hb_function_sortedness_t0EEC2ESB_:
  402|   852k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EcvbEv:
   80|   529k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   69|  1.02M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__more__Ev:
  384|   529k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_E4thizEv:
   70|   187k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|   493k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EppEv:
   93|  93.9k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  93.9k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout11MediumTypesEEEEL24hb_function_sortedness_t0EEclI10hb_array_tIKNS4_8OffsetToINS4_9ChainRuleIS7_EENS4_7IntTypeItLj2EEELb1EEEELPv0EEE13hb_map_iter_tIT_SB_LSC_0ELDnEESQ_:
  408|   435k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEC2ERKSB_SK_:
  374|   435k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clIRKN2OT7ArrayOfINS1_8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSE_:
  159|   435k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK4$_23clI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEEEE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSE_:
  418|   435k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout11MediumTypesEEEEL24hb_function_sortedness_t0EEC2ESB_:
  402|   435k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EERK4$_11SZ_LSP_0EEEbOT_OT0_OT1_:
  979|  51.9k|  {
  980|  1.22M|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 1.16M, False: 51.4k]
  ------------------
  981|  1.16M|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 574, False: 1.16M]
  ------------------
  982|    574|	return true;
  983|  51.4k|    return false;
  984|  51.9k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSY_:
  159|  51.9k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4iterEv:
   74|  51.9k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4thizEv:
   69|  1.27M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEcvbEv:
   80|  1.22M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__more__Ev:
  384|  1.22M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEdeEv:
   88|  1.16M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4thizEv:
   70|  3.50M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__item__Ev:
  382|  1.16M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EdeEv:
   87|  1.16M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEppEv:
   93|  1.16M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__next__Ev:
  386|  1.16M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToIS9_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS5_ELSD_0ELPv0EELSV_0EEESG_IT_SC_LSD_0ELDnEESX_:
  408|  51.9k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EEC2ERKSO_ST_:
  374|  51.9k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSF_:
  418|  51.9k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_L24hb_function_sortedness_t0EEC2ESC_:
  402|  51.9k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EERK4$_11SZ_LSP_0EEEbOT_OT0_OT1_:
  979|  3.17k|  {
  980|  6.78k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 3.61k, False: 3.17k]
  ------------------
  981|  3.61k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 4, False: 3.60k]
  ------------------
  982|      4|	return true;
  983|  3.17k|    return false;
  984|  3.17k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSY_:
  159|  3.17k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4iterEv:
   74|  3.17k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4thizEv:
   69|  9.95k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEcvbEv:
   80|  6.78k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__more__Ev:
  384|  6.78k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEdeEv:
   88|  3.61k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbE4thizEv:
   70|  10.8k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__item__Ev:
  382|  3.61k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EERKS8_EdeEv:
   87|  3.61k|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EEbEppEv:
   93|  3.60k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EE8__next__Ev:
  386|  3.60k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToIS9_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS5_ELSD_0ELPv0EELSV_0EEESG_IT_SC_LSD_0ELDnEESX_:
  408|  3.17k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS1_24hb_would_apply_context_tEEUlRKS7_E_LSM_0ELSN_0EEC2ERKSO_ST_:
  374|  3.17k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSF_:
  418|  3.17k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_L24hb_function_sortedness_t0EEC2ESC_:
  402|  3.17k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|  89.4k|  {
  980|   166k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 116k, False: 49.7k]
  ------------------
  981|   116k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 39.6k, False: 77.0k]
  ------------------
  982|  39.6k|	return true;
  983|  49.7k|    return false;
  984|  89.4k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|  89.4k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|  89.4k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|   255k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|   166k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|   166k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|   116k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|   270k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|   116k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EdeEv:
   87|  1.88M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  77.0k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  77.0k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|  89.4k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|  89.4k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|  89.4k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|  89.4k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|  2.25k|  {
  980|  4.05k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 1.81k, False: 2.23k]
  ------------------
  981|  1.81k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 21, False: 1.79k]
  ------------------
  982|     21|	return true;
  983|  2.23k|    return false;
  984|  2.25k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|  2.25k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|  2.25k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  6.31k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|  4.05k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|  4.05k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|  1.81k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  5.40k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|  1.81k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EdeEv:
   87|  29.6k|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  1.79k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  1.79k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|  2.25k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|  2.25k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|  2.25k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|  2.25k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|   335k|  {
  980|  6.87M|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 6.54M, False: 334k]
  ------------------
  981|  6.54M|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 495, False: 6.54M]
  ------------------
  982|    495|	return true;
  983|   334k|    return false;
  984|   335k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|   335k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|   335k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  7.21M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|  6.87M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|  6.87M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|  6.54M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  19.6M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|  6.54M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EdeEv:
   87|  7.07M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  6.54M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  6.54M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|   335k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|   335k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|   335k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|   335k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|  5.24k|  {
  980|  6.09k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 870, False: 5.22k]
  ------------------
  981|    870|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 15, False: 855]
  ------------------
  982|     15|	return true;
  983|  5.22k|    return false;
  984|  5.24k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|  5.24k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|  5.24k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  11.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|  6.09k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|  6.09k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|    870|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  2.58k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|    870|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EERKS7_EdeEv:
   87|   493k|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|    855|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|    855|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|  5.24k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|  5.24k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|  5.24k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|  5.24k|  hb_map_iter_factory_t (Proj f) : f (f) {}
_ZN14hb_iota_iter_tIjjEC2Ejj:
  757|  3.49k|  hb_iota_iter_t (T start, S step) : v (start), step (step) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|   901k|  {
  980|  2.08M|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 1.76M, False: 314k]
  ------------------
  981|  1.76M|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 586k, False: 1.18M]
  ------------------
  982|   586k|	return true;
  983|   314k|    return false;
  984|   901k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|   901k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|   901k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  2.98M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|  2.08M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|  2.08M|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|  1.76M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  4.12M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|  1.76M|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  1.18M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  1.18M|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|   901k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|   901k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|   901k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|   901k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|  30.1k|  {
  980|  31.5k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 27.8k, False: 3.71k]
  ------------------
  981|  27.8k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 26.3k, False: 1.43k]
  ------------------
  982|  26.3k|	return true;
  983|  3.71k|    return false;
  984|  30.1k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|  30.1k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|  30.1k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  61.6k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|  31.5k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|  31.5k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|  27.8k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  30.6k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|  27.8k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  1.43k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  1.43k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|  30.1k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|  30.1k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|  30.1k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|  30.1k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|   517k|  {
  980|   852k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 532k, False: 319k]
  ------------------
  981|   532k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 197k, False: 335k]
  ------------------
  982|   197k|	return true;
  983|   319k|    return false;
  984|   517k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|   517k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|   517k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|  1.36M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|   852k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|   852k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|   532k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|  1.20M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|   532k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|   335k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|   335k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|   517k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|   517k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|   517k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|   517k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EERK4$_11S11_LSO_0EEEbOT_OT0_OT1_:
  979|   430k|  {
  980|   523k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 492k, False: 30.4k]
  ------------------
  981|   492k|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 399k, False: 93.1k]
  ------------------
  982|   399k|	return true;
  983|  30.4k|    return false;
  984|   430k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS10_:
  159|   430k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4iterEv:
   74|   430k|  iter_t iter () const { return *thiz(); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   69|   953k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-layout.cc:_ZNK9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEcvbEv:
   80|   523k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__more__Ev:
  384|   523k|  bool __more__ () const { return bool (it); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEdeEv:
   88|   492k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-layout.cc:_ZN9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbE4thizEv:
   70|   678k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-layout.cc:_ZNK13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__item__Ev:
  382|   492k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-layout.cc:_ZNR9hb_iter_tI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EEbEppEv:
   93|  93.1k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EE8__next__Ev:
  386|  93.1k|  void __next__ () { ++it; }
hb-ot-layout.cc:_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEclI13hb_map_iter_tI10hb_array_tIKNS0_8OffsetToISB_NS0_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKS4_ELSF_0ELPv0EELSX_0EEESI_IT_SE_LSF_0ELDnEESZ_:
  408|   430k|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-layout.cc:_ZN13hb_map_iter_tIS_I10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0ELPv0EEZNKSH_5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKS6_E_LSL_0ELSM_0EEC2ERKSN_SV_:
  374|   430k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSH_:
  418|   430k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_L24hb_function_sortedness_t0EEC2ESE_:
  402|   430k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK3$_9clIN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEE10hb_array_tIT_EPS5_j:
  165|  54.9k|  { return hb_array_t<Type> (array, length); }
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E_L24hb_function_sortedness_t0ELPv0EERK4$_11SI_LSE_0EEEbOT_OT0_OT1_:
  979|   674k|  {
  980|  3.94M|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 3.33M, False: 608k]
  ------------------
  981|  3.33M|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 66.0k, False: 3.26M]
  ------------------
  982|  66.0k|	return true;
  983|   608k|    return false;
  984|   674k|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E_L24hb_function_sortedness_t0ELPv0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSH_:
  159|   674k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZN13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E_L24hb_function_sortedness_t0ELPv0EEC2ERKS5_SA_:
  374|   674k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK3$_9clI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS7_:
  159|  19.4M|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-layout.cc:_ZNK3$_9clIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEE10hb_array_tIT_EPS6_j:
  165|  19.4M|  { return hb_array_t<Type> (array, length); }
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSB_:
  418|   674k|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE_L24hb_function_sortedness_t0EEC2ES8_:
  402|   674k|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-layout.cc:_ZNK4$_34clI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E0_L24hb_function_sortedness_t0ELPv0EERK4$_11SI_LSE_0EEEbOT_OT0_OT1_:
  979|  18.7M|  {
  980|   192M|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (980:33): [True: 179M, False: 13.7M]
  ------------------
  981|   179M|      if (hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (981:11): [True: 5.01M, False: 174M]
  ------------------
  982|  5.01M|	return true;
  983|  13.7M|    return false;
  984|  18.7M|  }
hb-ot-layout.cc:_ZNK3$_9clIR13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E0_L24hb_function_sortedness_t0ELPv0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSH_:
  159|  18.7M|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZN13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E0_L24hb_function_sortedness_t0ELPv0EEC2ERKS5_SA_:
  374|  18.7M|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-layout.cc:_ZNK4$_23clIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOSB_:
  418|  18.7M|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
_ZN21hb_map_iter_factory_tIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_L24hb_function_sortedness_t0EEC2ES8_:
  402|  18.7M|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-math.cc:_ZNK4$_21clI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tELPv0EEE13hb_zip_iter_tIDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT0_EEE4iterEEEOSA_OSC_:
  582|  33.3k|  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
hb-ot-math.cc:_ZNK3$_8clIR10hb_array_tIKN2OT22MathGlyphVariantRecordEEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS7_:
  159|  33.3k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4iterEv:
   74|  66.6k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4thizEv:
   69|   166k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-math.cc:_ZNK3$_8clIR10hb_array_tI26hb_ot_math_glyph_variant_tEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS5_:
  159|  33.3k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4iterEv:
   74|  66.6k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4thizEv:
   69|   166k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZN13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES0_I26hb_ot_math_glyph_variant_tEEC2ERKS4_RKS6_:
  526|  66.6k|  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE5beginEv:
   77|  33.3k|  iter_t begin () const { return _begin (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE6_beginEv:
   76|  33.3k|  iter_t _begin () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE4thizEv:
   69|  66.6k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE3endEv:
   79|  33.3k|  iter_t end () const { return _end (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES0_I26hb_ot_math_glyph_variant_tEE7__end__Ev:
  566|  33.3k|  hb_zip_iter_t __end__ () const { return hb_zip_iter_t (a._end (), b._end ()); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E7__end__Ev:
  218|  33.3k|  {
  219|  33.3k|    if (thiz()->is_random_access_iterator)
  ------------------
  |  Branch (219:9): [True: 33.3k, False: 0]
  ------------------
  220|  33.3k|      return *thiz() + thiz()->len ();
  221|       |    /* Above expression loops twice. Following loops once. */
  222|      0|    auto it = *thiz();
  223|      0|    while (it) ++it;
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|    return it;
  225|  33.3k|  }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4thizEv:
  194|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_EplEj:
   99|  33.3k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
_ZNR9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_EpLEj:
   91|  33.3k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4thizEv:
   70|  66.7k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_EppEv:
   93|     29|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E8__next__Ev:
  208|     29|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E4thizEv:
  195|     29|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E7__end__Ev:
  218|  33.3k|  {
  219|  33.3k|    if (thiz()->is_random_access_iterator)
  ------------------
  |  Branch (219:9): [True: 33.3k, False: 0]
  ------------------
  220|  33.3k|      return *thiz() + thiz()->len ();
  221|       |    /* Above expression loops twice. Following loops once. */
  222|      0|    auto it = *thiz();
  223|      0|    while (it) ++it;
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|    return it;
  225|  33.3k|  }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4thizEv:
  194|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_EplEj:
   99|  33.3k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
_ZNR9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_EpLEj:
   91|  33.3k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4thizEv:
   70|  66.7k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_EppEv:
   93|     29|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E8__next__Ev:
  208|     29|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E4thizEv:
  195|     29|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES0_I26hb_ot_math_glyph_variant_tEEneERKS7_:
  570|  33.3k|  { return a != o.a && b != o.b; }
  ------------------
  |  Branch (570:12): [True: 29, False: 33.3k]
  |  Branch (570:24): [True: 29, False: 0]
  ------------------
_ZN9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EEdeEv:
   88|     29|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EE4thizEv:
   70|     87|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES0_I26hb_ot_math_glyph_variant_tEE8__item__Ev:
  558|     29|  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_EdeEv:
   87|     29|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_E8__item__Ev:
  199|     29|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEERS3_EixEj:
   89|     29|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_EdeEv:
   87|     29|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_E8__item__Ev:
  199|     29|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tI26hb_ot_math_glyph_variant_tERS1_EixEj:
   89|     29|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES1_I26hb_ot_math_glyph_variant_tEE9hb_pair_tIRS4_RS6_EEppEv:
   93|     29|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_zip_iter_tI10hb_array_tIKN2OT22MathGlyphVariantRecordEES0_I26hb_ot_math_glyph_variant_tEE8__next__Ev:
  562|     29|  void __next__ () { ++a; ++b; }
hb-ot-math.cc:_ZNK4$_21clI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tELPv0EEE13hb_zip_iter_tIDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT0_EEE4iterEEEOSA_OSC_:
  582|  33.3k|  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
hb-ot-math.cc:_ZNK3$_8clIR10hb_array_tIKN2OT19MathGlyphPartRecordEEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS7_:
  159|  33.3k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4iterEv:
   74|  66.6k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4thizEv:
   69|   166k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-math.cc:_ZNK3$_8clIR10hb_array_tI23hb_ot_math_glyph_part_tEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS5_:
  159|  33.3k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4iterEv:
   74|  66.6k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4thizEv:
   69|   166k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZN13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES0_I23hb_ot_math_glyph_part_tEEC2ERKS4_RKS6_:
  526|  66.6k|  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE5beginEv:
   77|  33.3k|  iter_t begin () const { return _begin (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE6_beginEv:
   76|  33.3k|  iter_t _begin () const { return *thiz(); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE4thizEv:
   69|  66.6k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE3endEv:
   79|  33.3k|  iter_t end () const { return _end (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES0_I23hb_ot_math_glyph_part_tEE7__end__Ev:
  566|  33.3k|  hb_zip_iter_t __end__ () const { return hb_zip_iter_t (a._end (), b._end ()); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E7__end__Ev:
  218|  33.3k|  {
  219|  33.3k|    if (thiz()->is_random_access_iterator)
  ------------------
  |  Branch (219:9): [True: 33.3k, False: 0]
  ------------------
  220|  33.3k|      return *thiz() + thiz()->len ();
  221|       |    /* Above expression loops twice. Following loops once. */
  222|      0|    auto it = *thiz();
  223|      0|    while (it) ++it;
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|    return it;
  225|  33.3k|  }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4thizEv:
  194|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_EplEj:
   99|  33.3k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
_ZNR9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_EpLEj:
   91|  33.3k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4thizEv:
   70|  66.7k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_EppEv:
   93|     22|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E8__next__Ev:
  208|     22|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E4thizEv:
  195|     22|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4_endEv:
   78|  33.3k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E7__end__Ev:
  218|  33.3k|  {
  219|  33.3k|    if (thiz()->is_random_access_iterator)
  ------------------
  |  Branch (219:9): [True: 33.3k, False: 0]
  ------------------
  220|  33.3k|      return *thiz() + thiz()->len ();
  221|       |    /* Above expression loops twice. Following loops once. */
  222|      0|    auto it = *thiz();
  223|      0|    while (it) ++it;
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|    return it;
  225|  33.3k|  }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4thizEv:
  194|   100k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_EplEj:
   99|  33.3k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
_ZNR9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_EpLEj:
   91|  33.3k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4thizEv:
   70|  66.7k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E3lenEv:
   81|  33.3k|  unsigned len () const { return thiz()->__len__ (); }
_ZNR9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_EppEv:
   93|     22|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E8__next__Ev:
  208|     22|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E4thizEv:
  195|     22|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES0_I23hb_ot_math_glyph_part_tEEneERKS7_:
  570|  33.3k|  { return a != o.a && b != o.b; }
  ------------------
  |  Branch (570:12): [True: 22, False: 33.3k]
  |  Branch (570:24): [True: 22, False: 0]
  ------------------
_ZN9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EEdeEv:
   88|     22|  item_t operator * () { return thiz()->__item__ (); }
_ZN9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EE4thizEv:
   70|     66|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNK13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES0_I23hb_ot_math_glyph_part_tEE8__item__Ev:
  558|     22|  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_EdeEv:
   87|     22|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_E8__item__Ev:
  199|     22|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEERS3_EixEj:
   89|     22|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_EdeEv:
   87|     22|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_E8__item__Ev:
  199|     22|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tI23hb_ot_math_glyph_part_tERS1_EixEj:
   89|     22|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNR9hb_iter_tI13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES1_I23hb_ot_math_glyph_part_tEE9hb_pair_tIRS4_RS6_EEppEv:
   93|     22|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN13hb_zip_iter_tI10hb_array_tIKN2OT19MathGlyphPartRecordEES0_I23hb_ot_math_glyph_part_tEE8__next__Ev:
  562|     22|  void __next__ () { ++a; ++b; }
_ZNK9hb_iter_tI10hb_array_tIN19hb_ot_map_builder_t14feature_info_tEERS2_E13get_item_sizeEv:
   62|  48.6k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  48.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
_ZNK9hb_iter_tI10hb_array_tIN11hb_ot_map_t12lookup_map_tEERS2_E13get_item_sizeEv:
   62|  13.7k|  constexpr unsigned get_item_size () const { return hb_static_size (Item); }
  ------------------
  |  |   91|  13.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
hb-ot-shaper-arabic.cc:_ZNK3$_9clIR11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS7_:
  159|  4.86k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEcvbEv:
   80|  32.5k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EE4thizEv:
   69|   155k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EE8__more__Ev:
  560|  32.5k|  bool __more__ () const { return bool (a) && bool (b); }
  ------------------
  |  Branch (560:35): [True: 30.8k, False: 1.66k]
  |  Branch (560:47): [True: 30.8k, False: 0]
  ------------------
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_EcvbEv:
   80|  32.5k|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
   69|   156k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E8__more__Ev:
  203|  63.4k|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
  194|   310k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E3lenEv:
   81|  68.0k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
   69|   465k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EcvbEv:
   80|  30.8k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-shaper-arabic.cc:_ZN24hb_filter_iter_factory_tIZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS0_11HBGlyphID16EE10hb_array_tIS7_EELPv0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11EclI13hb_map_iter_tISB_RK3$_6L24hb_function_sortedness_t1ELSC_0EELSC_0EEE16hb_filter_iter_tISF_SG_SJ_LDnEESF_:
  471|    787|  { return hb_filter_iter_t<Iter, Pred, Proj> (it, p, f); }
hb-ot-shaper-arabic.cc:_ZN16hb_filter_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EEZNS3_6Layout9GSUB_impl11SingleSubst9serializeIS8_LSD_0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11LSD_0EEC2ERKSE_SM_SP_:
  445|  27.5k|  { while (it && !hb_has (p.get (), hb_get (f.get (), *it))) ++it; }
  ------------------
  |  Branch (445:12): [True: 26.7k, False: 787]
  |  Branch (445:18): [True: 26.7k, False: 0]
  ------------------
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EERS4_EcvbEv:
   80|  28.3k|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EERS4_E4thizEv:
   69|  28.3k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t1ELPv0EE8__more__Ev:
  384|  28.3k|  bool __more__ () const { return bool (it); }
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EERS4_EdeEv:
   88|  26.7k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EERS4_E4thizEv:
   70|  80.2k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t1ELPv0EE8__item__Ev:
  382|  26.7k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEdeEv:
   87|   115k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EE8__item__Ev:
  558|   119k|  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_EdeEv:
   87|   119k|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E8__item__Ev:
  199|   239k|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EixEj:
   89|   239k|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EdeEv:
   87|   119k|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-shaper-arabic.cc:_ZNR9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EERS4_EppEv:
   93|  26.7k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t1ELPv0EE8__next__Ev:
  386|  26.7k|  void __next__ () { ++it; }
_ZNR9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEppEv:
   93|   118k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EE4thizEv:
   70|   242k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EE8__next__Ev:
  562|   119k|  void __next__ () { ++a; ++b; }
_ZNR9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_EppEv:
   93|   119k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
   70|   238k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E8__next__Ev:
  208|   238k|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
  195|   238k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EpLEj:
   91|   241k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4thizEv:
   70|   720k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EppEv:
   93|   119k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t1EEclI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS9_EELPv0EEE13hb_map_iter_tIT_S2_LS3_1ELDnEESG_:
  408|    787|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t1ELPv0EEC2ERKS7_SA_:
  374|    787|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEpsEv:
   75|  3.05k|  iter_t operator + () const { return *thiz(); }
hb-ot-shaper-arabic.cc:_ZNK4$_33clIRK3$_6EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t1EEOS5_:
  426|    787|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::RETAINS_SORTING> (f); }
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t1EEC2ES2_:
  402|    787|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-shaper-arabic.cc:_ZNK4$_29clIZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11EE24hb_filter_iter_factory_tISG_T0_EOSG_OSM_:
  483|    787|  { return hb_filter_iter_factory_t<Pred, Proj> (p, f); }
hb-ot-shaper-arabic.cc:_ZN24hb_filter_iter_factory_tIZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS0_11HBGlyphID16EE10hb_array_tIS7_EELPv0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11EC2ESG_SJ_:
  465|    787|  hb_filter_iter_factory_t (Pred p, Proj f) : p (p), f (f) {}
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI16hb_filter_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_6L24hb_function_sortedness_t1ELPv0EEZNS4_6Layout9GSUB_impl11SingleSubst9serializeIS9_LSE_0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11LSE_0EERS5_EcvbEv:
   80|    787|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI16hb_filter_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_6L24hb_function_sortedness_t1ELPv0EEZNS4_6Layout9GSUB_impl11SingleSubst9serializeIS9_LSE_0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11LSE_0EERS5_E4thizEv:
   69|    787|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK16hb_filter_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EEZNS3_6Layout9GSUB_impl11SingleSubst9serializeIS8_LSD_0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11LSD_0EE8__more__Ev:
  450|    787|  bool __more__ () const { return bool (it); }
_ZN9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEdeEv:
   88|  4.14k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-arabic.cc:_ZNK4$_24clI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERjRZNS3_6Layout9GSUB_impl11SingleSubst9serializeIS8_LPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_LSE_0EEEbOSH_OT0_OT1_:
  962|    787|  {
  963|  3.45k|    for (auto it = hb_iter (c); it; ++it)
  ------------------
  |  Branch (963:33): [True: 3.36k, False: 95]
  ------------------
  964|  3.36k|      if (!hb_match (std::forward<Pred> (p), hb_get (std::forward<Proj> (f), *it)))
  ------------------
  |  Branch (964:11): [True: 692, False: 2.66k]
  ------------------
  965|    692|	return false;
  966|     95|    return true;
  967|    787|  }
hb-ot-shaper-arabic.cc:_ZNK3$_9clIR13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSA_:
  159|    787|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EE4iterEv:
   74|    787|  iter_t iter () const { return *thiz(); }
_ZNO9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EEppEv:
   94|    787|  iter_t  operator ++ () && { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E3lenEv:
   81|  1.32k|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E4thizEv:
   69|  3.89k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EE7__len__Ev:
  385|  1.32k|  unsigned __len__ () const { return it.len (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EE3lenEv:
   81|  2.01k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EE7__len__Ev:
  561|  2.01k|  unsigned __len__ () const { return hb_min (a.len (), b.len ()); }
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_E3lenEv:
   81|  2.01k|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E5beginEv:
   77|  1.28k|  iter_t begin () const { return _begin (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E6_beginEv:
   76|  1.28k|  iter_t _begin () const { return *thiz(); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E3endEv:
   79|  1.28k|  iter_t end () const { return _end (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E4_endEv:
   78|  1.28k|  iter_t _end () const { return thiz()->__end__ (); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EE7__end__Ev:
  390|  1.28k|  hb_map_iter_t __end__ () const { return hb_map_iter_t (it._end (), f); }
_ZNK9hb_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE9hb_pair_tIRS3_S9_EE4_endEv:
   78|  1.28k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EE7__end__Ev:
  566|  1.28k|  hb_zip_iter_t __end__ () const { return hb_zip_iter_t (a._end (), b._end ()); }
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_E4_endEv:
   78|  1.28k|  iter_t _end () const { return thiz()->__end__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E7__end__Ev:
  218|  2.57k|  {
  219|  2.57k|    if (thiz()->is_random_access_iterator)
  ------------------
  |  Branch (219:9): [True: 2.57k, False: 0]
  ------------------
  220|  2.57k|      return *thiz() + thiz()->len ();
  221|       |    /* Above expression loops twice. Following loops once. */
  222|      0|    auto it = *thiz();
  223|      0|    while (it) ++it;
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|    return it;
  225|  2.57k|  }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_EplEj:
   99|  2.57k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4iterEv:
   74|  3.36k|  iter_t iter () const { return *thiz(); }
_ZNK9hb_iter_tI10hb_array_tIN2OT11HBGlyphID16EERS2_E4_endEv:
   78|  1.28k|  iter_t _end () const { return thiz()->__end__ (); }
_ZN13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EEC2ERKS3_RKS5_:
  526|  2.07k|  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EEC2ERKS7_SA_:
  374|  2.07k|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EEneERKSD_:
  392|  50.9k|  { return it != o.it; }
_ZNK13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS2_EEneERKS6_:
  570|  50.9k|  { return a != o.a && b != o.b; }
  ------------------
  |  Branch (570:12): [True: 49.6k, False: 1.28k]
  |  Branch (570:24): [True: 49.6k, False: 0]
  ------------------
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_EdeEv:
   88|  64.9k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_E4thizEv:
   70|   194k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EE8__item__Ev:
  382|  64.9k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-shaper-arabic.cc:_ZNR9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_5L24hb_function_sortedness_t1ELPv0EERS4_EppEv:
   93|  64.9k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_5L24hb_function_sortedness_t1ELPv0EE8__next__Ev:
  386|  64.9k|  void __next__ () { ++it; }
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_5L24hb_function_sortedness_t1EEclI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS9_EELPv0EEE13hb_map_iter_tIT_S2_LS3_1ELDnEESG_:
  408|    787|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-shaper-arabic.cc:_ZNK4$_33clIRK3$_5EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t1EEOS5_:
  426|    787|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::RETAINS_SORTING> (f); }
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_5L24hb_function_sortedness_t1EEC2ES2_:
  402|    787|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t0EEclI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS9_EELPv0EEE13hb_map_iter_tIT_S2_LS3_0ELDnEESG_:
  408|    692|  { return hb_map_iter_t<Iter, Proj, Sorted> (it, f); }
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t0ELPv0EEC2ERKS7_SA_:
  374|    692|  hb_map_iter_t (const Iter& it, Proj f_) : it (it), f (f_) {}
hb-ot-shaper-arabic.cc:_ZNK4$_23clIRK3$_6EE21hb_map_iter_factory_tIT_L24hb_function_sortedness_t0EEOS5_:
  418|    692|  { return hb_map_iter_factory_t<Proj, hb_function_sortedness_t::NOT_SORTED> (f); }
hb-ot-shaper-arabic.cc:_ZN21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t0EEC2ES2_:
  402|    692|  hb_map_iter_factory_t (Proj f) : f (f) {}
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t0ELPv0EERS4_E3lenEv:
   81|    692|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-arabic.cc:_ZNK9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t0ELPv0EERS4_E4thizEv:
   69|    692|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t0ELPv0EE7__len__Ev:
  385|    692|  unsigned __len__ () const { return it.len (); }
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t0ELPv0EERS4_EdeEv:
   88|  24.0k|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-arabic.cc:_ZN9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t0ELPv0EERS4_E4thizEv:
   70|  72.2k|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-arabic.cc:_ZNK13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t0ELPv0EE8__item__Ev:
  382|  24.0k|  __item_t__ __item__ () const { return hb_get (f.get (), *it); }
hb-ot-shaper-arabic.cc:_ZNR9hb_iter_tI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t0ELPv0EERS4_EppEv:
   93|  24.0k|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-arabic.cc:_ZN13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EERK3$_6L24hb_function_sortedness_t0ELPv0EE8__next__Ev:
  386|  24.0k|  void __next__ () { ++it; }
hb-ot-shaper-arabic.cc:_ZNK4$_22clIR17hb_sorted_array_tIN2OT11HBGlyphID16EER10hb_array_tIS3_ELPv0EEE13hb_zip_iter_tIDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT0_EEE4iterEEEOSB_OSD_:
  582|    787|  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
hb-ot-shaper-arabic.cc:_ZNK3$_9clIR17hb_sorted_array_tIN2OT11HBGlyphID16EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS6_:
  159|    787|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EERS2_E4iterEv:
   74|    787|  iter_t iter () const { return *thiz(); }
hb-ot-shaper-arabic.cc:_ZNK3$_9clIR10hb_array_tIN2OT11HBGlyphID16EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS6_:
  159|    787|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-shaper-arabic.cc:_ZNK3$_9clIN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_tEEE10hb_array_tIT_EPS9_j:
  165|  1.99k|  { return hb_array_t<Type> (array, length); }
hb-ot-shaper-arabic.cc:_ZNK3$_9clIR11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSA_:
  159|  1.71k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-shaper-arabic.cc:_ZNK4$_28clIFvPvEEE10hb_apply_tIRT_EPS4_:
  697|  1.71k|  { return hb_apply_t<Appl&> (*a); }
_ZN10hb_apply_tIRFvPvEEC2ES2_:
  676|  1.71k|  hb_apply_t (Appl a) : a (a) {}
hb-ot-shaper-use.cc:_ZNK3$_7clIR13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSS_:
  159|  1.74k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEE4iterEv:
   74|  1.74k|  iter_t iter () const { return *thiz(); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEE4thizEv:
   69|  12.6M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNK4$_20clI14hb_iota_iter_tIjjER16hb_filter_iter_tIS3_I13hb_zip_iter_tIS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EELSH_0EEES4_IDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT0_EEE4iterEEEOSR_OST_:
  582|  1.74k|  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
hb-ot-shaper-use.cc:_ZNK3$_7clIR14hb_iota_iter_tIjjEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS4_:
  159|  3.49k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-shaper-use.cc:_ZNK3$_7clIR16hb_filter_iter_tIS1_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOSR_:
  159|  1.74k|  { return hb_deref (std::forward<T> (c)).iter (); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE4iterEv:
   74|  1.74k|  iter_t iter () const { return *thiz(); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE4thizEv:
   69|  20.5M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-use.cc:_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEEC2ERKS1_RKSN_:
  526|  1.74k|  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}
hb-ot-shaper-use.cc:_ZNK4$_30clIjjEE14hb_iota_iter_tIT_T0_ES2_S3_:
  792|  3.49k|  { return hb_iota_iter_t<T, S> (start, step); }
hb-ot-shaper-use.cc:_ZN24hb_filter_iter_factory_tIZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_RK3$_9EclI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tIS3_EEZL18find_syllables_useS1_EUlS5_E_RK4$_31LPv0EELSO_0EEESD_IT_S7_SA_LDnEESQ_:
  471|  1.74k|  { return hb_filter_iter_t<Iter, Pred, Proj> (it, p, f); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tIS_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEC2ERKSG_SJ_SM_:
  445|  1.75k|  { while (it && !hb_has (p.get (), hb_get (f.get (), *it))) ++it; }
  ------------------
  |  Branch (445:12): [True: 1.75k, False: 3]
  |  Branch (445:12): [True: 11, False: 1.74k]
  |  Branch (445:18): [True: 11, False: 1.74k]
  ------------------
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EEcvbEv:
   80|  12.8M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EE4thizEv:
   69|  27.4M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNK16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EE8__more__Ev:
  450|  12.8M|  bool __more__ () const { return bool (it); }
_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EEcvbEv:
   80|  20.0M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EE4thizEv:
   69|  41.4M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE8__more__Ev:
  560|  20.0M|  bool __more__ () const { return bool (a) && bool (b); }
  ------------------
  |  Branch (560:35): [True: 20.0M, False: 0]
  |  Branch (560:47): [True: 20.0M, False: 22.7k]
  ------------------
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EcvbEv:
   80|  20.0M|  explicit operator bool () const { return thiz()->__more__ (); }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_E4thizEv:
   69|  97.2M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E8__more__Ev:
  203|  20.0M|  bool __more__ () const { return bool (thiz()->len ()); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E4thizEv:
  194|  48.6M|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_E3lenEv:
   81|  20.0M|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EEdeEv:
   88|  6.86M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EE4thizEv:
   70|  20.6M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNK16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EE8__item__Ev:
  449|  21.4M|  __item_t__ __item__ () const { return *it; }
_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EEdeEv:
   87|  21.4M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE8__item__Ev:
  558|  28.5M|  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EdeEv:
   87|  28.5M|  item_t operator * () const { return thiz()->__item__ (); }
_ZNK24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E8__item__Ev:
  199|  28.5M|  item_t __item__ () const { return (*thiz())[0]; }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EixEj:
   89|  28.5M|  item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EEppEv:
   93|  5.96M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EE8__next__Ev:
  451|  6.22M|  void __next__ () { do ++it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  ------------------
  |  Branch (451:38): [True: 6.22M, False: 8.72k]
  |  Branch (451:38): [True: 264k, False: 5.96M]
  |  Branch (451:44): [True: 264k, False: 5.95M]
  ------------------
_ZNR9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EEppEv:
   93|  6.23M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EE4thizEv:
   70|  21.4M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE8__next__Ev:
  562|  6.23M|  void __next__ () { ++a; ++b; }
_ZNR9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EppEv:
   93|  6.23M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
_ZN9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_E4thizEv:
   70|  28.6M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E8__next__Ev:
  208|  6.23M|  void __next__ () { *thiz() += 1; }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E4thizEv:
  195|  7.16M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
_ZNR9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EpLEj:
   91|  6.23M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EEdeEv:
   88|  7.15M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZN24hb_filter_iter_factory_tIZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_RK4$_31EclI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tIS2_EELPv0EEE16hb_filter_iter_tIT_S5_S8_LDnEESJ_:
  471|  1.74k|  { return hb_filter_iter_t<Iter, Pred, Proj> (it, p, f); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEC2ERKS6_SB_SE_:
  445|  5.67k|  { while (it && !hb_has (p.get (), hb_get (f.get (), *it))) ++it; }
  ------------------
  |  Branch (445:12): [True: 5.67k, False: 3]
  |  Branch (445:12): [True: 3.92k, False: 1.74k]
  |  Branch (445:18): [True: 3.92k, False: 1.74k]
  ------------------
hb-ot-shaper-use.cc:_ZNK4$_20clI14hb_iota_iter_tIjjER10hb_array_tI15hb_glyph_info_tELPv0EEE13hb_zip_iter_tIDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT0_EEE4iterEEEOS9_OSB_:
  582|  1.74k|  { return hb_zip_iter_t<hb_iter_type<A>, hb_iter_type<B>> (hb_iter (a), hb_iter (b)); }
hb-ot-shaper-use.cc:_ZNK3$_7clIR10hb_array_tI15hb_glyph_info_tEEEDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEOS5_:
  159|  1.74k|  { return hb_deref (std::forward<T> (c)).iter (); }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_E4iterEv:
   74|  1.74k|  iter_t iter () const { return *thiz(); }
_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEC2ERKS1_RKS4_:
  526|  1.74k|  hb_zip_iter_t (const A& a, const B& b) : a (a), b (b) {}
hb-ot-shaper-use.cc:_ZNK3$_7clI15hb_glyph_info_tEE10hb_array_tIT_EPS3_j:
  165|  1.74k|  { return hb_array_t<Type> (array, length); }
_ZNK9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EpsEv:
   75|  1.74k|  iter_t operator + () const { return *thiz(); }
hb-ot-shaper-use.cc:_ZNK4$_27clIZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_RK4$_31EE24hb_filter_iter_factory_tIT_T0_EOSB_OSC_:
  483|  1.74k|  { return hb_filter_iter_factory_t<Pred, Proj> (p, f); }
hb-ot-shaper-use.cc:_ZN24hb_filter_iter_factory_tIZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_RK4$_31EC2ES5_S8_:
  465|  1.74k|  hb_filter_iter_factory_t (Pred p, Proj f) : p (p), f (f) {}
hb-ot-shaper-use.cc:_ZNK4$_27clIZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_RK3$_9EE24hb_filter_iter_factory_tIT_T0_EOSD_OSE_:
  483|  1.74k|  { return hb_filter_iter_factory_t<Pred, Proj> (p, f); }
hb-ot-shaper-use.cc:_ZN24hb_filter_iter_factory_tIZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_RK3$_9EC2ES7_SA_:
  465|  1.74k|  hb_filter_iter_factory_t (Pred p, Proj f) : p (p), f (f) {}
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEplEj:
   99|  46.2k|  iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEE4thizEv:
   69|  99.5k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEE4iterEv:
   74|  46.2k|  iter_t iter () const { return *thiz(); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEpLEj:
   91|  46.2k|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEE4thizEv:
   70|  14.4M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEEpLEj:
   91|  1.94M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEE4thizEv:
   70|  11.4M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEE11__forward__Ej:
  563|  1.94M|  void __forward__ (unsigned n) { a += n; b += n; }
_ZNR9hb_iter_tI14hb_iota_iter_tIjjEjEpLEj:
   91|  1.94M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI14hb_iota_iter_tIjjEjE11__forward__Ej:
  209|  4.99M|  void __forward__ (unsigned n) { while (*thiz() && n--) ++*thiz(); }
  ------------------
  |  Branch (209:42): [True: 4.99M, False: 0]
  |  Branch (209:53): [True: 3.04M, False: 1.94M]
  ------------------
_ZN24hb_iter_fallback_mixin_tI14hb_iota_iter_tIjjEjE4thizEv:
  195|  8.03M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEpLEj:
   91|  1.94M|  iter_t& operator += (unsigned count) &  { thiz()->__forward__ (count); return *thiz(); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE4thizEv:
   70|  19.6M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZN24hb_iter_fallback_mixin_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE11__forward__Ej:
  209|  4.99M|  void __forward__ (unsigned n) { while (*thiz() && n--) ++*thiz(); }
  ------------------
  |  Branch (209:42): [True: 4.99M, False: 3.54k]
  |  Branch (209:53): [True: 3.04M, False: 1.94M]
  ------------------
hb-ot-shaper-use.cc:_ZN24hb_iter_fallback_mixin_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE4thizEv:
  195|  8.03M|	iter_t* thiz ()       { return static_cast<      iter_t *> (this); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEcvbEv:
   80|  6.00M|  explicit operator bool () const { return thiz()->__more__ (); }
hb-ot-shaper-use.cc:_ZNK16hb_filter_iter_tIS_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EE8__more__Ev:
  450|  6.00M|  bool __more__ () const { return bool (it); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEppEv:
   93|  5.96M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tIS_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EE8__next__Ev:
  451|  5.96M|  void __next__ () { do ++it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  ------------------
  |  Branch (451:38): [True: 5.95M, False: 8.72k]
  |  Branch (451:38): [True: 1.03k, False: 5.96M]
  |  Branch (451:44): [True: 1.03k, False: 5.95M]
  ------------------
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEE3lenEv:
   81|  1.74k|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEE3lenEv:
   81|  1.74k|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-use.cc:_ZNK13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEE7__len__Ev:
  561|  1.74k|  unsigned __len__ () const { return hb_min (a.len (), b.len ()); }
_ZNK9hb_iter_tI14hb_iota_iter_tIjjEjE3lenEv:
   81|  1.74k|  unsigned len () const { return thiz()->__len__ (); }
_ZNK14hb_iota_iter_tIjjE7__len__Ev:
  778|  1.74k|  unsigned __len__ () const { return UINT_MAX; }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE3lenEv:
   81|  1.74k|  unsigned len () const { return thiz()->__len__ (); }
hb-ot-shaper-use.cc:_ZNK24hb_iter_fallback_mixin_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE7__len__Ev:
  205|  1.00M|  { iter_t c (*thiz()); unsigned l = 0; while (c) { c++; l++; } return l; }
  ------------------
  |  Branch (205:48): [True: 1.00M, False: 1.74k]
  ------------------
hb-ot-shaper-use.cc:_ZNK24hb_iter_fallback_mixin_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EE4thizEv:
  194|  1.74k|  const iter_t* thiz () const { return static_cast<const iter_t *> (this); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEppEi:
  101|  1.00M|  iter_t operator ++ (int) { iter_t c (*thiz()); ++*thiz(); return c; }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEpsEv:
   75|  5.24k|  iter_t operator + () const { return *thiz(); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEEdeEv:
   87|  12.6M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZNK13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEE8__item__Ev:
  558|  14.5M|  __item_t__ __item__ () const { return __item_t__ (*a, *b); }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEdeEv:
   87|  14.5M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZNK16hb_filter_iter_tIS_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EE8__item__Ev:
  449|  14.5M|  __item_t__ __item__ () const { return *it; }
hb-ot-shaper-use.cc:_ZNK9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EEdeEv:
   87|  14.5M|  item_t operator * () const { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEEdeEv:
   88|  1.90M|  item_t operator * () { return thiz()->__item__ (); }
_ZNR9hb_iter_tI14hb_iota_iter_tIjjEjEmmEv:
   97|  1.84M|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
_ZN14hb_iota_iter_tIjjE8__prev__Ev:
  780|  1.84M|  void __prev__ () { v -= step; }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EESI_IjRS5_EEmmEv:
   97|   907k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tIS_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EE8__prev__Ev:
  452|   907k|  void __prev__ () { do --it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  ------------------
  |  Branch (452:38): [True: 907k, False: 0]
  |  Branch (452:38): [True: 111, False: 907k]
  |  Branch (452:44): [True: 111, False: 907k]
  ------------------
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE9hb_pair_tIjRS5_EEmmEv:
   97|   907k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EE8__prev__Ev:
  452|   933k|  void __prev__ () { do --it; while (it && !hb_has (p.get (), hb_get (f.get (), *it))); }
  ------------------
  |  Branch (452:38): [True: 933k, False: 0]
  |  Branch (452:38): [True: 25.9k, False: 907k]
  |  Branch (452:44): [True: 25.9k, False: 907k]
  ------------------
_ZNR9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE9hb_pair_tIjRS4_EEmmEv:
   97|   933k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE8__prev__Ev:
  564|   933k|  void __prev__ () { --a; --b; }
_ZNR9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EmmEv:
   97|   933k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
_ZN24hb_iter_fallback_mixin_tI10hb_array_tI15hb_glyph_info_tERS1_E8__prev__Ev:
  212|   933k|  void __prev__ () { *thiz() -= 1; }
_ZNR9hb_iter_tI10hb_array_tI15hb_glyph_info_tERS1_EmIEj:
   95|   933k|  iter_t& operator -= (unsigned count) &  { thiz()->__rewind__ (count); return *thiz(); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEdeEv:
   88|  6.91M|  item_t operator * () { return thiz()->__item__ (); }
hb-ot-shaper-use.cc:_ZN9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEmmEi:
  103|   907k|  iter_t operator -- (int) { iter_t c (*thiz()); --*thiz(); return c; }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEmmEv:
   97|   907k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEEmmEv:
   97|   907k|  iter_t& operator -- () &  { thiz()->__prev__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEE8__prev__Ev:
  564|   907k|  void __prev__ () { --a; --b; }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEESJ_IjSJ_IjRS6_EEEppEv:
   93|  1.91M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZNR9hb_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEESI_IjSI_IjRS5_EEEppEv:
   93|  1.91M|  iter_t& operator ++ () &  { thiz()->__next__ (); return *thiz(); }
hb-ot-shaper-use.cc:_ZN13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS2_IS_IS1_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31LPv0EEZL18find_syllables_useS8_EUl9hb_pair_tIjSA_EE_RK3$_9LSF_0EEE8__next__Ev:
  562|  1.91M|  void __next__ () { ++a; ++b; }

_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS1_18KerxSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    908|		       crossStream (crossStream_) {}
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS1_18KerxSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    908|  {
   52|    908|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 908]
  ------------------
   53|      0|      return;
   54|       |
   55|    908|    buffer->unsafe_to_concat ();
   56|    908|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    908|    c.set_lookup_mask (kern_mask);
   58|    908|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    908|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    908|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    908|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    908|    unsigned int count = buffer->len;
   63|    908|    hb_glyph_info_t *info = buffer->info;
   64|    908|    hb_glyph_position_t *pos = buffer->pos;
   65|  74.8k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 73.9k, False: 908]
  ------------------
   66|  73.9k|    {
   67|  73.9k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 73.9k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  73.9k|      skippy_iter.reset (idx, 1);
   74|  73.9k|      unsigned unsafe_to;
   75|  73.9k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 919, False: 72.9k]
  ------------------
   76|    919|      {
   77|    919|	idx++;
   78|    919|	continue;
   79|    919|      }
   80|       |
   81|  72.9k|      unsigned int i = idx;
   82|  72.9k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  72.9k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  72.9k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  72.9k|      if (likely (!kern))
  ------------------
  |  |  258|  72.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 72.5k, False: 458]
  |  |  ------------------
  ------------------
   89|  72.5k|	goto skip;
   90|       |
   91|    458|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 458, False: 0]
  ------------------
   92|    458|      {
   93|    458|	if (scale)
  ------------------
  |  Branch (93:6): [True: 458, False: 0]
  ------------------
   94|    458|	  kern = font->em_scale_x (kern);
   95|    458|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 146, False: 312]
  ------------------
   96|    146|	{
   97|    146|	  pos[j].y_offset = kern;
   98|    146|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|    146|	}
  100|    312|	else
  101|    312|	{
  102|    312|	  hb_position_t kern1 = kern >> 1;
  103|    312|	  hb_position_t kern2 = kern - kern1;
  104|    312|	  pos[i].x_advance += kern1;
  105|    312|	  pos[j].x_advance += kern2;
  106|    312|	  pos[j].x_offset += kern2;
  107|    312|	}
  108|    458|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|    458|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  72.9k|    skip:
  131|  72.9k|      idx = skippy_iter.idx;
  132|  72.9k|    }
  133|       |
  134|    908|    (void) buffer->message (font, "end kern");
  135|    908|  }
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    918|		       crossStream (crossStream_) {}
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    918|  {
   52|    918|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 918]
  ------------------
   53|      0|      return;
   54|       |
   55|    918|    buffer->unsafe_to_concat ();
   56|    918|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    918|    c.set_lookup_mask (kern_mask);
   58|    918|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    918|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    918|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    918|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    918|    unsigned int count = buffer->len;
   63|    918|    hb_glyph_info_t *info = buffer->info;
   64|    918|    hb_glyph_position_t *pos = buffer->pos;
   65|  6.73k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 5.82k, False: 918]
  ------------------
   66|  5.82k|    {
   67|  5.82k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 5.82k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  5.82k|      skippy_iter.reset (idx, 1);
   74|  5.82k|      unsigned unsafe_to;
   75|  5.82k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 965, False: 4.85k]
  ------------------
   76|    965|      {
   77|    965|	idx++;
   78|    965|	continue;
   79|    965|      }
   80|       |
   81|  4.85k|      unsigned int i = idx;
   82|  4.85k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  4.85k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  4.85k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  4.85k|      if (likely (!kern))
  ------------------
  |  |  258|  4.85k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.54k, False: 2.30k]
  |  |  ------------------
  ------------------
   89|  2.54k|	goto skip;
   90|       |
   91|  2.30k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 2.30k, False: 0]
  ------------------
   92|  2.30k|      {
   93|  2.30k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 2.30k, False: 0]
  ------------------
   94|  2.30k|	  kern = font->em_scale_x (kern);
   95|  2.30k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 390, False: 1.91k]
  ------------------
   96|    390|	{
   97|    390|	  pos[j].y_offset = kern;
   98|    390|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|    390|	}
  100|  1.91k|	else
  101|  1.91k|	{
  102|  1.91k|	  hb_position_t kern1 = kern >> 1;
  103|  1.91k|	  hb_position_t kern2 = kern - kern1;
  104|  1.91k|	  pos[i].x_advance += kern1;
  105|  1.91k|	  pos[j].x_advance += kern2;
  106|  1.91k|	  pos[j].x_offset += kern2;
  107|  1.91k|	}
  108|  2.30k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  2.30k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  4.85k|    skip:
  131|  4.85k|      idx = skippy_iter.idx;
  132|  4.85k|    }
  133|       |
  134|    918|    (void) buffer->message (font, "end kern");
  135|    918|  }
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|  3.85k|		       crossStream (crossStream_) {}
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|  3.85k|  {
   52|  3.85k|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 3.85k]
  ------------------
   53|      0|      return;
   54|       |
   55|  3.85k|    buffer->unsafe_to_concat ();
   56|  3.85k|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|  3.85k|    c.set_lookup_mask (kern_mask);
   58|  3.85k|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|  3.85k|    auto &skippy_iter = c.iter_input;
   60|       |
   61|  3.85k|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|  3.85k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|  3.85k|    unsigned int count = buffer->len;
   63|  3.85k|    hb_glyph_info_t *info = buffer->info;
   64|  3.85k|    hb_glyph_position_t *pos = buffer->pos;
   65|   101k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 97.2k, False: 3.85k]
  ------------------
   66|  97.2k|    {
   67|  97.2k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 97.2k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  97.2k|      skippy_iter.reset (idx, 1);
   74|  97.2k|      unsigned unsafe_to;
   75|  97.2k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 3.93k, False: 93.2k]
  ------------------
   76|  3.93k|      {
   77|  3.93k|	idx++;
   78|  3.93k|	continue;
   79|  3.93k|      }
   80|       |
   81|  93.2k|      unsigned int i = idx;
   82|  93.2k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  93.2k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  93.2k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  93.2k|      if (likely (!kern))
  ------------------
  |  |  258|  93.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 90.2k, False: 3.02k]
  |  |  ------------------
  ------------------
   89|  90.2k|	goto skip;
   90|       |
   91|  3.02k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 3.02k, False: 0]
  ------------------
   92|  3.02k|      {
   93|  3.02k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 3.02k, False: 0]
  ------------------
   94|  3.02k|	  kern = font->em_scale_x (kern);
   95|  3.02k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 2.42k, False: 598]
  ------------------
   96|  2.42k|	{
   97|  2.42k|	  pos[j].y_offset = kern;
   98|  2.42k|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|  2.42k|	}
  100|    598|	else
  101|    598|	{
  102|    598|	  hb_position_t kern1 = kern >> 1;
  103|    598|	  hb_position_t kern2 = kern - kern1;
  104|    598|	  pos[i].x_advance += kern1;
  105|    598|	  pos[j].x_advance += kern2;
  106|    598|	  pos[j].x_offset += kern2;
  107|    598|	}
  108|  3.02k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  3.02k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  93.2k|    skip:
  131|  93.2k|      idx = skippy_iter.idx;
  132|  93.2k|    }
  133|       |
  134|  3.85k|    (void) buffer->message (font, "end kern");
  135|  3.85k|  }
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS_20KernOTSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    859|  {
   52|    859|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 859]
  ------------------
   53|      0|      return;
   54|       |
   55|    859|    buffer->unsafe_to_concat ();
   56|    859|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    859|    c.set_lookup_mask (kern_mask);
   58|    859|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    859|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    859|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    859|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    859|    unsigned int count = buffer->len;
   63|    859|    hb_glyph_info_t *info = buffer->info;
   64|    859|    hb_glyph_position_t *pos = buffer->pos;
   65|   113k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 112k, False: 859]
  ------------------
   66|   112k|    {
   67|   112k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 112k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|   112k|      skippy_iter.reset (idx, 1);
   74|   112k|      unsigned unsafe_to;
   75|   112k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 1.03k, False: 111k]
  ------------------
   76|  1.03k|      {
   77|  1.03k|	idx++;
   78|  1.03k|	continue;
   79|  1.03k|      }
   80|       |
   81|   111k|      unsigned int i = idx;
   82|   111k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|   111k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|   111k|					       info[j].codepoint);
   86|       |
   87|       |
   88|   111k|      if (likely (!kern))
  ------------------
  |  |  258|   111k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 106k, False: 4.85k]
  |  |  ------------------
  ------------------
   89|   106k|	goto skip;
   90|       |
   91|  4.85k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 4.85k, False: 0]
  ------------------
   92|  4.85k|      {
   93|  4.85k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 4.85k, False: 0]
  ------------------
   94|  4.85k|	  kern = font->em_scale_x (kern);
   95|  4.85k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 3.78k, False: 1.07k]
  ------------------
   96|  3.78k|	{
   97|  3.78k|	  pos[j].y_offset = kern;
   98|  3.78k|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|  3.78k|	}
  100|  1.07k|	else
  101|  1.07k|	{
  102|  1.07k|	  hb_position_t kern1 = kern >> 1;
  103|  1.07k|	  hb_position_t kern2 = kern - kern1;
  104|  1.07k|	  pos[i].x_advance += kern1;
  105|  1.07k|	  pos[j].x_advance += kern2;
  106|  1.07k|	  pos[j].x_offset += kern2;
  107|  1.07k|	}
  108|  4.85k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  4.85k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|   111k|    skip:
  131|   111k|      idx = skippy_iter.idx;
  132|   111k|    }
  133|       |
  134|    859|    (void) buffer->message (font, "end kern");
  135|    859|  }
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS_20KernOTSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    530|  {
   52|    530|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 530]
  ------------------
   53|      0|      return;
   54|       |
   55|    530|    buffer->unsafe_to_concat ();
   56|    530|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    530|    c.set_lookup_mask (kern_mask);
   58|    530|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    530|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    530|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    530|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    530|    unsigned int count = buffer->len;
   63|    530|    hb_glyph_info_t *info = buffer->info;
   64|    530|    hb_glyph_position_t *pos = buffer->pos;
   65|  55.0k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 54.5k, False: 530]
  ------------------
   66|  54.5k|    {
   67|  54.5k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 54.5k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  54.5k|      skippy_iter.reset (idx, 1);
   74|  54.5k|      unsigned unsafe_to;
   75|  54.5k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 786, False: 53.7k]
  ------------------
   76|    786|      {
   77|    786|	idx++;
   78|    786|	continue;
   79|    786|      }
   80|       |
   81|  53.7k|      unsigned int i = idx;
   82|  53.7k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  53.7k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  53.7k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  53.7k|      if (likely (!kern))
  ------------------
  |  |  258|  53.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 29.1k, False: 24.5k]
  |  |  ------------------
  ------------------
   89|  29.1k|	goto skip;
   90|       |
   91|  24.5k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 24.5k, False: 0]
  ------------------
   92|  24.5k|      {
   93|  24.5k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 24.5k, False: 0]
  ------------------
   94|  24.5k|	  kern = font->em_scale_x (kern);
   95|  24.5k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 393, False: 24.1k]
  ------------------
   96|    393|	{
   97|    393|	  pos[j].y_offset = kern;
   98|    393|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|    393|	}
  100|  24.1k|	else
  101|  24.1k|	{
  102|  24.1k|	  hb_position_t kern1 = kern >> 1;
  103|  24.1k|	  hb_position_t kern2 = kern - kern1;
  104|  24.1k|	  pos[i].x_advance += kern1;
  105|  24.1k|	  pos[j].x_advance += kern2;
  106|  24.1k|	  pos[j].x_offset += kern2;
  107|  24.1k|	}
  108|  24.5k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  24.5k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  53.7k|    skip:
  131|  53.7k|      idx = skippy_iter.idx;
  132|  53.7k|    }
  133|       |
  134|    530|    (void) buffer->message (font, "end kern");
  135|    530|  }
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS_21KernAATSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    475|  {
   52|    475|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 475]
  ------------------
   53|      0|      return;
   54|       |
   55|    475|    buffer->unsafe_to_concat ();
   56|    475|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    475|    c.set_lookup_mask (kern_mask);
   58|    475|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    475|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    475|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    475|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    475|    unsigned int count = buffer->len;
   63|    475|    hb_glyph_info_t *info = buffer->info;
   64|    475|    hb_glyph_position_t *pos = buffer->pos;
   65|  24.4k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 24.0k, False: 475]
  ------------------
   66|  24.0k|    {
   67|  24.0k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 24.0k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  24.0k|      skippy_iter.reset (idx, 1);
   74|  24.0k|      unsigned unsafe_to;
   75|  24.0k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 781, False: 23.2k]
  ------------------
   76|    781|      {
   77|    781|	idx++;
   78|    781|	continue;
   79|    781|      }
   80|       |
   81|  23.2k|      unsigned int i = idx;
   82|  23.2k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  23.2k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  23.2k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  23.2k|      if (likely (!kern))
  ------------------
  |  |  258|  23.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 18.7k, False: 4.51k]
  |  |  ------------------
  ------------------
   89|  18.7k|	goto skip;
   90|       |
   91|  4.51k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 4.51k, False: 0]
  ------------------
   92|  4.51k|      {
   93|  4.51k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 4.51k, False: 0]
  ------------------
   94|  4.51k|	  kern = font->em_scale_x (kern);
   95|  4.51k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 4.07k, False: 442]
  ------------------
   96|  4.07k|	{
   97|  4.07k|	  pos[j].y_offset = kern;
   98|  4.07k|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|  4.07k|	}
  100|    442|	else
  101|    442|	{
  102|    442|	  hb_position_t kern1 = kern >> 1;
  103|    442|	  hb_position_t kern2 = kern - kern1;
  104|    442|	  pos[i].x_advance += kern1;
  105|    442|	  pos[j].x_advance += kern2;
  106|    442|	  pos[j].x_offset += kern2;
  107|    442|	}
  108|  4.51k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  4.51k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  23.2k|    skip:
  131|  23.2k|      idx = skippy_iter.idx;
  132|  23.2k|    }
  133|       |
  134|    475|    (void) buffer->message (font, "end kern");
  135|    475|  }
_ZNK2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS_21KernAATSubTableHeaderEE13accelerator_tEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    402|  {
   52|    402|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 402]
  ------------------
   53|      0|      return;
   54|       |
   55|    402|    buffer->unsafe_to_concat ();
   56|    402|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    402|    c.set_lookup_mask (kern_mask);
   58|    402|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    402|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    402|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    402|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    402|    unsigned int count = buffer->len;
   63|    402|    hb_glyph_info_t *info = buffer->info;
   64|    402|    hb_glyph_position_t *pos = buffer->pos;
   65|   295k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 295k, False: 402]
  ------------------
   66|   295k|    {
   67|   295k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 295k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|   295k|      skippy_iter.reset (idx, 1);
   74|   295k|      unsigned unsafe_to;
   75|   295k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 2.64k, False: 292k]
  ------------------
   76|  2.64k|      {
   77|  2.64k|	idx++;
   78|  2.64k|	continue;
   79|  2.64k|      }
   80|       |
   81|   292k|      unsigned int i = idx;
   82|   292k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|   292k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|   292k|					       info[j].codepoint);
   86|       |
   87|       |
   88|   292k|      if (likely (!kern))
  ------------------
  |  |  258|   292k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 288k, False: 4.00k]
  |  |  ------------------
  ------------------
   89|   288k|	goto skip;
   90|       |
   91|  4.00k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 4.00k, False: 0]
  ------------------
   92|  4.00k|      {
   93|  4.00k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 4.00k, False: 0]
  ------------------
   94|  4.00k|	  kern = font->em_scale_x (kern);
   95|  4.00k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 3.74k, False: 261]
  ------------------
   96|  3.74k|	{
   97|  3.74k|	  pos[j].y_offset = kern;
   98|  3.74k|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|  3.74k|	}
  100|    261|	else
  101|    261|	{
  102|    261|	  hb_position_t kern1 = kern >> 1;
  103|    261|	  hb_position_t kern2 = kern - kern1;
  104|    261|	  pos[i].x_advance += kern1;
  105|    261|	  pos[j].x_advance += kern2;
  106|    261|	  pos[j].x_offset += kern2;
  107|    261|	}
  108|  4.00k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  4.00k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|   292k|    skip:
  131|   292k|      idx = skippy_iter.idx;
  132|   292k|    }
  133|       |
  134|    402|    (void) buffer->message (font, "end kern");
  135|    402|  }
_ZNK2OT17hb_kern_machine_tINS_19KernSubTableFormat3INS_21KernAATSubTableHeaderEEEE4kernEP9hb_font_tP11hb_buffer_tjb:
   51|    279|  {
   52|    279|    if (!buffer->message (font, "start kern"))
  ------------------
  |  Branch (52:9): [True: 0, False: 279]
  ------------------
   53|      0|      return;
   54|       |
   55|    279|    buffer->unsafe_to_concat ();
   56|    279|    OT::hb_ot_apply_context_t c (1, font, buffer);
   57|    279|    c.set_lookup_mask (kern_mask);
   58|    279|    c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
   59|    279|    auto &skippy_iter = c.iter_input;
   60|       |
   61|    279|    bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    279|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
   62|    279|    unsigned int count = buffer->len;
   63|    279|    hb_glyph_info_t *info = buffer->info;
   64|    279|    hb_glyph_position_t *pos = buffer->pos;
   65|  80.1k|    for (unsigned int idx = 0; idx < count;)
  ------------------
  |  Branch (65:32): [True: 79.8k, False: 279]
  ------------------
   66|  79.8k|    {
   67|  79.8k|      if (!(info[idx].mask & kern_mask))
  ------------------
  |  Branch (67:11): [True: 0, False: 79.8k]
  ------------------
   68|      0|      {
   69|      0|	idx++;
   70|      0|	continue;
   71|      0|      }
   72|       |
   73|  79.8k|      skippy_iter.reset (idx, 1);
   74|  79.8k|      unsigned unsafe_to;
   75|  79.8k|      if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (75:11): [True: 344, False: 79.5k]
  ------------------
   76|    344|      {
   77|    344|	idx++;
   78|    344|	continue;
   79|    344|      }
   80|       |
   81|  79.5k|      unsigned int i = idx;
   82|  79.5k|      unsigned int j = skippy_iter.idx;
   83|       |
   84|  79.5k|      hb_position_t kern = driver.get_kerning (info[i].codepoint,
   85|  79.5k|					       info[j].codepoint);
   86|       |
   87|       |
   88|  79.5k|      if (likely (!kern))
  ------------------
  |  |  258|  79.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 36.2k, False: 43.2k]
  |  |  ------------------
  ------------------
   89|  36.2k|	goto skip;
   90|       |
   91|  43.2k|      if (horizontal)
  ------------------
  |  Branch (91:11): [True: 43.2k, False: 0]
  ------------------
   92|  43.2k|      {
   93|  43.2k|	if (scale)
  ------------------
  |  Branch (93:6): [True: 43.2k, False: 0]
  ------------------
   94|  43.2k|	  kern = font->em_scale_x (kern);
   95|  43.2k|	if (crossStream)
  ------------------
  |  Branch (95:6): [True: 43.1k, False: 125]
  ------------------
   96|  43.1k|	{
   97|  43.1k|	  pos[j].y_offset = kern;
   98|  43.1k|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
   99|  43.1k|	}
  100|    125|	else
  101|    125|	{
  102|    125|	  hb_position_t kern1 = kern >> 1;
  103|    125|	  hb_position_t kern2 = kern - kern1;
  104|    125|	  pos[i].x_advance += kern1;
  105|    125|	  pos[j].x_advance += kern2;
  106|    125|	  pos[j].x_offset += kern2;
  107|    125|	}
  108|  43.2k|      }
  109|      0|      else
  110|      0|      {
  111|      0|	if (scale)
  ------------------
  |  Branch (111:6): [True: 0, False: 0]
  ------------------
  112|      0|	  kern = font->em_scale_y (kern);
  113|      0|	if (crossStream)
  ------------------
  |  Branch (113:6): [True: 0, False: 0]
  ------------------
  114|      0|	{
  115|      0|	  pos[j].x_offset = kern;
  116|      0|	  buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT;
  117|      0|	}
  118|      0|	else
  119|      0|	{
  120|      0|	  hb_position_t kern1 = kern >> 1;
  121|      0|	  hb_position_t kern2 = kern - kern1;
  122|      0|	  pos[i].y_advance += kern1;
  123|      0|	  pos[j].y_advance += kern2;
  124|      0|	  pos[j].y_offset += kern2;
  125|      0|	}
  126|      0|      }
  127|       |
  128|  43.2k|      buffer->unsafe_to_break (i, j + 1);
  129|       |
  130|  79.5k|    skip:
  131|  79.5k|      idx = skippy_iter.idx;
  132|  79.5k|    }
  133|       |
  134|    279|    (void) buffer->message (font, "end kern");
  135|    279|  }
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS_20KernOTSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    859|		       crossStream (crossStream_) {}
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS_20KernOTSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    530|		       crossStream (crossStream_) {}
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat0INS_21KernAATSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    475|		       crossStream (crossStream_) {}
_ZN2OT17hb_kern_machine_tIN3AAT19KerxSubTableFormat2INS_21KernAATSubTableHeaderEE13accelerator_tEEC2ERKS5_b:
   44|    402|		       crossStream (crossStream_) {}
_ZN2OT17hb_kern_machine_tINS_19KernSubTableFormat3INS_21KernAATSubTableHeaderEEEEC2ERKS3_b:
   44|    279|		       crossStream (crossStream_) {}

hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIsLj2EEEEEERKT_PKvj:
   47|   103k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT11SettingNameEEEERKT_PKvj:
   47|  33.7k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_EptEv:
  202|   793k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E3getEv:
  242|  2.00M|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E7convertEPS1_:
  247|  2.00M|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E10get_storedEv:
  210|  2.00M|  {
  211|  2.00M|  retry:
  212|  2.00M|    Stored *p = this->instance.get_acquire ();
  213|  2.00M|    if (unlikely (!p))
  ------------------
  |  |  259|  2.00M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 1.97M]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 174, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    174|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 366, False: 32.8k]
  |  |  ------------------
  ------------------
  220|    366|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  2.00M|    return p;
  229|  2.00M|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj24EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj24EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E8get_nullEv:
  250|  33.7k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj24EE11call_createIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS4_Lj24EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.8k, False: 366]
  |  |  ------------------
  ------------------
  255|  32.8k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT8ClassDefEERKT_PKvj:
   47|   115k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT6Layout6Common8CoverageEERKT_PKvj:
   47|   606k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT11AttachPointEERKT_PKvj:
   47|  23.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT10AttachListEERKT_PKvj:
   47|  3.10k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT6DeviceEERKT_PKvj:
   47|  8.80M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT10CaretValueEERKT_PKvj:
   47|  17.6M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT8LigGlyphEERKT_PKvj:
   47|  12.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT12LigCaretListEERKT_PKvj:
   47|  1.90k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT13MarkGlyphSetsEERKT_PKvj:
   47|  1.01k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT13VarRegionListEERKT_PKvj:
   47|  1.26k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL11StructAfterIN2OT7IntTypeIhLj1EEENS0_7ArrayOfINS1_ItLj2EEES4_EEERKT_RKT0_:
   72|  1.78k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7IntTypeIhLj1EEEERKT_PKvj:
   47|  1.78k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7VarDataEERKT_PKvj:
   47|  4.64k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14VariationStoreEERKT_PKvj:
   47|  3.91k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.8k, False: 366]
  ------------------
  199|  32.8k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E7destroyEPS1_:
  266|  32.8k|  {
  267|  32.8k|    p->~Stored ();
  268|  32.8k|    hb_free (p);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  269|  32.8k|  }
_ZNK16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  10.5k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE3getEv:
  242|  59.8k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EE7convertEPK9hb_blob_t:
  302|  59.8k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE10get_storedEv:
  210|  71.0k|  {
  211|  71.0k|  retry:
  212|  71.0k|    Stored *p = this->instance.get_acquire ();
  213|  71.0k|    if (unlikely (!p))
  ------------------
  |  |  259|  71.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 37.9k]
  |  |  ------------------
  ------------------
  214|  33.1k|    {
  215|  33.1k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.1k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.1k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.1k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.1k|    }
  228|  71.0k|    return p;
  229|  71.0k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj28EE8is_inertEv:
  155|  33.1k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj28EE8get_dataEv:
  153|  66.2k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EE8get_nullEv:
  299|  33.1k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj28EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EEEEPT_v:
  158|  33.1k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EE6createEP9hb_face_t:
  290|  33.1k|  {
  291|  33.1k|    auto c = hb_sanitize_context_t ();
  292|  33.1k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.1k|    return c.reference_table<T> (face);
  295|  33.1k|  }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT13ChainSubtableINS0_13ExtendedTypesEEE10hb_array_tIKNS0_7FeatureEEERKT_RKT0_:
   72|  7.19k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT13ChainSubtableINS0_13ExtendedTypesEEEERKT_PKvj:
   47|  16.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7IntTypeItLj2EEEERKT_PKvj:
   47|  6.11M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|    459|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|    451|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT6LookupIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|  2.62k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  43.9M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryIvEEEEERKT_PKvj:
   47|  22.4M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_18ContextualSubtableINS2_13ExtendedTypesEE9EntryDataEEEEEERKT_PKvj:
   47|  10.9M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EEEERKT_PKvj:
   47|    314|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_11HBGlyphID16EEEERKT_PKvj:
   47|    305|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT6LookupIN2OT11HBGlyphID16EEEERKT_PKvj:
   47|  11.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS0_11HBGlyphID16EEENS0_7IntTypeIjLj4EEELb0EEEERKT_PKvj:
   47|    353|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_13LigatureEntryILb1EE9EntryDataEEEEEERKT_PKvj:
   47|  7.71M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_17InsertionSubtableINS2_13ExtendedTypesEE9EntryDataEEEEEERKT_PKvj:
   47|  5.94M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT13ChainSubtableINS0_13ExtendedTypesEEES3_ERKT_RKT0_:
   72|  9.12k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT5ChainINS0_13ExtendedTypesEEES3_ERKT_RKT0_:
   72|  11.9k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT5ChainINS0_13ExtendedTypesEEEERKT_PKvj:
   47|  11.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.1k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.1k|    return this->instance.cmpexch (current, value);
  240|  33.1k|  }
_ZN16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.1k, False: 218]
  |  Branch (198:14): [True: 890, False: 32.2k]
  ------------------
  199|    890|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EE7destroyEP9hb_blob_t:
  296|    890|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tEptEv:
  202|   507k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE3getEv:
  242|   507k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4ltagELj33ELb0EE7convertEPK9hb_blob_t:
  302|   507k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE10get_storedEv:
  210|   507k|  {
  211|   507k|  retry:
  212|   507k|    Stored *p = this->instance.get_acquire ();
  213|   507k|    if (unlikely (!p))
  ------------------
  |  |  259|   507k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 375, False: 507k]
  |  |  ------------------
  ------------------
  214|    375|    {
  215|    375|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|    375|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 375]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|    375|      p = this->template call_create<Stored, Funcs> ();
  219|    375|      if (unlikely (!p))
  ------------------
  |  |  259|    375|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 375]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|    375|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|    375|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 375]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|    375|    }
  228|   507k|    return p;
  229|   507k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj33EE8is_inertEv:
  155|    375|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj33EE8get_dataEv:
  153|    750|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4ltagELj33ELb0EE8get_nullEv:
  299|    375|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj33EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4ltagELj33ELb0EEEEPT_v:
  158|    375|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4ltagELj33ELb0EE6createEP9hb_face_t:
  290|    375|  {
  291|    375|    auto c = hb_sanitize_context_t ();
  292|    375|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|    375|    return c.reference_table<T> (face);
  295|    375|  }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  27.0M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE7cmpexchEPS5_S7_:
  236|    375|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|    375|    return this->instance.cmpexch (current, value);
  240|    375|  }
_ZN16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 375, False: 32.9k]
  |  Branch (198:14): [True: 117, False: 258]
  ------------------
  199|    117|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4ltagELj33ELb0EE7destroyEP9hb_blob_t:
  296|    117|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  5.13k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE3getEv:
  242|  53.2k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EE7convertEPK9hb_blob_t:
  302|  53.2k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE10get_storedEv:
  210|  58.7k|  {
  211|  58.7k|  retry:
  212|  58.7k|    Stored *p = this->instance.get_acquire ();
  213|  58.7k|    if (unlikely (!p))
  ------------------
  |  |  259|  58.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.2k, False: 26.5k]
  |  |  ------------------
  ------------------
  214|  32.2k|    {
  215|  32.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  32.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.2k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  32.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  32.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  32.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  32.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  32.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  32.2k|    }
  228|  58.7k|    return p;
  229|  58.7k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj29EE8is_inertEv:
  155|  32.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj29EE8get_dataEv:
  153|  64.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EE8get_nullEv:
  299|  32.2k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj29EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EEEEPT_v:
  158|  32.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EE6createEP9hb_face_t:
  290|  32.2k|  {
  291|  32.2k|    auto c = hb_sanitize_context_t ();
  292|  32.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  32.2k|    return c.reference_table<T> (face);
  295|  32.2k|  }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT13ChainSubtableINS0_13ObsoleteTypesEEE10hb_array_tIKNS0_7FeatureEEERKT_RKT0_:
   72|  12.3k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT13ChainSubtableINS0_13ObsoleteTypesEEEERKT_PKvj:
   47|  36.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT10ClassTableIN2OT7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  1.46k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_18ContextualSubtableINS2_13ObsoleteTypesEE9EntryDataEEEEEERKT_PKvj:
   47|  9.82M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS0_11HBGlyphID16EEENS0_7IntTypeItLj2EEELb0EEEERKT_PKvj:
   47|    304|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_17InsertionSubtableINS2_13ObsoleteTypesEE9EntryDataEEEEEERKT_PKvj:
   47|  2.32M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT13ChainSubtableINS0_13ObsoleteTypesEEES3_ERKT_RKT0_:
   72|  24.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT5ChainINS0_13ObsoleteTypesEEES3_ERKT_RKT0_:
   72|  21.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT5ChainINS0_13ObsoleteTypesEEEERKT_PKvj:
   47|  21.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  32.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  32.2k|    return this->instance.cmpexch (current, value);
  240|  32.2k|  }
_ZN16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 32.2k, False: 1.10k]
  |  Branch (198:14): [True: 877, False: 31.3k]
  ------------------
  199|    877|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EE7destroyEP9hb_blob_t:
  296|    877|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tEptEv:
  202|  49.3k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tEptEv:
  202|  48.1k|  const Returned * operator -> () const { return get (); }
_ZNK22hb_table_lazy_loader_tIN3AAT4morxELj28ELb0EE8get_blobEv:
  304|  11.1k|  hb_blob_t* get_blob () const { return this->get_stored (); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN3AAT6LookupIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|  25.0M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS0_11HBGlyphID16EEENS0_7IntTypeIjLj4EEELb0EEEERKT_PKvj:
   47|  1.34k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN3AAT6LookupIN2OT11HBGlyphID16EEEERKT_PKvj:
   47|  6.12M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_11HBGlyphID16EEEERKT_PKvj:
   47|  65.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT8ClassDefEERKT_PKvj:
   47|  1.23M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIjLj4EEEEEERKT_PKvj:
   47|  2.28k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK22hb_table_lazy_loader_tIN3AAT4mortELj29ELb0EE8get_blobEv:
  304|  5.46k|  hb_blob_t* get_blob () const { return this->get_stored (); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN3AAT10ClassTableIN2OT7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  17.2M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS0_11HBGlyphID16EEENS0_7IntTypeItLj2EEELb0EEEERKT_PKvj:
   47|  1.48k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tEptEv:
  202|  49.3k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE3getEv:
  242|  49.3k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EE7convertEPK9hb_blob_t:
  302|  49.3k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE10get_storedEv:
  210|  60.2k|  {
  211|  60.2k|  retry:
  212|  60.2k|    Stored *p = this->instance.get_acquire ();
  213|  60.2k|    if (unlikely (!p))
  ------------------
  |  |  259|  60.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 27.1k]
  |  |  ------------------
  ------------------
  214|  33.1k|    {
  215|  33.1k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.1k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.1k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.1k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.1k|    }
  228|  60.2k|    return p;
  229|  60.2k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj30EE8is_inertEv:
  155|  33.1k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj30EE8get_dataEv:
  153|  66.2k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EE8get_nullEv:
  299|  33.1k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj30EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EEEEPT_v:
  158|  33.1k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EE6createEP9hb_face_t:
  290|  33.1k|  {
  291|  33.1k|    auto c = hb_sanitize_context_t ();
  292|  33.1k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.1k|    return c.reference_table<T> (face);
  295|  33.1k|  }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_12Format1EntryILb1EE9EntryDataEEEEEERKT_PKvj:
   47|  4.35M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfIN3AAT5EntryINS2_19KerxSubTableFormat4INS2_18KerxSubTableHeaderEE9EntryDataEEEEEERKT_PKvj:
   47|  6.76M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEEEERKT_PKvj:
   47|    313|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7IntTypeIjLj4EEEEEERKT_PKvj:
   47|    303|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT6LookupIN2OT7IntTypeIjLj4EEEEEERKT_PKvj:
   47|    799|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL11StructAfterIN3AAT12KerxSubTableES1_ERKT_RKT0_:
   72|  10.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT12KerxSubTableEERKT_PKvj:
   47|  10.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.1k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.1k|    return this->instance.cmpexch (current, value);
  240|  33.1k|  }
_ZN16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.1k, False: 218]
  |  Branch (198:14): [True: 1.28k, False: 31.8k]
  ------------------
  199|  1.28k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EE7destroyEP9hb_blob_t:
  296|  1.28k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK22hb_table_lazy_loader_tIN3AAT4kerxELj30ELb0EE8get_blobEv:
  304|  10.9k|  hb_blob_t* get_blob () const { return this->get_stored (); }
_ZNK16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE3getEv:
  242|  10.9k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4ankrELj31ELb0EE7convertEPK9hb_blob_t:
  302|  10.9k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE10get_storedEv:
  210|  10.9k|  {
  211|  10.9k|  retry:
  212|  10.9k|    Stored *p = this->instance.get_acquire ();
  213|  10.9k|    if (unlikely (!p))
  ------------------
  |  |  259|  10.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.28k, False: 9.64k]
  |  |  ------------------
  ------------------
  214|  1.28k|    {
  215|  1.28k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  1.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  1.28k|      p = this->template call_create<Stored, Funcs> ();
  219|  1.28k|      if (unlikely (!p))
  ------------------
  |  |  259|  1.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  1.28k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  1.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.28k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  1.28k|    }
  228|  10.9k|    return p;
  229|  10.9k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj31EE8is_inertEv:
  155|  1.28k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj31EE8get_dataEv:
  153|  2.56k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4ankrELj31ELb0EE8get_nullEv:
  299|  1.28k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj31EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4ankrELj31ELb0EEEEPT_v:
  158|  1.28k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4ankrELj31ELb0EE6createEP9hb_face_t:
  290|  1.28k|  {
  291|  1.28k|    auto c = hb_sanitize_context_t ();
  292|  1.28k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  1.28k|    return c.reference_table<T> (face);
  295|  1.28k|  }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfIN3AAT6AnchorENS0_7IntTypeIjLj4EEEEEERKT_PKvj:
   47|  2.77k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT19LookupSegmentSingleIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|    989|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT18LookupSegmentArrayIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|    350|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_8OffsetToINS0_7ArrayOfIN3AAT6AnchorENS0_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|    339|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT12LookupSingleIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|    354|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT6LookupIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|    478|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT7IntTypeIhLj1EEEERKT_PKvj:
   47|   512k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  1.28k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  1.28k|    return this->instance.cmpexch (current, value);
  240|  1.28k|  }
_ZN16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 1.28k, False: 32.0k]
  |  Branch (198:14): [True: 292, False: 988]
  ------------------
  199|    292|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4ankrELj31ELb0EE7destroyEP9hb_blob_t:
  296|    292|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_EdeIS1_LPv0EEERKT_v:
  204|  1.21M|  const U & operator * () const  { return *get (); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14VariationStoreEERKT_PKvj:
   47|  3.35k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT13VarRegionListEERKT_PKvj:
   47|    616|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL23StructAtOffsetUnalignedIjERKT_PKvj:
   53|  23.7M|{
   54|  23.7M|#pragma GCC diagnostic push
   55|  23.7M|#pragma GCC diagnostic ignored "-Wcast-align"
   56|  23.7M|  return * reinterpret_cast<const Type*> ((const char *) P + offset);
   57|  23.7M|#pragma GCC diagnostic pop
   58|  23.7M|}
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT13MarkGlyphSetsEERKT_PKvj:
   47|  3.13k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout6Common8CoverageEERKT_PKvj:
   47|    246|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7IntTypeIsLj2EEEERKT_PKvj:
   47|   171k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN3AAT6LookupIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|   587k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_8OffsetToINS0_7ArrayOfIN3AAT6AnchorENS0_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEERKT_PKvj:
   47|  39.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT7ArrayOfIN3AAT6AnchorENS0_7IntTypeIjLj4EEEEEERKT_PKvj:
   47|   511k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN3AAT6LookupIN2OT7IntTypeIjLj4EEEEEERKT_PKvj:
   47|   111k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT7IntTypeIiLj4EEEERKT_PKvj:
   47|  48.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIiLj4EEEEEERKT_PKvj:
   47|  48.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tEptEv:
  202|  48.0k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE3getEv:
  242|  49.1k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4trakELj32ELb0EE7convertEPK9hb_blob_t:
  302|  49.1k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE10get_storedEv:
  210|  49.1k|  {
  211|  49.1k|  retry:
  212|  49.1k|    Stored *p = this->instance.get_acquire ();
  213|  49.1k|    if (unlikely (!p))
  ------------------
  |  |  259|  49.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.4k, False: 16.6k]
  |  |  ------------------
  ------------------
  214|  32.4k|    {
  215|  32.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  32.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.4k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  32.4k|      p = this->template call_create<Stored, Funcs> ();
  219|  32.4k|      if (unlikely (!p))
  ------------------
  |  |  259|  32.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.4k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  32.4k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  32.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.4k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  32.4k|    }
  228|  49.1k|    return p;
  229|  49.1k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj32EE8is_inertEv:
  155|  32.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj32EE8get_dataEv:
  153|  64.8k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4trakELj32ELb0EE8get_nullEv:
  299|  32.4k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj32EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4trakELj32ELb0EEEEPT_v:
  158|  32.4k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4trakELj32ELb0EE6createEP9hb_face_t:
  290|  32.4k|  {
  291|  32.4k|    auto c = hb_sanitize_context_t ();
  292|  32.4k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  32.4k|    return c.reference_table<T> (face);
  295|  32.4k|  }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7HBFixedINS0_7IntTypeIiLj4EEELj16EEEEEERKT_PKvj:
   47|    179|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7IntTypeIsLj2EEEEEERKT_PKvj:
   47|  11.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-aat-layout.cc:_ZL14StructAtOffsetIN3AAT9TrackDataEERKT_PKvj:
   47|    242|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  32.4k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  32.4k|    return this->instance.cmpexch (current, value);
  240|  32.4k|  }
_ZN16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 32.4k, False: 900]
  |  Branch (198:14): [True: 59, False: 32.3k]
  ------------------
  199|     59|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4trakELj32ELb0EE7destroyEP9hb_blob_t:
  296|     59|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  1.08k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tEptEv:
  202|   100k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE3getEv:
  242|   100k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4featELj34ELb0EE7convertEPK9hb_blob_t:
  302|   100k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE10get_storedEv:
  210|   100k|  {
  211|   100k|  retry:
  212|   100k|    Stored *p = this->instance.get_acquire ();
  213|   100k|    if (unlikely (!p))
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.5k, False: 66.5k]
  |  |  ------------------
  ------------------
  214|  33.5k|    {
  215|  33.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 261, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    261|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  99.7k|    return p;
  229|   100k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj34EE8is_inertEv:
  155|  33.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj34EE8get_dataEv:
  153|  66.7k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN3AAT4featELj34ELb0EE8get_nullEv:
  299|  33.5k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj34EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN3AAT4featELj34ELb0EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN3AAT4featELj34ELb0EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|      0|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 20, False: 33.2k]
  ------------------
  199|     20|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN3AAT4featELj34ELb0EE7destroyEP9hb_blob_t:
  296|     20|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK17hb_data_wrapper_tIvLj0EE8is_inertEv:
  163|      5|  bool is_inert () const { return false; }
_ZN16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E4finiEv:
  185|  99.7k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E10do_destroyEPS0_:
  197|  99.7k|  {
  198|  99.7k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.0k, False: 66.6k]
  |  Branch (198:14): [True: 33.0k, False: 0]
  ------------------
  199|  33.0k|      Funcs::destroy (p);
  200|  99.7k|  }
_ZN16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E4initEv:
  184|  99.7k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tI23hb_fallback_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj2ES0_ES2_Lj2ES0_E4finiEv:
  185|  99.7k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tI23hb_fallback_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj2ES0_ES2_Lj2ES0_E10do_destroyEPS0_:
  197|  99.7k|  {
  198|  99.7k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 0, False: 99.7k]
  |  Branch (198:14): [True: 0, False: 0]
  ------------------
  199|      0|      Funcs::destroy (p);
  200|  99.7k|  }
_ZN16hb_lazy_loader_tI23hb_fallback_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj2ES0_ES2_Lj2ES0_E4initEv:
  184|  99.7k|  void init ()  { instance.set_relaxed (nullptr); }
_ZNK2OT7IntTypeItLj2EE8get_sizeEv:
  104|   216k|  unsigned int get_size () const { return (size); } \
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E11get_relaxedEv:
  243|  2.42M|  const Returned * get_relaxed () const { return Funcs::convert (get_stored_relaxed ()); }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E7convertEPS1_:
  247|  5.01M|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E18get_stored_relaxedEv:
  231|  2.42M|  {
  232|  2.42M|    return this->instance.get_relaxed ();
  233|  2.42M|  }
_ZNK22hb_table_lazy_loader_tIN2OT4locaELj14ELb1EE8get_blobEv:
  304|  65.9k|  hb_blob_t* get_blob () const { return this->get_stored (); }
_ZNK16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE10get_storedEv:
  210|  65.9k|  {
  211|  65.9k|  retry:
  212|  65.9k|    Stored *p = this->instance.get_acquire ();
  213|  65.9k|    if (unlikely (!p))
  ------------------
  |  |  259|  65.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 32.7k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  65.9k|    return p;
  229|  65.9k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj14EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj14EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4locaELj14ELb1EE8get_nullEv:
  299|  33.2k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj14EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4locaELj14ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4locaELj14ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 86]
  |  Branch (198:14): [True: 2.03k, False: 31.2k]
  ------------------
  199|  2.03k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4locaELj14ELb1EE7destroyEP9hb_blob_t:
  296|  2.03k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tEptEv:
  202|  98.8k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE3getEv:
  242|  98.8k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4maxpELj2ELb1EE7convertEPK9hb_blob_t:
  302|  98.8k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE10get_storedEv:
  210|  98.8k|  {
  211|  98.8k|  retry:
  212|  98.8k|    Stored *p = this->instance.get_acquire ();
  213|  98.8k|    if (unlikely (!p))
  ------------------
  |  |  259|  98.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 65.5k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  98.8k|    return p;
  229|  98.8k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj2EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj2EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4maxpELj2ELb1EE8get_nullEv:
  299|  33.2k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj2EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4maxpELj2ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4maxpELj2ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
hb-common.cc:_ZL11StructAfterIN2OT10maxpV1TailENS0_4maxpEERKT_RKT0_:
   72|  1.10k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT10maxpV1TailEERKT_PKvj:
   47|  1.10k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK2OT4maxp8get_sizeEv:
  104|  1.10k|  unsigned int get_size () const { return (size); } \
_ZNK16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 3.45k, False: 29.7k]
  ------------------
  199|  3.45k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4maxpELj2ELb1EE7destroyEP9hb_blob_t:
  296|  3.45k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
hb-common.cc:_ZL11StructAfterIN2OT9glyf_impl23VarCompositeGlyphRecordENS1_11GlyphHeaderEERKT_RKT0_:
   72|  51.5k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT9glyf_impl23VarCompositeGlyphRecordEERKT_PKvj:
   47|   972k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK2OT9glyf_impl11GlyphHeader8get_sizeEv:
  104|   108k|  unsigned int get_size () const { return (size); } \
hb-common.cc:_ZL14StructAtOffsetIN2OT7IntTypeItLj2EEEERKT_PKvj:
   47|  10.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIN2OT7IntTypeItLj2EEENS0_9glyf_impl11GlyphHeaderEERKT_RKT0_:
   72|  10.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT7IntTypeIhLj1EEEERKT_PKvj:
   47|  7.28k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIN2OT9glyf_impl20CompositeGlyphRecordENS1_11GlyphHeaderEERKT_RKT0_:
   72|  46.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT9glyf_impl20CompositeGlyphRecordEERKT_PKvj:
   47|   151k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIN2OT20TupleVariationHeaderENS0_8OffsetToINS0_7IntTypeIhLj1EEENS3_ItLj2EEELb1EEEERKT_RKT0_:
   72|  14.7k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT20TupleVariationHeaderEERKT_PKvj:
   47|  92.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK2OT8OffsetToINS_7IntTypeIhLj1EEENS1_ItLj2EEELb1EE8get_sizeEv:
  104|  14.7k|  unsigned int get_size () const { return (size); } \
hb-common.cc:_ZL14StructAtOffsetIKN2OT7IntTypeIhLj1EEEERKT_PKvj:
   47|  36.1k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIN2OT14UnsizedArrayOfINS0_7HBFixedINS0_7IntTypeIsLj2EEELj14EEEEENS0_20TupleVariationHeader11TuppleIndexEERKT_RKT0_:
   72|   202k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7HBFixedINS0_7IntTypeIsLj2EEELj14EEEEEERKT_PKvj:
   47|   202k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK2OT20TupleVariationHeader11TuppleIndex8get_sizeEv:
  104|   202k|  unsigned int get_size () const { return (size); } \
hb-common.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7HBFixedINS0_7IntTypeIsLj2EEELj14EEEEEERKT_PKvj:
   47|  44.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIKN2OT11HBGlyphID24ENS0_7IntTypeItLj2EEEERKT_RKT0_:
   72|  40.0k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIKN2OT11HBGlyphID24EERKT_PKvj:
   47|  40.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIKN2OT11HBGlyphID16ENS0_7IntTypeItLj2EEEERKT_RKT0_:
   72|  23.2k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIKN2OT11HBGlyphID16EERKT_PKvj:
   47|  23.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIKN2OT7IntTypeIaLj1EEENS1_ItLj2EEEERKT_RKT0_:
   72|   132k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-common.cc:_ZL14StructAtOffsetIKN2OT7IntTypeIaLj1EEEERKT_PKvj:
   47|   132k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-common.cc:_ZL11StructAfterIKN2OT7IntTypeIhLj1EEENS1_ItLj2EEEERKT_RKT0_:
   72|  20.8k|{ return StructAtOffset<Type>(&X, X.get_size()); }
_ZNK16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tEptEv:
  202|  66.5k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE3getEv:
  242|   131k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4headELj1ELb1EE7convertEPK9hb_blob_t:
  302|   131k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE10get_storedEv:
  210|   131k|  {
  211|   131k|  retry:
  212|   131k|    Stored *p = this->instance.get_acquire ();
  213|   131k|    if (unlikely (!p))
  ------------------
  |  |  259|   131k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 98.7k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   131k|    return p;
  229|   131k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj1EE8is_inertEv:
  155|  66.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj1EE8get_dataEv:
  153|   132k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4headELj1ELb1EE8get_nullEv:
  299|  33.2k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj1EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4headELj1ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4headELj1ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 383, False: 32.8k]
  ------------------
  199|    383|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4headELj1ELb1EE7destroyEP9hb_blob_t:
  296|    383|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_EptEv:
  202|   922k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E3getEv:
  242|   922k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E7convertEPS1_:
  247|   922k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E10get_storedEv:
  210|   922k|  {
  211|   922k|  retry:
  212|   922k|    Stored *p = this->instance.get_acquire ();
  213|   922k|    if (unlikely (!p))
  ------------------
  |  |  259|   922k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 889k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     30|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 478, False: 32.7k]
  |  |  ------------------
  ------------------
  220|    478|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   922k|    return p;
  229|   922k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj15EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj15EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E8get_nullEv:
  250|  33.7k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj15EE11call_createIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS4_Lj15EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 478]
  |  |  ------------------
  ------------------
  255|  32.7k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  65.4k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_EcvPKT_IS1_EEv:
  207|  32.7k|  template <typename C> operator const C * () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E3getEv:
  242|  32.7k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E7convertEPS1_:
  247|  32.7k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E10get_storedEv:
  210|  32.7k|  {
  211|  32.7k|  retry:
  212|  32.7k|    Stored *p = this->instance.get_acquire ();
  213|  32.7k|    if (unlikely (!p))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.7k, False: 0]
  |  |  ------------------
  ------------------
  214|  32.7k|    {
  215|  32.7k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.7k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  32.7k|      p = this->template call_create<Stored, Funcs> ();
  219|  32.7k|      if (unlikely (!p))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 555, False: 32.1k]
  |  |  ------------------
  ------------------
  220|    555|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  32.7k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.7k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  32.7k|    }
  228|  32.7k|    return p;
  229|  32.7k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj21EE8is_inertEv:
  155|  32.7k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj21EE8get_dataEv:
  153|  65.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E8get_nullEv:
  250|  33.2k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj21EE11call_createIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS4_Lj21EEEEPT_v:
  158|  32.7k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E6createEPS4_:
  252|  32.7k|  {
  253|  32.7k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  32.7k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  32.7k|    if (likely (p))
  ------------------
  |  |  258|  32.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.1k, False: 555]
  |  |  ------------------
  ------------------
  255|  32.1k|      p = new (p) Stored (data);
  256|  32.7k|    return p;
  257|  32.7k|  }
_ZNK16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E7cmpexchEPS1_S6_:
  236|  32.7k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  32.7k|    return this->instance.cmpexch (current, value);
  240|  32.7k|  }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 32.7k, False: 613]
  |  Branch (198:14): [True: 32.1k, False: 555]
  ------------------
  199|  32.1k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E7destroyEPS1_:
  266|  32.1k|  {
  267|  32.1k|    p->~Stored ();
  268|  32.1k|    hb_free (p);
  ------------------
  |  |  236|  32.1k|#define hb_free hb_free_impl
  ------------------
  269|  32.1k|  }
_ZNK16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_EcvPKT_IS1_EEv:
  207|  32.7k|  template <typename C> operator const C * () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E3getEv:
  242|   725k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E7convertEPS1_:
  247|   725k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E10get_storedEv:
  210|   725k|  {
  211|   725k|  retry:
  212|   725k|    Stored *p = this->instance.get_acquire ();
  213|   725k|    if (unlikely (!p))
  ------------------
  |  |  259|   725k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 692k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     30|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 356, False: 32.8k]
  |  |  ------------------
  ------------------
  220|    356|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   725k|    return p;
  229|   725k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj5EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj5EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E8get_nullEv:
  250|  33.5k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj5EE11call_createIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS4_Lj5EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.8k, False: 356]
  |  |  ------------------
  ------------------
  255|  32.8k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-common.cc:_ZL14StructAtOffsetIN2OT16DeltaSetIndexMapEERKT_PKvj:
   47|  2.92k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tEptEv:
  202|   142k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE3getEv:
  242|   142k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4hheaELj4ELb1EE7convertEPK9hb_blob_t:
  302|   142k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE10get_storedEv:
  210|   142k|  {
  211|   142k|  retry:
  212|   142k|    Stored *p = this->instance.get_acquire ();
  213|   142k|    if (unlikely (!p))
  ------------------
  |  |  259|   142k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 109k]
  |  |  ------------------
  ------------------
  214|  33.3k|    {
  215|  33.3k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 107, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    107|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   142k|    return p;
  229|   142k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj4EE8is_inertEv:
  155|  33.3k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj4EE8get_dataEv:
  153|  66.5k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4hheaELj4ELb1EE8get_nullEv:
  299|  33.3k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj4EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4hheaELj4ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4hheaELj4ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 80]
  |  Branch (198:14): [True: 1.24k, False: 32.0k]
  ------------------
  199|  1.24k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4hheaELj4ELb1EE7destroyEP9hb_blob_t:
  296|  1.24k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 114]
  |  Branch (198:14): [True: 32.8k, False: 356]
  ------------------
  199|  32.8k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E7destroyEPS1_:
  266|  32.8k|  {
  267|  32.8k|    p->~Stored ();
  268|  32.8k|    hb_free (p);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  269|  32.8k|  }
_ZNK16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_EcvPKT_IS1_EEv:
  207|  32.7k|  template <typename C> operator const C * () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E3getEv:
  242|  66.6k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E7convertEPS1_:
  247|  66.6k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E10get_storedEv:
  210|  66.6k|  {
  211|  66.6k|  retry:
  212|  66.6k|    Stored *p = this->instance.get_acquire ();
  213|  66.6k|    if (unlikely (!p))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 33.4k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     10|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 486, False: 32.7k]
  |  |  ------------------
  ------------------
  220|    486|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  66.6k|    return p;
  229|  66.6k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj12EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj12EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E8get_nullEv:
  250|  33.7k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj12EE11call_createIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS4_Lj12EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 486]
  |  |  ------------------
  ------------------
  255|  32.7k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tEptEv:
  202|  32.7k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE3getEv:
  242|  32.7k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4vheaELj11ELb1EE7convertEPK9hb_blob_t:
  302|  32.7k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE10get_storedEv:
  210|  32.7k|  {
  211|  32.7k|  retry:
  212|  32.7k|    Stored *p = this->instance.get_acquire ();
  213|  32.7k|    if (unlikely (!p))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.7k, False: 0]
  |  |  ------------------
  ------------------
  214|  32.7k|    {
  215|  32.7k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.7k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  32.7k|      p = this->template call_create<Stored, Funcs> ();
  219|  32.7k|      if (unlikely (!p))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.7k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  32.7k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.7k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  32.7k|    }
  228|  32.7k|    return p;
  229|  32.7k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj11EE8is_inertEv:
  155|  32.7k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj11EE8get_dataEv:
  153|  65.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4vheaELj11ELb1EE8get_nullEv:
  299|  32.7k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj11EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4vheaELj11ELb1EEEEPT_v:
  158|  32.7k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4vheaELj11ELb1EE6createEP9hb_face_t:
  290|  32.7k|  {
  291|  32.7k|    auto c = hb_sanitize_context_t ();
  292|  32.7k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  32.7k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  32.7k|    return c.reference_table<T> (face);
  295|  32.7k|  }
_ZNK16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  32.7k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  32.7k|    return this->instance.cmpexch (current, value);
  240|  32.7k|  }
_ZN16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 32.7k, False: 600]
  |  Branch (198:14): [True: 203, False: 32.5k]
  ------------------
  199|    203|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4vheaELj11ELb1EE7destroyEP9hb_blob_t:
  296|    203|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 114]
  |  Branch (198:14): [True: 32.7k, False: 486]
  ------------------
  199|  32.7k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E7destroyEPS1_:
  266|  32.7k|  {
  267|  32.7k|    p->~Stored ();
  268|  32.7k|    hb_free (p);
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  269|  32.7k|  }
_ZNK16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 114]
  |  Branch (198:14): [True: 32.7k, False: 478]
  ------------------
  199|  32.7k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E7destroyEPS1_:
  266|  32.7k|  {
  267|  32.7k|    p->~Stored ();
  268|  32.7k|    hb_free (p);
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  269|  32.7k|  }
_ZNK16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE3getEv:
  242|   107k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4MVARELj22ELb1EE7convertEPK9hb_blob_t:
  302|   107k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE10get_storedEv:
  210|   107k|  {
  211|   107k|  retry:
  212|   107k|    Stored *p = this->instance.get_acquire ();
  213|   107k|    if (unlikely (!p))
  ------------------
  |  |  259|   107k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.5k, False: 74.3k]
  |  |  ------------------
  ------------------
  214|  33.5k|    {
  215|  33.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 261, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    261|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   107k|    return p;
  229|   107k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj22EE8is_inertEv:
  155|  33.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj22EE8get_dataEv:
  153|  66.7k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4MVARELj22ELb1EE8get_nullEv:
  299|  33.5k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj22EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4MVARELj22ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4MVARELj22ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 166, False: 33.0k]
  ------------------
  199|    166|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4MVARELj22ELb1EE7destroyEP9hb_blob_t:
  296|    166|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tEptEv:
  202|   108k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE3getEv:
  242|   108k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT3OS2ELj6ELb1EE7convertEPK9hb_blob_t:
  302|   108k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE10get_storedEv:
  210|   108k|  {
  211|   108k|  retry:
  212|   108k|    Stored *p = this->instance.get_acquire ();
  213|   108k|    if (unlikely (!p))
  ------------------
  |  |  259|   108k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 75.1k]
  |  |  ------------------
  ------------------
  214|  33.3k|    {
  215|  33.3k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 107, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    107|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   108k|    return p;
  229|   108k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj6EE8is_inertEv:
  155|  33.3k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj6EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT3OS2ELj6ELb1EE8get_nullEv:
  299|  33.3k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj6EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT3OS2ELj6ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT3OS2ELj6ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 809, False: 32.4k]
  ------------------
  199|    809|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT3OS2ELj6ELb1EE7destroyEP9hb_blob_t:
  296|    809|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK2OT7IntTypeIhLj1EE8get_sizeEv:
  104|      2|  unsigned int get_size () const { return (size); } \
hb-face.cc:_ZL14StructAtOffsetIKN2OT11ResourceMapEERKT_PKvj:
   47|  1.41k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT9ArrayOfM1INS0_18ResourceTypeRecordENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  3.20M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT19OpenTypeOffsetTableEERKT_PKvj:
   47|    597|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_14ResourceRecordEEEERKT_PKvj:
   47|    417|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT7ArrayOfINS0_7IntTypeIhLj1EEENS2_IjLj4EEEEEERKT_PKvj:
   47|  1.56k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  1.50k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT10DefaultUVSEERKT_PKvj:
   47|     47|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT13NonDefaultUVSEERKT_PKvj:
   47|     15|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT19OpenTypeOffsetTableEERKT_PKvj:
   47|  1.72k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  7.00k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_7IntTypeIhLj1EEENS2_IjLj4EEEEEERKT_PKvj:
   47|  1.17k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_14ResourceRecordEEEERKT_PKvj:
   47|  85.7k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT9ArrayOfM1INS0_18ResourceTypeRecordENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|     92|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT11ResourceMapEERKT_PKvj:
   47|     94|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZN16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E10do_destroyEPS0_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.1k, False: 163]
  |  Branch (198:14): [True: 33.1k, False: 0]
  ------------------
  199|  33.1k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_E10do_destroyEPS0_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 0, False: 33.3k]
  |  Branch (198:14): [True: 0, False: 0]
  ------------------
  199|      0|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZNK16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_EptEv:
  202|  2.85M|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E3getEv:
  242|  2.85M|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E7convertEPS1_:
  247|  2.85M|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E10get_storedEv:
  210|  2.85M|  {
  211|  2.85M|  retry:
  212|  2.85M|    Stored *p = this->instance.get_acquire ();
  213|  2.85M|    if (unlikely (!p))
  ------------------
  |  |  259|  2.85M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.5k, False: 2.82M]
  |  |  ------------------
  ------------------
  214|  33.5k|    {
  215|  33.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 281, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    281|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 424, False: 32.8k]
  |  |  ------------------
  ------------------
  220|    424|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  2.85M|    return p;
  229|  2.85M|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj3EE8is_inertEv:
  155|  33.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj3EE8get_dataEv:
  153|  66.7k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E8get_nullEv:
  250|  33.9k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj3EE11call_createIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS4_Lj3EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.8k, False: 424]
  |  |  ------------------
  ------------------
  255|  32.8k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-face.cc:_ZL14StructAtOffsetIN2OT10DefaultUVSEERKT_PKvj:
   47|  3.16k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT13NonDefaultUVSEERKT_PKvj:
   47|  3.06k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIN2OT12CmapSubtableEERKT_PKvj:
   47|  24.6k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-face.cc:_ZL14StructAtOffsetIKN2OT12CmapSubtableEERKT_PKvj:
   47|  2.68k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.8k, False: 424]
  ------------------
  199|  32.8k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E7destroyEPS1_:
  266|  32.8k|  {
  267|  32.8k|    p->~Stored ();
  268|  32.8k|    hb_free (p);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  269|  32.8k|  }
hb-font.cc:_ZL23StructAtOffsetUnalignedIjERKT_PKvj:
   53|  1.30k|{
   54|  1.30k|#pragma GCC diagnostic push
   55|  1.30k|#pragma GCC diagnostic ignored "-Wcast-align"
   56|  1.30k|  return * reinterpret_cast<const Type*> ((const char *) P + offset);
   57|  1.30k|#pragma GCC diagnostic pop
   58|  1.30k|}
hb-font.cc:_ZL23StructAtOffsetUnalignedIiERT_Pvj:
   61|  2.60k|{
   62|  2.60k|#pragma GCC diagnostic push
   63|  2.60k|#pragma GCC diagnostic ignored "-Wcast-align"
   64|  2.60k|  return * reinterpret_cast<Type*> ((char *) P + offset);
   65|  2.60k|#pragma GCC diagnostic pop
   66|  2.60k|}
_ZN16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E5init0Ev:
  183|  33.2k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tI23hb_fallback_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj2ES0_ES2_Lj2ES0_E5init0Ev:
  183|  33.2k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
hb-font.cc:_ZL14StructAtOffsetIKN2OT10AxisRecordEERKT_PKvj:
   47|  7.43k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-font.cc:_ZL11StructAfterIN2OT11SegmentMapsES1_ERKT_RKT0_:
   72|  8.04k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-font.cc:_ZL14StructAtOffsetIN2OT11SegmentMapsEERKT_PKvj:
   47|  8.04k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  66.6k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE3getEv:
  242|   205k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4fvarELj18ELb1EE7convertEPK9hb_blob_t:
  302|   205k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE10get_storedEv:
  210|   205k|  {
  211|   205k|  retry:
  212|   205k|    Stored *p = this->instance.get_acquire ();
  213|   205k|    if (unlikely (!p))
  ------------------
  |  |  259|   205k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.7k, False: 171k]
  |  |  ------------------
  ------------------
  214|  33.7k|    {
  215|  33.7k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 376, False: 33.3k]
  |  |  ------------------
  ------------------
  216|    376|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.3k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.3k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.3k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.3k|    }
  228|   205k|    return p;
  229|   205k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj18EE8is_inertEv:
  155|  33.7k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj18EE8get_dataEv:
  153|  67.0k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4fvarELj18ELb1EE8get_nullEv:
  299|  33.7k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj18EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4fvarELj18ELb1EEEEPT_v:
  158|  33.3k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4fvarELj18ELb1EE6createEP9hb_face_t:
  290|  33.3k|  {
  291|  33.3k|    auto c = hb_sanitize_context_t ();
  292|  33.3k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.3k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.3k|    return c.reference_table<T> (face);
  295|  33.3k|  }
hb-font.cc:_ZL14StructAtOffsetIN2OT14InstanceRecordEERKT_PKvj:
   47|  1.87k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-font.cc:_ZL11StructAfterIN2OT14InstanceRecordE10hb_array_tIKNS0_10AxisRecordEEERKT_RKT0_:
   72|    936|{ return StructAtOffset<Type>(&X, X.get_size()); }
_ZNK16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.3k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.3k|    return this->instance.cmpexch (current, value);
  240|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.3k, False: 0]
  |  Branch (198:14): [True: 1.09k, False: 32.2k]
  ------------------
  199|  1.09k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4fvarELj18ELb1EE7destroyEP9hb_blob_t:
  296|  1.09k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tEptEv:
  202|  99.9k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE3getEv:
  242|  99.9k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4avarELj19ELb1EE7convertEPK9hb_blob_t:
  302|  99.9k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE10get_storedEv:
  210|  99.9k|  {
  211|  99.9k|  retry:
  212|  99.9k|    Stored *p = this->instance.get_acquire ();
  213|  99.9k|    if (unlikely (!p))
  ------------------
  |  |  259|  99.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 66.5k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 184, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    184|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  99.7k|    return p;
  229|  99.9k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj19EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj19EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4avarELj19ELb1EE8get_nullEv:
  299|  33.4k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj19EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4avarELj19ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4avarELj19ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 160, False: 33.0k]
  ------------------
  199|    160|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4avarELj19ELb1EE7destroyEP9hb_blob_t:
  296|    160|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tEptEv:
  202|   138k|  const Returned * operator -> () const { return get (); }
hb-ot-color.cc:_ZL11StructAfterIN2OT10CPALV1TailENS0_4CPALEERKT_RKT0_:
   72|    307|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT10CPALV1TailEERKT_PKvj:
   47|    307|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_5IndexEEEERKT_PKvj:
   47|    281|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIjLj4EEEEEERKT_PKvj:
   47|  5.72k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT13BaseGlyphListEERKT_PKvj:
   47|   273k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT5PaintEERKT_PKvj:
   47|   132k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT20SortedUnsizedArrayOfINS0_15BaseGlyphRecordEEEERKT_PKvj:
   47|  41.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_11LayerRecordEEEERKT_PKvj:
   47|  41.1k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT13SortedArrayOfINS0_21SVGDocumentIndexEntryENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|     81|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT10SBIXStrikeEERKT_PKvj:
   47|  1.96k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT9SBIXGlyphEERKT_PKvj:
   47|    212|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT18IndexSubtableArrayEERKT_PKvj:
   47|  1.50M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIKN2OT13IndexSubtableEERKT_PKvj:
   47|    245|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT23GlyphBitmapDataFormat17EERKT_PKvj:
   47|      3|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT23GlyphBitmapDataFormat18EERKT_PKvj:
   47|      2|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT23GlyphBitmapDataFormat19EERKT_PKvj:
   47|      1|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tEptEv:
  202|   247k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE3getEv:
  242|   247k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4CPALELj36ELb1EE7convertEPK9hb_blob_t:
  302|   247k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE10get_storedEv:
  210|   247k|  {
  211|   247k|  retry:
  212|   247k|    Stored *p = this->instance.get_acquire ();
  213|   247k|    if (unlikely (!p))
  ------------------
  |  |  259|   247k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.7k, False: 213k]
  |  |  ------------------
  ------------------
  214|  33.7k|    {
  215|  33.7k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 522, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    522|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   247k|    return p;
  229|   247k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj36EE8is_inertEv:
  155|  33.7k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj36EE8get_dataEv:
  153|  67.0k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4CPALELj36ELb1EE8get_nullEv:
  299|  33.7k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj36EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4CPALELj36ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4CPALELj36ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 236, False: 33.0k]
  ------------------
  199|    236|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4CPALELj36ELb1EE7destroyEP9hb_blob_t:
  296|    236|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tEptEv:
  202|   816k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE3getEv:
  242|   816k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4COLRELj35ELb1EE7convertEPK9hb_blob_t:
  302|   816k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE10get_storedEv:
  210|   816k|  {
  211|   816k|  retry:
  212|   816k|    Stored *p = this->instance.get_acquire ();
  213|   816k|    if (unlikely (!p))
  ------------------
  |  |  259|   816k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 783k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 184, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    184|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   816k|    return p;
  229|   816k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj35EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj35EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN22hb_table_lazy_loader_tIN2OT4COLRELj35ELb1EE8get_nullEv:
  299|  33.4k|  { return hb_blob_get_empty (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj35EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4COLRELj35ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4COLRELj35ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT9ColorLineINS0_10NoVariableEEEERKT_PKvj:
   47|  16.5k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT9ColorLineINS0_8VariableEEEERKT_PKvj:
   47|  88.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT10NoVariableINS0_9Affine2x3EEEERKT_PKvj:
   47|  76.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT8VariableINS0_9Affine2x3EEEERKT_PKvj:
   47|  78.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT5PaintEERKT_PKvj:
   47|  4.59M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT13BaseGlyphListEERKT_PKvj:
   47|  7.19k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT9LayerListEERKT_PKvj:
   47|  2.84k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT7ClipBoxEERKT_PKvj:
   47|  2.82k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT8ClipListEERKT_PKvj:
   47|  2.60k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 2.40k, False: 30.8k]
  ------------------
  199|  2.40k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4COLRELj35ELb1EE7destroyEP9hb_blob_t:
  296|  2.40k|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZNK16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_EptEv:
  202|  66.6k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E3getEv:
  242|  66.6k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E7convertEPS1_:
  247|  66.6k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E10get_storedEv:
  210|  66.6k|  {
  211|  66.6k|  retry:
  212|  66.6k|    Stored *p = this->instance.get_acquire ();
  213|  66.6k|    if (unlikely (!p))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 33.2k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 174, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    174|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 673, False: 32.5k]
  |  |  ------------------
  ------------------
  220|    673|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  66.5k|    return p;
  229|  66.6k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj39EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj39EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E8get_nullEv:
  250|  34.0k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  34.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj39EE11call_createIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS4_Lj39EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.5k, False: 673]
  |  |  ------------------
  ------------------
  255|  32.5k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.5k, False: 673]
  ------------------
  199|  32.5k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E7destroyEPS1_:
  266|  32.5k|  {
  267|  32.5k|    p->~Stored ();
  268|  32.5k|    hb_free (p);
  ------------------
  |  |  236|  32.5k|#define hb_free hb_free_impl
  ------------------
  269|  32.5k|  }
_ZNK16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_EptEv:
  202|   816k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E3getEv:
  242|   816k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E7convertEPS1_:
  247|   816k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E10get_storedEv:
  210|   816k|  {
  211|   816k|  retry:
  212|   816k|    Stored *p = this->instance.get_acquire ();
  213|   816k|    if (unlikely (!p))
  ------------------
  |  |  259|   816k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 783k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 184, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    184|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 484, False: 32.7k]
  |  |  ------------------
  ------------------
  220|    484|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   816k|    return p;
  229|   816k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj37EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj37EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E8get_nullEv:
  250|  33.9k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj37EE11call_createIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS4_Lj37EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 484]
  |  |  ------------------
  ------------------
  255|  32.7k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT13IndexSubtableEERKT_PKvj:
   47|  55.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT18IndexSubtableArrayEERKT_PKvj:
   47|  3.13k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.7k, False: 484]
  ------------------
  199|  32.7k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E7destroyEPS1_:
  266|  32.7k|  {
  267|  32.7k|    p->~Stored ();
  268|  32.7k|    hb_free (p);
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  269|  32.7k|  }
_ZNK16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_EptEv:
  202|   816k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E3getEv:
  242|   816k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E7convertEPS1_:
  247|   816k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E10get_storedEv:
  210|   816k|  {
  211|   816k|  retry:
  212|   816k|    Stored *p = this->instance.get_acquire ();
  213|   816k|    if (unlikely (!p))
  ------------------
  |  |  259|   816k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 783k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 184, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    184|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 441, False: 32.8k]
  |  |  ------------------
  ------------------
  220|    441|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   816k|    return p;
  229|   816k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj38EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj38EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E8get_nullEv:
  250|  33.8k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK17hb_data_wrapper_tI9hb_face_tLj38EE11call_createIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS4_Lj38EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.8k, False: 441]
  |  |  ------------------
  ------------------
  255|  32.8k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-color.cc:_ZL14StructAtOffsetIN2OT10SBIXStrikeEERKT_PKvj:
   47|  2.68k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.8k, False: 441]
  ------------------
  199|  32.8k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E7destroyEPS1_:
  266|  32.8k|  {
  267|  32.8k|    p->~Stored ();
  268|  32.8k|    hb_free (p);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  269|  32.8k|  }
_ZN16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4STATE22hb_table_lazy_loader_tIS1_Lj9ELb1EE9hb_face_tLj9E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4cvarE22hb_table_lazy_loader_tIS1_Lj20ELb1EE9hb_face_tLj20E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE5init0Ev:
  183|  33.3k|  void init0 () {} /* Init, when memory is already set to 0. No-op for us. */
_ZN16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4headE22hb_table_lazy_loader_tIS1_Lj1ELb1EE9hb_face_tLj1E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4maxpE22hb_table_lazy_loader_tIS1_Lj2ELb1EE9hb_face_tLj2E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18cmap_accelerator_tE21hb_face_lazy_loader_tIS1_Lj3EE9hb_face_tLj3ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4hheaE22hb_table_lazy_loader_tIS1_Lj4ELb1EE9hb_face_tLj4E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT3OS2E22hb_table_lazy_loader_tIS1_Lj6ELb1EE9hb_face_tLj6E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 114]
  |  Branch (198:14): [True: 32.7k, False: 487]
  ------------------
  199|  32.7k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E8get_nullEv:
  250|  33.7k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E7destroyEPS1_:
  266|  32.7k|  {
  267|  32.7k|    p->~Stored ();
  268|  32.7k|    hb_free (p);
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  269|  32.7k|  }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.6k, False: 589]
  ------------------
  199|  32.6k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E8get_nullEv:
  250|  34.1k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  34.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E7destroyEPS1_:
  266|  32.6k|  {
  267|  32.6k|    p->~Stored ();
  268|  32.6k|    hb_free (p);
  ------------------
  |  |  236|  32.6k|#define hb_free hb_free_impl
  ------------------
  269|  32.6k|  }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4STATE22hb_table_lazy_loader_tIS1_Lj9ELb1EE9hb_face_tLj9E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4STATE22hb_table_lazy_loader_tIS1_Lj9ELb1EE9hb_face_tLj9E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 0, False: 33.3k]
  |  Branch (198:14): [True: 0, False: 0]
  ------------------
  199|      0|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT4STATE22hb_table_lazy_loader_tIS1_Lj9ELb1EE9hb_face_tLj9E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.6k, False: 637]
  ------------------
  199|  32.6k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E8get_nullEv:
  250|  34.0k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  34.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E7destroyEPS1_:
  266|  32.6k|  {
  267|  32.6k|    p->~Stored ();
  268|  32.6k|    hb_free (p);
  ------------------
  |  |  236|  32.6k|#define hb_free hb_free_impl
  ------------------
  269|  32.6k|  }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4vheaE22hb_table_lazy_loader_tIS1_Lj11ELb1EE9hb_face_tLj11E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 114]
  |  Branch (198:14): [True: 38, False: 33.1k]
  ------------------
  199|     38|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4VORGELj13ELb1EE8get_nullEv:
  299|  33.2k|  { return hb_blob_get_empty (); }
_ZN22hb_table_lazy_loader_tIN2OT4VORGELj13ELb1EE7destroyEP9hb_blob_t:
  296|     38|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZN16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4locaE22hb_table_lazy_loader_tIS1_Lj14ELb1EE9hb_face_tLj14E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18glyf_accelerator_tE21hb_face_lazy_loader_tIS1_Lj15EE9hb_face_tLj15ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 115]
  |  Branch (198:14): [True: 32.7k, False: 427]
  ------------------
  199|  32.7k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E8get_nullEv:
  250|  33.6k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E7destroyEPS1_:
  266|  32.7k|  {
  267|  32.7k|    p->~Stored ();
  268|  32.7k|    hb_free (p);
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  269|  32.7k|  }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 32.5k, False: 774]
  |  Branch (198:14): [True: 31.9k, False: 569]
  ------------------
  199|  31.9k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E8get_nullEv:
  250|  33.1k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E7destroyEPS1_:
  266|  31.9k|  {
  267|  31.9k|    p->~Stored ();
  268|  31.9k|    hb_free (p);
  ------------------
  |  |  236|  31.9k|#define hb_free hb_free_impl
  ------------------
  269|  31.9k|  }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4fvarE22hb_table_lazy_loader_tIS1_Lj18ELb1EE9hb_face_tLj18E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4avarE22hb_table_lazy_loader_tIS1_Lj19ELb1EE9hb_face_tLj19E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4cvarE22hb_table_lazy_loader_tIS1_Lj20ELb1EE9hb_face_tLj20E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4cvarE22hb_table_lazy_loader_tIS1_Lj20ELb1EE9hb_face_tLj20E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 0, False: 33.3k]
  |  Branch (198:14): [True: 0, False: 0]
  ------------------
  199|      0|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT4cvarE22hb_table_lazy_loader_tIS1_Lj20ELb1EE9hb_face_tLj20E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18gvar_accelerator_tE21hb_face_lazy_loader_tIS1_Lj21EE9hb_face_tLj21ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 31.5k, False: 1.77k]
  |  Branch (198:14): [True: 577, False: 30.9k]
  ------------------
  199|    577|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EE8get_nullEv:
  299|  31.5k|  { return hb_blob_get_empty (); }
_ZN22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EE7destroyEP9hb_blob_t:
  296|    577|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZN16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18GDEF_accelerator_tE21hb_face_lazy_loader_tIS1_Lj24EE9hb_face_tLj24ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.9k, False: 346]
  ------------------
  199|  32.9k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E8get_nullEv:
  250|  34.1k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  34.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E7destroyEPS1_:
  266|  32.9k|  {
  267|  32.9k|    p->~Stored ();
  268|  32.9k|    hb_free (p);
  ------------------
  |  |  236|  32.9k|#define hb_free hb_free_impl
  ------------------
  269|  32.9k|  }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E10do_destroyEPS1_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 32.8k, False: 435]
  ------------------
  199|  32.8k|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E8get_nullEv:
  250|  34.0k|  static const Stored* get_null () { return &Null (Stored); }
  ------------------
  |  |  124|  34.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E7destroyEPS1_:
  266|  32.8k|  {
  267|  32.8k|    p->~Stored ();
  268|  32.8k|    hb_free (p);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  269|  32.8k|  }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 204, False: 33.0k]
  ------------------
  199|    204|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4BASEELj27ELb1EE8get_nullEv:
  299|  33.3k|  { return hb_blob_get_empty (); }
_ZN22hb_table_lazy_loader_tIN2OT4BASEELj27ELb1EE7destroyEP9hb_blob_t:
  296|    204|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZN16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4morxE22hb_table_lazy_loader_tIS1_Lj28ELb0EE9hb_face_tLj28E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4mortE22hb_table_lazy_loader_tIS1_Lj29ELb0EE9hb_face_tLj29E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4kerxE22hb_table_lazy_loader_tIS1_Lj30ELb0EE9hb_face_tLj30E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4ankrE22hb_table_lazy_loader_tIS1_Lj31ELb0EE9hb_face_tLj31E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4trakE22hb_table_lazy_loader_tIS1_Lj32ELb0EE9hb_face_tLj32E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4ltagE22hb_table_lazy_loader_tIS1_Lj33ELb0EE9hb_face_tLj33E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN3AAT4featE22hb_table_lazy_loader_tIS1_Lj34ELb0EE9hb_face_tLj34E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4COLRE22hb_table_lazy_loader_tIS1_Lj35ELb1EE9hb_face_tLj35E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4CPALE22hb_table_lazy_loader_tIS1_Lj36ELb1EE9hb_face_tLj36E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18CBDT_accelerator_tE21hb_face_lazy_loader_tIS1_Lj37EE9hb_face_tLj37ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT18sbix_accelerator_tE21hb_face_lazy_loader_tIS1_Lj38EE9hb_face_tLj38ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT17SVG_accelerator_tE21hb_face_lazy_loader_tIS1_Lj39EE9hb_face_tLj39ES1_E4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZN16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE4finiEv:
  185|  33.3k|  void fini ()  { do_destroy (instance.get_acquire ()); init (); }
_ZN16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE10do_destroyEPS5_:
  197|  33.3k|  {
  198|  33.3k|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 33.2k, False: 73]
  |  Branch (198:14): [True: 450, False: 32.8k]
  ------------------
  199|    450|      Funcs::destroy (p);
  200|  33.3k|  }
_ZN22hb_table_lazy_loader_tIN2OT4MATHELj40ELb1EE8get_nullEv:
  299|  39.3k|  { return hb_blob_get_empty (); }
_ZN22hb_table_lazy_loader_tIN2OT4MATHELj40ELb1EE7destroyEP9hb_blob_t:
  296|    450|  static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
_ZN16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE4initEv:
  184|  33.3k|  void init ()  { instance.set_relaxed (nullptr); }
_ZNK3CFF15Encoding1_Range8get_sizeEv:
  104|      5|  unsigned int get_size () const { return (size); } \
_ZNK3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS2_IhLj1EEEE8get_sizeEv:
  104|    121|  unsigned int get_size () const { return (size); } \
_ZNK3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS2_ItLj2EEEE8get_sizeEv:
  104|      3|  unsigned int get_size () const { return (size); } \
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E11get_relaxedEv:
  243|  3.51M|  const Returned * get_relaxed () const { return Funcs::convert (get_stored_relaxed ()); }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E7convertEPS1_:
  247|  11.8M|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E18get_stored_relaxedEv:
  231|  3.51M|  {
  232|  3.51M|    return this->instance.get_relaxed ();
  233|  3.51M|  }
_ZNK16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E11get_unconstEv:
  244|  98.6k|  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
_ZN16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E7convertEPS0_:
  247|  98.6k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E10get_storedEv:
  210|  98.6k|  {
  211|  98.6k|  retry:
  212|  98.6k|    Stored *p = this->instance.get_acquire ();
  213|  98.6k|    if (unlikely (!p))
  ------------------
  |  |  259|  98.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 98.6k]
  |  |  ------------------
  ------------------
  214|      1|    {
  215|      1|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      1|      p = this->template call_create<Stored, Funcs> ();
  219|      1|      if (unlikely (!p))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      1|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      1|    }
  228|  98.6k|    return p;
  229|  98.6k|  }
_ZN27hb_font_funcs_lazy_loader_tI30hb_ot_font_funcs_lazy_loader_tE8get_nullEv:
  314|      1|    { return hb_##Type##_funcs_get_empty (); } \
_ZNK17hb_data_wrapper_tIvLj0EE11call_createI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tEEPT_v:
  166|      1|  Stored * call_create () const { return Funcs::create (); }
hb-ot-font.cc:_ZL23StructAtOffsetUnalignedIjERKT_PKvj:
   53|  29.3M|{
   54|  29.3M|#pragma GCC diagnostic push
   55|  29.3M|#pragma GCC diagnostic ignored "-Wcast-align"
   56|  29.3M|  return * reinterpret_cast<const Type*> ((const char *) P + offset);
   57|  29.3M|#pragma GCC diagnostic pop
   58|  29.3M|}
hb-ot-font.cc:_ZL23StructAtOffsetUnalignedIjERT_Pvj:
   61|  49.7k|{
   62|  49.7k|#pragma GCC diagnostic push
   63|  49.7k|#pragma GCC diagnostic ignored "-Wcast-align"
   64|  49.7k|  return * reinterpret_cast<Type*> ((char *) P + offset);
   65|  49.7k|#pragma GCC diagnostic pop
   66|  49.7k|}
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT10DefaultUVSEERKT_PKvj:
   47|    160|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT13NonDefaultUVSEERKT_PKvj:
   47|     67|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18hmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj5EE9hb_face_tLj5ES1_EdeIS1_LPv0EEERKT_v:
  204|   692k|  const U & operator * () const  { return *get (); }
hb-ot-font.cc:_ZL11StructAfterIN2OT7IntTypeIhLj1EEENS0_7ArrayOfINS1_ItLj2EEES4_EEERKT_RKT0_:
   72|  25.9k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIN2OT7IntTypeIhLj1EEEERKT_PKvj:
   47|  25.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT14VariationStoreEERKT_PKvj:
   47|  4.68k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT13VarRegionListEERKT_PKvj:
   47|  22.1k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT16DeltaSetIndexMapEERKT_PKvj:
   47|  5.67k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT7VarDataEERKT_PKvj:
   47|  25.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL23StructAtOffsetUnalignedIiERT_Pvj:
   61|  29.2M|{
   62|  29.2M|#pragma GCC diagnostic push
   63|  29.2M|#pragma GCC diagnostic ignored "-Wcast-align"
   64|  29.2M|  return * reinterpret_cast<Type*> ((char *) P + offset);
   65|  29.2M|#pragma GCC diagnostic pop
   66|  29.2M|}
_ZNK16hb_lazy_loader_tIN2OT18vmtx_accelerator_tE21hb_face_lazy_loader_tIS1_Lj12EE9hb_face_tLj12ES1_EdeIS1_LPv0EEERKT_v:
  204|  33.9k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tEdeIS1_LPv0EEERKT_v:
  204|  33.2k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE3getEv:
  242|  33.2k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4VORGELj13ELb1EE7convertEPK9hb_blob_t:
  302|  33.2k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE10get_storedEv:
  210|  33.2k|  {
  211|  33.2k|  retry:
  212|  33.2k|    Stored *p = this->instance.get_acquire ();
  213|  33.2k|    if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 0]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     10|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  33.2k|    return p;
  229|  33.2k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj13EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj13EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj13EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4VORGELj13ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4VORGELj13ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT4VORGE22hb_table_lazy_loader_tIS1_Lj13ELb1EE9hb_face_tLj13E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
hb-ot-font.cc:_ZL14StructAtOffsetIN2OT7IntTypeItLj2EEEERKT_PKvj:
   47|    121|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_EptEv:
  202|   779k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E3getEv:
  242|   779k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E7convertEPS1_:
  247|   779k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E10get_storedEv:
  210|   779k|  {
  211|   779k|  retry:
  212|   779k|    Stored *p = this->instance.get_acquire ();
  213|   779k|    if (unlikely (!p))
  ------------------
  |  |  259|   779k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 746k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     40|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 427, False: 32.7k]
  |  |  ------------------
  ------------------
  220|    427|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   779k|    return p;
  229|   779k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj16EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj16EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj16EE11call_createIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS4_Lj16EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 427]
  |  |  ------------------
  ------------------
  255|  32.7k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-font.cc:_ZL14StructAtOffsetIKN3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|  1.69k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|  3.06k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF7CharsetEERKT_PKvj:
   47|  1.03k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF11CFF1FDArrayEERKT_PKvj:
   47|    146|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF12CFF1FDSelectEERKT_PKvj:
   47|    145|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL11StructAfterIN2OT7IntTypeItLj2EEEN3CFF17FDSelect3_4_RangeIS2_NS1_IhLj1EEEEEERKT_RKT0_:
   72|    121|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF8EncodingEERKT_PKvj:
   47|     17|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL11StructAfterIN3CFF15CFF1SuppEncDataEN2OT7IntTypeIhLj1EEEERKT_RKT0_:
   72|      2|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF15CFF1SuppEncDataEERKT_PKvj:
   47|      7|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL11StructAfterIN3CFF15CFF1SuppEncDataENS0_15Encoding1_RangeEERKT_RKT0_:
   72|      5|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF15CFF1StringIndexEERKT_PKvj:
   47|  1.42k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF5SubrsIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|  1.82k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF14UnsizedByteStrEERKT_PKvj:
   47|  25.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18cff1_accelerator_tE21hb_face_lazy_loader_tIS1_Lj16EE9hb_face_tLj16ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_EptEv:
  202|   561k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E3getEv:
  242|   561k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E7convertEPS1_:
  247|   561k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E10get_storedEv:
  210|   561k|  {
  211|   561k|  retry:
  212|   561k|    Stored *p = this->instance.get_acquire ();
  213|   561k|    if (unlikely (!p))
  ------------------
  |  |  259|   561k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 529k]
  |  |  ------------------
  ------------------
  214|  32.5k|    {
  215|  32.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  32.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 32.5k]
  |  |  ------------------
  ------------------
  216|     20|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  32.5k|      p = this->template call_create<Stored, Funcs> ();
  219|  32.5k|      if (unlikely (!p))
  ------------------
  |  |  259|  32.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 569, False: 31.9k]
  |  |  ------------------
  ------------------
  220|    569|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  32.5k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  32.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.5k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  32.5k|    }
  228|   561k|    return p;
  229|   561k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj17EE8is_inertEv:
  155|  32.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj17EE8get_dataEv:
  153|  65.1k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj17EE11call_createIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS4_Lj17EEEEPT_v:
  158|  32.5k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E6createEPS4_:
  252|  32.5k|  {
  253|  32.5k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  32.5k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  32.5k|    if (likely (p))
  ------------------
  |  |  258|  32.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 31.9k, False: 569]
  |  |  ------------------
  ------------------
  255|  31.9k|      p = new (p) Stored (data);
  256|  32.5k|    return p;
  257|  32.5k|  }
hb-ot-font.cc:_ZL14StructAtOffsetIKN3CFF7TopDictEERKT_PKvj:
   47|  1.24k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF5SubrsIN2OT7IntTypeIjLj4EEEEEERKT_PKvj:
   47|  1.35k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF18CFF2VariationStoreEERKT_PKvj:
   47|     64|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEEEERKT_PKvj:
   47|  1.09k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF11CFF2FDArrayEERKT_PKvj:
   47|  1.08k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN3CFF12CFF2FDSelectEERKT_PKvj:
   47|     61|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL11StructAfterIN2OT7IntTypeIjLj4EEEN3CFF17FDSelect3_4_RangeIS2_NS1_ItLj2EEEEEERKT_RKT0_:
   72|      3|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIN2OT7IntTypeIjLj4EEEERKT_PKvj:
   47|      3|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18cff2_accelerator_tE21hb_face_lazy_loader_tIS1_Lj17EE9hb_face_tLj17ES1_E7cmpexchEPS1_S6_:
  236|  32.5k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  32.5k|    return this->instance.cmpexch (current, value);
  240|  32.5k|  }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT20SortedUnsizedArrayOfINS0_15BaseGlyphRecordEEEERKT_PKvj:
   47|  1.56k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_11LayerRecordEEEERKT_PKvj:
   47|     20|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT5PaintEERKT_PKvj:
   47|  1.44M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT8ClipListEERKT_PKvj:
   47|  8.65k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT7ClipBoxEERKT_PKvj:
   47|    599|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT9LayerListEERKT_PKvj:
   47|  15.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT9ColorLineINS0_10NoVariableEEEERKT_PKvj:
   47|  38.6k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT9ColorLineINS0_8VariableEEEERKT_PKvj:
   47|  12.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT10NoVariableINS0_9Affine2x3EEEERKT_PKvj:
   47|  1.40k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT8VariableINS0_9Affine2x3EEEERKT_PKvj:
   47|  1.98k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIKN2OT13IndexSubtableEERKT_PKvj:
   47|    210|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN2OT23GlyphBitmapDataFormat17EERKT_PKvj:
   47|     42|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-font.cc:_ZL14StructAtOffsetIN2OT23GlyphBitmapDataFormat18EERKT_PKvj:
   47|     34|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_EptEv:
  202|  66.4k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E3getEv:
  242|  66.4k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E7convertEPS1_:
  247|  66.4k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E10get_storedEv:
  210|  66.4k|  {
  211|  66.4k|  retry:
  212|  66.4k|    Stored *p = this->instance.get_acquire ();
  213|  66.4k|    if (unlikely (!p))
  ------------------
  |  |  259|  66.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 33.2k]
  |  |  ------------------
  ------------------
  214|  33.2k|    {
  215|  33.2k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     20|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 487, False: 32.7k]
  |  |  ------------------
  ------------------
  220|    487|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  66.4k|    return p;
  229|  66.4k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj7EE8is_inertEv:
  155|  33.2k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj7EE8get_dataEv:
  153|  66.4k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj7EE11call_createIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS4_Lj7EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.7k, False: 487]
  |  |  ------------------
  ------------------
  255|  32.7k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-font.cc:_ZL11StructAfterIhN2OT7ArrayOfINS0_7IntTypeItLj2EEES3_EEERKT_RKT0_:
   72|    375|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-font.cc:_ZL14StructAtOffsetIhERKT_PKvj:
   47|    375|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18post_accelerator_tE21hb_face_lazy_loader_tIS1_Lj7EE9hb_face_tLj7ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZN16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E13free_instanceEv:
  188|      1|  {
  189|      1|  retry:
  190|      1|    Stored *p = instance.get_acquire ();
  191|      1|    if (unlikely (p && !cmpexch (p, nullptr)))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 1, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  192|      0|      goto retry;
  193|      1|    do_destroy (p);
  194|      1|  }
_ZNK16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E7cmpexchEPS0_S3_:
  236|      2|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|      2|    return this->instance.cmpexch (current, value);
  240|      2|  }
_ZN16hb_lazy_loader_tI15hb_font_funcs_t30hb_ot_font_funcs_lazy_loader_tvLj0ES0_E10do_destroyEPS0_:
  197|      1|  {
  198|      1|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 1, False: 0]
  |  Branch (198:14): [True: 1, False: 0]
  ------------------
  199|      1|      Funcs::destroy (p);
  200|      1|  }
_ZN27hb_font_funcs_lazy_loader_tI30hb_ot_font_funcs_lazy_loader_tE7destroyEP15hb_font_funcs_t:
  312|      1|    { hb_##Type##_funcs_destroy (p); } \
hb-ot-layout.cc:_ZL11StructAfterIN2OT12KernSubTableINS0_20KernOTSubTableHeaderEEES3_ERKT_RKT0_:
   72|  41.4k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12KernSubTableINS0_20KernOTSubTableHeaderEEEERKT_PKvj:
   47|  41.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT12KernSubTableINS0_21KernAATSubTableHeaderEEES3_ERKT_RKT0_:
   72|  4.03k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12KernSubTableINS0_21KernAATSubTableHeaderEEEERKT_PKvj:
   47|  4.03k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout6Common8CoverageEERKT_PKvj:
   47|  44.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout6Common8CoverageEERKT_PKvj:
   47|  25.0M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIsLj2EEEEEERKT_PKvj:
   47|   346k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|   238k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN3AAT10ClassTableIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|   692k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEE10hb_array_tIKNS2_IsLj2EEEEERT_RT0_:
   75|  79.5k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL11StructAfterIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEE10hb_array_tIKS3_EERT_RT0_:
   75|   159k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT8ClassDefEERKT_PKvj:
   47|   807k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT12LigCaretListEERKT_PKvj:
   47|    270|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT8LigGlyphEERKT_PKvj:
   47|      3|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6DeviceEERKT_PKvj:
   47|  1.52k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT18RecordListOfScriptEERKT_PKvj:
   47|   569k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT12RecordListOfINS0_7FeatureEEEERKT_PKvj:
   47|  9.87M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6ScriptEERKT_PKvj:
   47|   413k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT7LangSysEERKT_PKvj:
   47|   390k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  7.88M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeIjLj3EEEEEERKT_PKvj:
   47|  69.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT7FeatureEERKT_PKvj:
   47|  90.8k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT17FeatureVariationsEERKT_PKvj:
   47|  48.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT24FeatureTableSubstitutionEERKT_PKvj:
   47|  34.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6LookupEERKT_PKvj:
   47|  4.66M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl19SubstLookupSubTableEERKT_PKvj:
   47|  5.22M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL23StructAtOffsetUnalignedIN2OT11HBGlyphID16EERKT_PKvj:
   53|   287k|{
   54|   287k|#pragma GCC diagnostic push
   55|   287k|#pragma GCC diagnostic ignored "-Wcast-align"
   56|   287k|  return * reinterpret_cast<const Type*> ((const char *) P + offset);
   57|   287k|#pragma GCC diagnostic pop
   58|   287k|}
hb-ot-layout.cc:_ZL23StructAtOffsetUnalignedIN2OT11HBGlyphID24EERKT_PKvj:
   53|  28.2k|{
   54|  28.2k|#pragma GCC diagnostic push
   55|  28.2k|#pragma GCC diagnostic ignored "-Wcast-align"
   56|  28.2k|  return * reinterpret_cast<const Type*> ((const char *) P + offset);
   57|  28.2k|#pragma GCC diagnostic pop
   58|  28.2k|}
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEEERKT_PKvj:
   47|  1.32M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEEERKT_PKvj:
   47|  5.21k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEEERKT_PKvj:
   47|   368k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEEERKT_PKvj:
   47|    993|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEEERKT_PKvj:
   47|  6.12M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEEERKT_PKvj:
   47|  1.70M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEEERKT_PKvj:
   47|   106k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEEERKT_PKvj:
   47|  76.6k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT14UnsizedArrayOfINS0_12LookupRecordEEE10hb_array_tIKNS0_7IntTypeItLj2EEEEERKT_RKT0_:
   72|  1.88M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_12LookupRecordEEEERKT_PKvj:
   47|  1.91M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT4RuleINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|  1.78M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT7RuleSetINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|   812k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT12LookupRecordE10hb_array_tIKNS0_8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEEEERKT_RKT0_:
   72|   200k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12LookupRecordEERKT_PKvj:
   47|   200k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT14UnsizedArrayOfINS0_12LookupRecordEEE10hb_array_tIKNS0_7IntTypeIjLj3EEEEERKT_RKT0_:
   72|  29.6k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT4RuleINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  27.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT7RuleSetINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  27.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT15HeadlessArrayOfINS0_7IntTypeItLj2EEES3_EENS0_7ArrayOfIS3_S3_EEERKT_RKT0_:
   72|  7.46M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT15HeadlessArrayOfINS0_7IntTypeItLj2EEES3_EEERKT_PKvj:
   47|  7.46M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_7IntTypeItLj2EEES3_EENS0_15HeadlessArrayOfIS3_S3_EEERKT_RKT0_:
   72|  7.46M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_7IntTypeItLj2EEES3_EEERKT_PKvj:
   47|  7.46M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_12LookupRecordENS0_7IntTypeItLj2EEEEENS1_IS4_S4_EEERKT_RKT0_:
   72|  7.46M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_12LookupRecordENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  8.10M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT9ChainRuleINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|  2.02M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT12ChainRuleSetINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|   478k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEES7_EES9_ERKT_RKT0_:
   72|  1.92M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeItLj2EEELb1EEES7_EEERKT_PKvj:
   47|  1.92M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_12LookupRecordENS0_7IntTypeItLj2EEEEENS1_INS0_8OffsetToINS0_6Layout6Common8CoverageES4_Lb1EEES4_EEERKT_RKT0_:
   72|  60.9k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT15HeadlessArrayOfINS0_7IntTypeIjLj3EEENS2_ItLj2EEEEENS0_7ArrayOfIS3_S4_EEERKT_RKT0_:
   72|   572k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT15HeadlessArrayOfINS0_7IntTypeIjLj3EEENS2_ItLj2EEEEEERKT_PKvj:
   47|   572k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_7IntTypeIjLj3EEENS2_ItLj2EEEEENS0_15HeadlessArrayOfIS3_S4_EEERKT_RKT0_:
   72|   571k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_7IntTypeIjLj3EEENS2_ItLj2EEEEEERKT_PKvj:
   47|   571k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_12LookupRecordENS0_7IntTypeItLj2EEEEENS1_INS3_IjLj3EEES4_EEERKT_RKT0_:
   72|   571k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT9ChainRuleINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|   394k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT12ChainRuleSetINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|   416k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7ArrayOfINS0_11HBGlyphID16ENS0_7IntTypeItLj2EEEEENS1_INS0_8OffsetToINS0_6Layout6Common8CoverageES4_Lb1EEES4_EEERKT_RKT0_:
   72|  1.79M|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7ArrayOfINS0_11HBGlyphID16ENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  1.79M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl17PosLookupSubTableEERKT_PKvj:
   47|   342k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEEERKT_PKvj:
   47|   612k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEEERKT_PKvj:
   47|   142k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT12ConditionSetEERKT_PKvj:
   47|  3.17k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT9ConditionEERKT_PKvj:
   47|  2.14k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT13FeatureParamsEERKT_PKvj:
   47|     19|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_EdeIS1_LPv0EEERKT_v:
  204|   553k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E3getEv:
  242|  8.34M|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E10get_storedEv:
  210|  8.34M|  {
  211|  8.34M|  retry:
  212|  8.34M|    Stored *p = this->instance.get_acquire ();
  213|  8.34M|    if (unlikely (!p))
  ------------------
  |  |  259|  8.34M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.8k, False: 8.30M]
  |  |  ------------------
  ------------------
  214|  33.8k|    {
  215|  33.8k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 588, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    588|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 346, False: 32.9k]
  |  |  ------------------
  ------------------
  220|    346|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  8.34M|    return p;
  229|  8.34M|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj25EE8is_inertEv:
  155|  33.8k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj25EE8get_dataEv:
  153|  67.0k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj25EE11call_createIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS4_Lj25EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.9k, False: 346]
  |  |  ------------------
  ------------------
  255|  32.9k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7LangSysEERKT_PKvj:
   47|   715k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6ScriptEERKT_PKvj:
   47|  67.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT18RecordListOfScriptEERKT_PKvj:
   47|  39.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT13FeatureParamsEERKT_PKvj:
   47|   194k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7FeatureEERKT_PKvj:
   47|   312k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12RecordListOfINS0_7FeatureEEEERKT_PKvj:
   47|  33.0k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL11StructAfterIN2OT7IntTypeItLj2EEENS0_7ArrayOfINS0_6OffsetIS2_Lb1EEES2_EEERKT_RKT0_:
   72|   200k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7IntTypeItLj2EEEERKT_PKvj:
   47|   200k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEEERKT_PKvj:
   47|  94.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEEERKT_PKvj:
   47|  16.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEEERKT_PKvj:
   47|  67.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEEERKT_PKvj:
   47|  3.03k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEEERKT_PKvj:
   47|   155k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEEERKT_PKvj:
   47|  45.1k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEEERKT_PKvj:
   47|  24.5k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEEERKT_PKvj:
   47|  7.82k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT4RuleINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|   119k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7RuleSetINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|  45.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT4RuleINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  4.46k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT7RuleSetINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  2.95k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT9ChainRuleINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|   398k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12ChainRuleSetINS0_6Layout10SmallTypesEEEERKT_PKvj:
   47|  35.5k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT9ChainRuleINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  80.5k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12ChainRuleSetINS0_6Layout11MediumTypesEEEERKT_PKvj:
   47|  4.59k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl19SubstLookupSubTableEERKT_PKvj:
   47|  2.59M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GSUB_impl11SubstLookupEERKT_PKvj:
   47|   130k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT16List16OfOffsetToINS0_6Layout9GSUB_impl11SubstLookupENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  20.1k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT9ConditionEERKT_PKvj:
   47|  3.88k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT12ConditionSetEERKT_PKvj:
   47|  3.15k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT24FeatureTableSubstitutionEERKT_PKvj:
   47|  3.04k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT17FeatureVariationsEERKT_PKvj:
   47|  2.17k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT16List16OfOffsetToINS0_6Layout9GSUB_impl11SubstLookupENS0_7IntTypeIjLj3EEEEEERKT_PKvj:
   47|    251|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_EdeIS1_LPv0EEERKT_v:
  204|  85.9k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E3getEv:
  242|  2.58M|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E10get_storedEv:
  210|  2.58M|  {
  211|  2.58M|  retry:
  212|  2.58M|    Stored *p = this->instance.get_acquire ();
  213|  2.58M|    if (unlikely (!p))
  ------------------
  |  |  259|  2.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.5k, False: 2.55M]
  |  |  ------------------
  ------------------
  214|  33.5k|    {
  215|  33.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 327, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    327|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 435, False: 32.8k]
  |  |  ------------------
  ------------------
  220|    435|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  2.58M|    return p;
  229|  2.58M|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj26EE8is_inertEv:
  155|  33.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj26EE8get_dataEv:
  153|  66.8k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj26EE11call_createIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS4_Lj26EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.8k, False: 435]
  |  |  ------------------
  ------------------
  255|  32.8k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT7IntTypeItLj2EEEERKT_PKvj:
   47|  4.73M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEEERKT_PKvj:
   47|  49.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEEERKT_PKvj:
   47|  3.87k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl6AnchorEERKT_PKvj:
   47|  13.6M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl9MarkArrayEERKT_PKvj:
   47|  16.7k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl12AnchorMatrixEERKT_PKvj:
   47|  1.59M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl13LigatureArrayEERKT_PKvj:
   47|  4.72k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl17PosLookupSubTableEERKT_PKvj:
   47|  2.17M|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6Layout9GPOS_impl9PosLookupEERKT_PKvj:
   47|  95.2k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT16List16OfOffsetToINS0_6Layout9GPOS_impl9PosLookupENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  13.4k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT16List16OfOffsetToINS0_6Layout9GPOS_impl9PosLookupENS0_7IntTypeIjLj3EEEEEERKT_PKvj:
   47|    284|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT4AxisEERKT_PKvj:
   47|    172|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT14BaseScriptListEERKT_PKvj:
   47|    159|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT10BaseScriptEERKT_PKvj:
   47|      9|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT13SortedArrayOfINS0_3TagENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|      8|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tEptEv:
  202|  48.8k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE3getEv:
  242|  48.8k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EE7convertEPK9hb_blob_t:
  302|  48.8k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE10get_storedEv:
  210|  53.8k|  {
  211|  53.8k|  retry:
  212|  53.8k|    Stored *p = this->instance.get_acquire ();
  213|  53.8k|    if (unlikely (!p))
  ------------------
  |  |  259|  53.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.5k, False: 22.3k]
  |  |  ------------------
  ------------------
  214|  31.5k|    {
  215|  31.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  31.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 31.5k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  31.5k|      p = this->template call_create<Stored, Funcs> ();
  219|  31.5k|      if (unlikely (!p))
  ------------------
  |  |  259|  31.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 31.5k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  31.5k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  31.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 31.5k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  31.5k|    }
  228|  53.8k|    return p;
  229|  53.8k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj23EE8is_inertEv:
  155|  31.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj23EE8get_dataEv:
  153|  63.1k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj23EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EEEEPT_v:
  158|  31.5k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EE6createEP9hb_face_t:
  290|  31.5k|  {
  291|  31.5k|    auto c = hb_sanitize_context_t ();
  292|  31.5k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  31.5k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  31.5k|    return c.reference_table<T> (face);
  295|  31.5k|  }
hb-ot-layout.cc:_ZL14StructAtOffsetIN3AAT10ClassTableIN2OT7IntTypeItLj2EEEEEERKT_PKvj:
   47|    306|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4kernE22hb_table_lazy_loader_tIS1_Lj23ELb1EE9hb_face_tLj23E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  31.5k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  31.5k|    return this->instance.cmpexch (current, value);
  240|  31.5k|  }
_ZNK22hb_table_lazy_loader_tIN2OT4kernELj23ELb1EE8get_blobEv:
  304|  5.02k|  hb_blob_t* get_blob () const { return this->get_stored (); }
_ZNK16hb_lazy_loader_tIN2OT18GSUB_accelerator_tE21hb_face_lazy_loader_tIS1_Lj25EE9hb_face_tLj25ES1_EptEv:
  202|  7.78M|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18GPOS_accelerator_tE21hb_face_lazy_loader_tIS1_Lj26EE9hb_face_tLj26ES1_EptEv:
  202|  2.50M|  const Returned * operator -> () const { return get (); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl6AnchorEERKT_PKvj:
   47|   534k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl9MarkArrayEERKT_PKvj:
   47|  93.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl12AnchorMatrixEERKT_PKvj:
   47|   122k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIKN2OT6Layout9GPOS_impl13LigatureArrayEERKT_PKvj:
   47|  65.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tEptEv:
  202|  33.3k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE3getEv:
  242|  33.3k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4BASEELj27ELb1EE7convertEPK9hb_blob_t:
  302|  33.3k|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE10get_storedEv:
  210|  33.3k|  {
  211|  33.3k|  retry:
  212|  33.3k|    Stored *p = this->instance.get_acquire ();
  213|  33.3k|    if (unlikely (!p))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 0]
  |  |  ------------------
  ------------------
  214|  33.3k|    {
  215|  33.3k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 87, False: 33.2k]
  |  |  ------------------
  ------------------
  216|     87|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  33.2k|    return p;
  229|  33.3k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj27EE8is_inertEv:
  155|  33.3k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj27EE8get_dataEv:
  153|  66.5k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj27EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4BASEELj27ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4BASEELj27ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT13SortedArrayOfINS0_3TagENS0_7IntTypeItLj2EEEEEERKT_PKvj:
   47|  1.06k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT9BaseCoordEERKT_PKvj:
   47|  10.9k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT10BaseValuesEERKT_PKvj:
   47|  4.34k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT6MinMaxEERKT_PKvj:
   47|  81.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT10BaseScriptEERKT_PKvj:
   47|  18.6k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT14BaseScriptListEERKT_PKvj:
   47|  1.03k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-layout.cc:_ZL14StructAtOffsetIN2OT4AxisEERKT_PKvj:
   47|  1.19k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4BASEE22hb_table_lazy_loader_tIS1_Lj27ELb1EE9hb_face_tLj27E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT13MathConstantsEERKT_PKvj:
   47|  4.64k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT6DeviceEERKT_PKvj:
   47|  2.26k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT13MathGlyphInfoEERKT_PKvj:
   47|  1.95k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT25MathItalicsCorrectionInfoEERKT_PKvj:
   47|    140|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT6Layout6Common8CoverageEERKT_PKvj:
   47|  1.55k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT23MathTopAccentAttachmentEERKT_PKvj:
   47|    196|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT12MathKernInfoEERKT_PKvj:
   47|    549|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT8MathKernEERKT_PKvj:
   47|    120|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT12MathVariantsEERKT_PKvj:
   47|  2.00k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT21MathGlyphConstructionEERKT_PKvj:
   47|     50|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIKN2OT17MathGlyphAssemblyEERKT_PKvj:
   47|     21|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tEptEv:
  202|  2.33M|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE3getEv:
  242|  2.33M|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN22hb_table_lazy_loader_tIN2OT4MATHELj40ELb1EE7convertEPK9hb_blob_t:
  302|  2.33M|  { return blob->as<T> (); }
_ZNK16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE10get_storedEv:
  210|  2.33M|  {
  211|  2.33M|  retry:
  212|  2.33M|    Stored *p = this->instance.get_acquire ();
  213|  2.33M|    if (unlikely (!p))
  ------------------
  |  |  259|  2.33M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39.3k, False: 2.29M]
  |  |  ------------------
  ------------------
  214|  39.3k|    {
  215|  39.3k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  39.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.09k, False: 33.2k]
  |  |  ------------------
  ------------------
  216|  6.09k|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  2.32M|    return p;
  229|  2.33M|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj40EE8is_inertEv:
  155|  39.3k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj40EE8get_dataEv:
  153|  72.5k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj40EE11call_createI9hb_blob_t22hb_table_lazy_loader_tIN2OT4MATHELj40ELb1EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN22hb_table_lazy_loader_tIN2OT4MATHELj40ELb1EE6createEP9hb_face_t:
  290|  33.2k|  {
  291|  33.2k|    auto c = hb_sanitize_context_t ();
  292|  33.2k|    if (core)
  ------------------
  |  Branch (292:9): [Folded - Ignored]
  ------------------
  293|  33.2k|      c.set_num_glyphs (0); // So we don't recurse ad infinitum, or doesn't need num_glyphs
  294|  33.2k|    return c.reference_table<T> (face);
  295|  33.2k|  }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT13MathConstantsEERKT_PKvj:
   47|    942|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT25MathItalicsCorrectionInfoEERKT_PKvj:
   47|    707|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT23MathTopAccentAttachmentEERKT_PKvj:
   47|    778|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT8MathKernEERKT_PKvj:
   47|  6.94k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT12MathKernInfoEERKT_PKvj:
   47|    700|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT13MathGlyphInfoEERKT_PKvj:
   47|  1.14k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT17MathGlyphAssemblyEERKT_PKvj:
   47|  6.64k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT21MathGlyphConstructionEERKT_PKvj:
   47|  11.3k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-math.cc:_ZL14StructAtOffsetIN2OT12MathVariantsEERKT_PKvj:
   47|    859|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4MATHE22hb_table_lazy_loader_tIS1_Lj40ELb1EE9hb_face_tLj40E9hb_blob_tE7cmpexchEPS5_S7_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_EptEv:
  202|  66.6k|  const Returned * operator -> () const { return get (); }
_ZNK16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E3getEv:
  242|  66.6k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E7convertEPS1_:
  247|  66.6k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E10get_storedEv:
  210|  66.6k|  {
  211|  66.6k|  retry:
  212|  66.6k|    Stored *p = this->instance.get_acquire ();
  213|  66.6k|    if (unlikely (!p))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.4k, False: 33.2k]
  |  |  ------------------
  ------------------
  214|  33.4k|    {
  215|  33.4k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 174, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    174|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 637, False: 32.6k]
  |  |  ------------------
  ------------------
  220|    637|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|  66.5k|    return p;
  229|  66.6k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj10EE8is_inertEv:
  155|  33.4k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj10EE8get_dataEv:
  153|  66.6k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj10EE11call_createIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS4_Lj10EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.6k, False: 637]
  |  |  ------------------
  ------------------
  255|  32.6k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
_ZNK16hb_lazy_loader_tIN2OT18meta_accelerator_tE21hb_face_lazy_loader_tIS1_Lj10EE9hb_face_tLj10ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
hb-ot-metrics.cc:_ZL14StructAtOffsetIKN2OT14VariationStoreEERKT_PKvj:
   47|    124|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT4MVARE22hb_table_lazy_loader_tIS1_Lj22ELb1EE9hb_face_tLj22E9hb_blob_tEptEv:
  202|   107k|  const Returned * operator -> () const { return get (); }
hb-ot-metrics.cc:_ZL14StructAtOffsetIN2OT14VariationStoreEERKT_PKvj:
   47|    358|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_EdeIS1_LPv0EEERKT_v:
  204|   133k|  const U & operator * () const  { return *get (); }
_ZNK16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E3getEv:
  242|   133k|  const Returned * get () const { return Funcs::convert (get_stored ()); }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E7convertEPS1_:
  247|   133k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E10get_storedEv:
  210|   133k|  {
  211|   133k|  retry:
  212|   133k|    Stored *p = this->instance.get_acquire ();
  213|   133k|    if (unlikely (!p))
  ------------------
  |  |  259|   133k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.5k, False: 99.7k]
  |  |  ------------------
  ------------------
  214|  33.5k|    {
  215|  33.5k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 348, False: 33.2k]
  |  |  ------------------
  ------------------
  216|    348|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.2k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.2k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 589, False: 32.6k]
  |  |  ------------------
  ------------------
  220|    589|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.2k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.2k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.2k|    }
  228|   133k|    return p;
  229|   133k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj8EE8is_inertEv:
  155|  33.5k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj8EE8get_dataEv:
  153|  66.8k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_face_tLj8EE11call_createIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS4_Lj8EEEEPT_v:
  158|  33.2k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZN16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E6createEPS4_:
  252|  33.2k|  {
  253|  33.2k|    Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
  ------------------
  |  |  234|  33.2k|#define hb_calloc hb_calloc_impl
  ------------------
  254|  33.2k|    if (likely (p))
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.6k, False: 589]
  |  |  ------------------
  ------------------
  255|  32.6k|      p = new (p) Stored (data);
  256|  33.2k|    return p;
  257|  33.2k|  }
hb-ot-name.cc:_ZL14StructAtOffsetIKN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|  33.5k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-name.cc:_ZL14StructAtOffsetIN2OT14UnsizedArrayOfINS0_7IntTypeIhLj1EEEEEERKT_PKvj:
   47|   581k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tIN2OT18name_accelerator_tE21hb_face_lazy_loader_tIS1_Lj8EE9hb_face_tLj8ES1_E7cmpexchEPS1_S6_:
  236|  33.2k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.2k|    return this->instance.cmpexch (current, value);
  240|  33.2k|  }
hb-ot-var.cc:_ZL11StructAfterIN2OT11SegmentMapsES1_ERKT_RKT0_:
   72|  1.73k|{ return StructAtOffset<Type>(&X, X.get_size()); }
hb-ot-var.cc:_ZL14StructAtOffsetIN2OT11SegmentMapsEERKT_PKvj:
   47|  1.73k|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-var.cc:_ZL14StructAtOffsetIKN2OT16DeltaSetIndexMapEERKT_PKvj:
   47|     22|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-var.cc:_ZL14StructAtOffsetIKN2OT14VariationStoreEERKT_PKvj:
   47|     18|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_EcvbEv:
  206|   565k|  { return get_stored () != Funcs::get_null (); }
_ZNK16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E10get_storedEv:
  210|   565k|  {
  211|   565k|  retry:
  212|   565k|    Stored *p = this->instance.get_acquire ();
  213|   565k|    if (unlikely (!p))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.0k, False: 531k]
  |  |  ------------------
  ------------------
  214|  33.0k|    {
  215|  33.0k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.0k]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.0k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.0k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.0k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.0k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.0k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.0k|    }
  228|   565k|    return p;
  229|   565k|  }
_ZNK17hb_data_wrapper_tI9hb_font_tLj1EE8is_inertEv:
  155|  33.0k|  bool is_inert () const { return !get_data (); }
_ZNK17hb_data_wrapper_tI9hb_font_tLj1EE8get_dataEv:
  153|  66.1k|  { return *(((Data **) (void *) this) - WheresData); }
_ZNK17hb_data_wrapper_tI9hb_font_tLj1EE11call_createI17hb_ot_font_data_t23hb_shaper_lazy_loader_tIS0_Lj1ES3_EEEPT_v:
  158|  33.0k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZNK16hb_lazy_loader_tI17hb_ot_font_data_t23hb_shaper_lazy_loader_tI9hb_font_tLj1ES0_ES2_Lj1ES0_E7cmpexchEPS0_S5_:
  236|  33.0k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.0k|    return this->instance.cmpexch (current, value);
  240|  33.0k|  }
_ZNK16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_EcvbEv:
  206|   615k|  { return get_stored () != Funcs::get_null (); }
_ZNK16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E10get_storedEv:
  210|   615k|  {
  211|   615k|  retry:
  212|   615k|    Stored *p = this->instance.get_acquire ();
  213|   615k|    if (unlikely (!p))
  ------------------
  |  |  259|   615k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 581k]
  |  |  ------------------
  ------------------
  214|  33.3k|    {
  215|  33.3k|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 33.1k]
  |  |  ------------------
  ------------------
  216|    153|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|  33.1k|      p = this->template call_create<Stored, Funcs> ();
  219|  33.1k|      if (unlikely (!p))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|  33.1k|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|  33.1k|    }
  228|   614k|    return p;
  229|   615k|  }
_ZNK17hb_data_wrapper_tI9hb_face_tLj1EE11call_createI17hb_ot_face_data_t23hb_shaper_lazy_loader_tIS0_Lj1ES3_EEEPT_v:
  158|  33.1k|  Stored * call_create () const { return Subclass::create (get_data ()); }
_ZNK16hb_lazy_loader_tI17hb_ot_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj1ES0_ES2_Lj1ES0_E7cmpexchEPS0_S5_:
  236|  33.1k|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|  33.1k|    return this->instance.cmpexch (current, value);
  240|  33.1k|  }
_ZNK16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_EcvbEv:
  206|    153|  { return get_stored () != Funcs::get_null (); }
_ZNK16hb_lazy_loader_tI23hb_fallback_face_data_t23hb_shaper_lazy_loader_tI9hb_face_tLj2ES0_ES2_Lj2ES0_E10get_storedEv:
  210|    153|  {
  211|    153|  retry:
  212|    153|    Stored *p = this->instance.get_acquire ();
  213|    153|    if (unlikely (!p))
  ------------------
  |  |  259|    153|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 0]
  |  |  ------------------
  ------------------
  214|    153|    {
  215|    153|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|    153|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 0]
  |  |  ------------------
  ------------------
  216|    153|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      0|      p = this->template call_create<Stored, Funcs> ();
  219|      0|      if (unlikely (!p))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      0|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      0|    }
  228|      0|    return p;
  229|    153|  }
_ZNK16hb_lazy_loader_tI17hb_shaper_entry_t24hb_shapers_lazy_loader_tvLj0ES0_E11get_unconstEv:
  244|   615k|  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
_ZN16hb_lazy_loader_tI17hb_shaper_entry_t24hb_shapers_lazy_loader_tvLj0ES0_E7convertEPS0_:
  247|   615k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tI17hb_shaper_entry_t24hb_shapers_lazy_loader_tvLj0ES0_E10get_storedEv:
  210|   615k|  {
  211|   615k|  retry:
  212|   615k|    Stored *p = this->instance.get_acquire ();
  213|   615k|    if (unlikely (!p))
  ------------------
  |  |  259|   615k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 615k]
  |  |  ------------------
  ------------------
  214|      1|    {
  215|      1|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      1|      p = this->template call_create<Stored, Funcs> ();
  219|      1|      if (unlikely (!p))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  220|      1|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      1|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      1|    }
  228|   615k|    return p;
  229|   615k|  }
_ZNK17hb_data_wrapper_tIvLj0EE11call_createI17hb_shaper_entry_t24hb_shapers_lazy_loader_tEEPT_v:
  166|      1|  Stored * call_create () const { return Funcs::create (); }
_ZNK16hb_lazy_loader_tI17hb_shaper_entry_t24hb_shapers_lazy_loader_tvLj0ES0_E7cmpexchEPS0_S3_:
  236|      1|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|      1|    return this->instance.cmpexch (current, value);
  240|      1|  }
_ZNK16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E11get_unconstEv:
  244|  11.1k|  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
_ZN16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E7convertEPS0_:
  247|  11.1k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E10get_storedEv:
  210|  11.1k|  {
  211|  11.1k|  retry:
  212|  11.1k|    Stored *p = this->instance.get_acquire ();
  213|  11.1k|    if (unlikely (!p))
  ------------------
  |  |  259|  11.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 11.1k]
  |  |  ------------------
  ------------------
  214|      1|    {
  215|      1|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      1|      p = this->template call_create<Stored, Funcs> ();
  219|      1|      if (unlikely (!p))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      1|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      1|    }
  228|  11.1k|    return p;
  229|  11.1k|  }
_ZN28hb_paint_funcs_lazy_loader_tI36hb_paint_extents_funcs_lazy_loader_tE8get_nullEv:
  314|      1|    { return hb_##Type##_funcs_get_empty (); } \
_ZNK17hb_data_wrapper_tIvLj0EE11call_createI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tEEPT_v:
  166|      1|  Stored * call_create () const { return Funcs::create (); }
_ZNK16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E11get_unconstEv:
  244|   106k|  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
_ZN16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E7convertEPS0_:
  247|   106k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E10get_storedEv:
  210|   106k|  {
  211|   106k|  retry:
  212|   106k|    Stored *p = this->instance.get_acquire ();
  213|   106k|    if (unlikely (!p))
  ------------------
  |  |  259|   106k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 106k]
  |  |  ------------------
  ------------------
  214|      1|    {
  215|      1|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      1|      p = this->template call_create<Stored, Funcs> ();
  219|      1|      if (unlikely (!p))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      1|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      1|    }
  228|   106k|    return p;
  229|   106k|  }
_ZN27hb_draw_funcs_lazy_loader_tI35hb_draw_extents_funcs_lazy_loader_tE8get_nullEv:
  314|      1|    { return hb_##Type##_funcs_get_empty (); } \
_ZNK17hb_data_wrapper_tIvLj0EE11call_createI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tEEPT_v:
  166|      1|  Stored * call_create () const { return Funcs::create (); }
_ZN16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E13free_instanceEv:
  188|      1|  {
  189|      1|  retry:
  190|      1|    Stored *p = instance.get_acquire ();
  191|      1|    if (unlikely (p && !cmpexch (p, nullptr)))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 1, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  192|      0|      goto retry;
  193|      1|    do_destroy (p);
  194|      1|  }
_ZNK16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E7cmpexchEPS0_S3_:
  236|      2|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|      2|    return this->instance.cmpexch (current, value);
  240|      2|  }
_ZN16hb_lazy_loader_tI15hb_draw_funcs_t35hb_draw_extents_funcs_lazy_loader_tvLj0ES0_E10do_destroyEPS0_:
  197|      1|  {
  198|      1|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 1, False: 0]
  |  Branch (198:14): [True: 1, False: 0]
  ------------------
  199|      1|      Funcs::destroy (p);
  200|      1|  }
_ZN27hb_draw_funcs_lazy_loader_tI35hb_draw_extents_funcs_lazy_loader_tE7destroyEP15hb_draw_funcs_t:
  312|      1|    { hb_##Type##_funcs_destroy (p); } \
_ZN16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E13free_instanceEv:
  188|      1|  {
  189|      1|  retry:
  190|      1|    Stored *p = instance.get_acquire ();
  191|      1|    if (unlikely (p && !cmpexch (p, nullptr)))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 1, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  192|      0|      goto retry;
  193|      1|    do_destroy (p);
  194|      1|  }
_ZNK16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E7cmpexchEPS0_S3_:
  236|      2|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|      2|    return this->instance.cmpexch (current, value);
  240|      2|  }
_ZN16hb_lazy_loader_tI16hb_paint_funcs_t36hb_paint_extents_funcs_lazy_loader_tvLj0ES0_E10do_destroyEPS0_:
  197|      1|  {
  198|      1|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 1, False: 0]
  |  Branch (198:14): [True: 1, False: 0]
  ------------------
  199|      1|      Funcs::destroy (p);
  200|      1|  }
_ZN28hb_paint_funcs_lazy_loader_tI36hb_paint_extents_funcs_lazy_loader_tE7destroyEP16hb_paint_funcs_t:
  312|      1|    { hb_##Type##_funcs_destroy (p); } \
hb-ot-cff2-table.cc:_ZL14StructAtOffsetIKN2OT7VarDataEERKT_PKvj:
   47|     65|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
hb-ot-cff2-table.cc:_ZL14StructAtOffsetIKN2OT13VarRegionListEERKT_PKvj:
   47|     39|{ return * reinterpret_cast<const Type*> ((const char *) P + offset); }
_ZNK16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E11get_unconstEv:
  244|   154k|  Returned * get_unconst () const { return const_cast<Returned *> (Funcs::convert (get_stored ())); }
_ZN16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E7convertEPS0_:
  247|   154k|  static Returned* convert (Stored *p) { return p; }
_ZNK16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E10get_storedEv:
  210|   154k|  {
  211|   154k|  retry:
  212|   154k|    Stored *p = this->instance.get_acquire ();
  213|   154k|    if (unlikely (!p))
  ------------------
  |  |  259|   154k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 154k]
  |  |  ------------------
  ------------------
  214|      1|    {
  215|      1|      if (unlikely (this->is_inert ()))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|	return const_cast<Stored *> (Funcs::get_null ());
  217|       |
  218|      1|      p = this->template call_create<Stored, Funcs> ();
  219|      1|      if (unlikely (!p))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  220|      0|	p = const_cast<Stored *> (Funcs::get_null ());
  221|       |
  222|      1|      if (unlikely (!cmpexch (nullptr, p)))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  223|      0|      {
  224|      0|	do_destroy (p);
  225|      0|	goto retry;
  226|      0|      }
  227|      1|    }
  228|   154k|    return p;
  229|   154k|  }
_ZN30hb_unicode_funcs_lazy_loader_tI34hb_ucd_unicode_funcs_lazy_loader_tE8get_nullEv:
  314|      1|    { return hb_##Type##_funcs_get_empty (); } \
_ZNK17hb_data_wrapper_tIvLj0EE11call_createI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tEEPT_v:
  166|      1|  Stored * call_create () const { return Funcs::create (); }
_ZN16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E13free_instanceEv:
  188|      1|  {
  189|      1|  retry:
  190|      1|    Stored *p = instance.get_acquire ();
  191|      1|    if (unlikely (p && !cmpexch (p, nullptr)))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 1, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  192|      0|      goto retry;
  193|      1|    do_destroy (p);
  194|      1|  }
_ZNK16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E7cmpexchEPS0_S3_:
  236|      2|  {
  237|       |    /* This function can only be safely called directly if no
  238|       |     * other thread is accessing. */
  239|      2|    return this->instance.cmpexch (current, value);
  240|      2|  }
_ZN16hb_lazy_loader_tI18hb_unicode_funcs_t34hb_ucd_unicode_funcs_lazy_loader_tvLj0ES0_E10do_destroyEPS0_:
  197|      1|  {
  198|      1|    if (p && p != const_cast<Stored *> (Funcs::get_null ()))
  ------------------
  |  Branch (198:9): [True: 1, False: 0]
  |  Branch (198:14): [True: 1, False: 0]
  ------------------
  199|      1|      Funcs::destroy (p);
  200|      1|  }
_ZN30hb_unicode_funcs_lazy_loader_tI34hb_ucd_unicode_funcs_lazy_loader_tE7destroyEP18hb_unicode_funcs_t:
  312|      1|    { hb_##Type##_funcs_destroy (p); } \

hb_map_create:
   53|  33.3k|{
   54|  33.3k|  hb_map_t *map;
   55|       |
   56|  33.3k|  if (!(map = hb_object_create<hb_map_t> ()))
  ------------------
  |  Branch (56:7): [True: 460, False: 32.8k]
  ------------------
   57|    460|    return hb_map_get_empty ();
   58|       |
   59|  32.8k|  return map;
   60|  33.3k|}
hb_map_get_empty:
   73|    460|{
   74|    460|  return const_cast<hb_map_t *> (&Null (hb_map_t));
  ------------------
  |  |  124|    460|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
   75|    460|}
hb_map_destroy:
  105|  33.3k|{
  106|  33.3k|  if (!hb_object_destroy (map)) return;
  ------------------
  |  Branch (106:7): [True: 460, False: 32.8k]
  ------------------
  107|       |
  108|  32.8k|  hb_free (map);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
  109|  32.8k|}
hb_map_set:
  206|  33.3k|{
  207|       |  /* Immutable-safe. */
  208|  33.3k|  map->set (key, value);
  209|  33.3k|}

_ZN8hb_map_tC2Ev:
  509|  32.8k|  hb_map_t () : hashmap () {}
_ZN12hb_hashmap_tIjjLb1EE4initEv:
  131|  32.8k|  {
  132|  32.8k|    hb_object_init (this);
  133|       |
  134|  32.8k|    successful = true;
  135|  32.8k|    population = occupancy = 0;
  136|  32.8k|    mask = 0;
  137|  32.8k|    prime = 0;
  138|  32.8k|    max_chain_length = 0;
  139|  32.8k|    items = nullptr;
  140|  32.8k|  }
_ZN12hb_hashmap_tIjjLb1EE4finiEv:
  142|  32.8k|  {
  143|  32.8k|    hb_object_fini (this);
  144|       |
  145|  32.8k|    if (likely (items)) {
  ------------------
  |  |  258|  32.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 32.3k, False: 549]
  |  |  ------------------
  ------------------
  146|  32.3k|      unsigned size = mask + 1;
  147|   549k|      for (unsigned i = 0; i < size; i++)
  ------------------
  |  Branch (147:28): [True: 517k, False: 32.3k]
  ------------------
  148|   517k|        items[i].~item_t ();
  149|  32.3k|      hb_free (items);
  ------------------
  |  |  236|  32.3k|#define hb_free hb_free_impl
  ------------------
  150|  32.3k|      items = nullptr;
  151|  32.3k|    }
  152|  32.8k|    population = occupancy = 0;
  153|  32.8k|  }
_ZNK12hb_hashmap_tIjjLb1EE6item_t7is_usedEv:
   81|  64.6k|    bool is_used () const { return is_used_; }
_ZN12hb_hashmap_tIjjLb1EE6item_t8set_usedEb:
   82|  32.3k|    void set_used (bool is_used) { is_used_ = is_used; }
_ZN12hb_hashmap_tIjjLb1EE6item_t13set_tombstoneEb:
   84|  32.3k|    void set_tombstone (bool is_tombstone) { is_tombstone_ = is_tombstone; }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE4finiEv:
  142|  5.15k|  {
  143|  5.15k|    hb_object_fini (this);
  144|       |
  145|  5.15k|    if (likely (items)) {
  ------------------
  |  |  258|  5.15k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.54k, False: 3.61k]
  |  |  ------------------
  ------------------
  146|  1.54k|      unsigned size = mask + 1;
  147|  42.0k|      for (unsigned i = 0; i < size; i++)
  ------------------
  |  Branch (147:28): [True: 40.4k, False: 1.54k]
  ------------------
  148|  40.4k|        items[i].~item_t ();
  149|  1.54k|      hb_free (items);
  ------------------
  |  |  236|  1.54k|#define hb_free hb_free_impl
  ------------------
  150|  1.54k|      items = nullptr;
  151|  1.54k|    }
  152|  5.15k|    population = occupancy = 0;
  153|  5.15k|  }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE4initEv:
  131|  3.43k|  {
  132|  3.43k|    hb_object_init (this);
  133|       |
  134|  3.43k|    successful = true;
  135|  3.43k|    population = occupancy = 0;
  136|  3.43k|    mask = 0;
  137|  3.43k|    prime = 0;
  138|  3.43k|    max_chain_length = 0;
  139|  3.43k|    items = nullptr;
  140|  3.43k|  }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE13get_with_hashERKS3_j:
  259|  22.8k|  {
  260|  22.8k|    if (!items) return item_t::default_value ();
  ------------------
  |  Branch (260:9): [True: 1.63k, False: 21.2k]
  ------------------
  261|  21.2k|    auto *item = fetch_item (key, hb_hash (key));
  262|  21.2k|    if (item)
  ------------------
  |  Branch (262:9): [True: 7.26k, False: 13.9k]
  ------------------
  263|  7.26k|      return item->value;
  264|  13.9k|    return item_t::default_value ();
  265|  21.2k|  }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t13default_valueILb0ELPv0EEERKjv:
   89|  15.6k|    static inline const V& default_value () { return Null(V); };
  ------------------
  |  |  124|  15.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE10fetch_itemERKS3_j:
  298|  21.2k|  {
  299|  21.2k|    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
  300|  21.2k|    unsigned int i = hash % prime;
  301|  21.2k|    unsigned step = 0;
  302|  33.5k|    while (items[i].is_used ())
  ------------------
  |  Branch (302:12): [True: 19.5k, False: 13.9k]
  ------------------
  303|  19.5k|    {
  304|  19.5k|      if ((std::is_integral<K>::value || items[i].hash == hash) &&
  ------------------
  |  Branch (304:12): [Folded - Ignored]
  |  Branch (304:42): [True: 7.26k, False: 12.3k]
  ------------------
  305|  19.5k|	  items[i] == key)
  ------------------
  |  Branch (305:4): [True: 7.26k, False: 0]
  ------------------
  306|  7.26k|      {
  307|  7.26k|	if (items[i].is_real ())
  ------------------
  |  Branch (307:6): [True: 7.26k, False: 0]
  ------------------
  308|  7.26k|	  return &items[i];
  309|      0|	else
  310|      0|	  return nullptr;
  311|  7.26k|      }
  312|  12.3k|      i = (i + ++step) & mask;
  313|  12.3k|    }
  314|  13.9k|    return nullptr;
  315|  21.2k|  }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t7is_usedEv:
   81|  98.8k|    bool is_used () const { return is_used_; }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_teqERKS3_:
   98|  7.26k|    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t7is_realEv:
   85|  23.0k|    bool is_real () const { return is_used_ && !is_tombstone_; }
  ------------------
  |  Branch (85:36): [True: 17.4k, False: 5.58k]
  |  Branch (85:48): [True: 17.4k, False: 0]
  ------------------
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE13set_with_hashIRPS1_RjEEbOT_jOT0_:
  209|  15.5k|  {
  210|  15.5k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|  15.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 15.5k]
  |  |  ------------------
  ------------------
  211|  15.5k|    if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
  ------------------
  |  |  259|  17.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 15.5k]
  |  |  |  Branch (259:47): [True: 2.03k, False: 13.5k]
  |  |  |  Branch (259:47): [True: 44, False: 1.98k]
  |  |  ------------------
  ------------------
  212|       |
  213|  15.5k|    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
  214|  15.5k|    unsigned int tombstone = (unsigned int) -1;
  215|  15.5k|    unsigned int i = hash % prime;
  216|  15.5k|    unsigned length = 0;
  217|  15.5k|    unsigned step = 0;
  218|  26.9k|    while (items[i].is_used ())
  ------------------
  |  Branch (218:12): [True: 11.4k, False: 15.5k]
  ------------------
  219|  11.4k|    {
  220|  11.4k|      if ((std::is_integral<K>::value || items[i].hash == hash) &&
  ------------------
  |  Branch (220:12): [Folded - Ignored]
  |  Branch (220:42): [True: 0, False: 11.4k]
  ------------------
  221|  11.4k|	  items[i] == key)
  ------------------
  |  Branch (221:4): [True: 0, False: 0]
  ------------------
  222|      0|        break;
  223|  11.4k|      if (items[i].is_tombstone () && tombstone == (unsigned) -1)
  ------------------
  |  Branch (223:11): [True: 0, False: 11.4k]
  |  Branch (223:39): [True: 0, False: 0]
  ------------------
  224|      0|        tombstone = i;
  225|  11.4k|      i = (i + ++step) & mask;
  226|  11.4k|      length++;
  227|  11.4k|    }
  228|       |
  229|  15.5k|    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
  ------------------
  |  Branch (229:26): [True: 15.5k, False: 0]
  ------------------
  230|       |
  231|  15.5k|    if (item.is_used ())
  ------------------
  |  Branch (231:9): [True: 0, False: 15.5k]
  ------------------
  232|      0|    {
  233|      0|      occupancy--;
  234|      0|      if (!item.is_tombstone ())
  ------------------
  |  Branch (234:11): [True: 0, False: 0]
  ------------------
  235|      0|	population--;
  236|      0|    }
  237|       |
  238|  15.5k|    item.key = std::forward<KK> (key);
  239|  15.5k|    item.value = std::forward<VV> (value);
  240|  15.5k|    item.hash = hash;
  241|  15.5k|    item.set_used (true);
  242|  15.5k|    item.set_tombstone (false);
  243|       |
  244|  15.5k|    occupancy++;
  245|  15.5k|    population++;
  246|       |
  247|  15.5k|    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
  ------------------
  |  |  259|  31.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 15.4k]
  |  |  ------------------
  ------------------
  |  Branch (247:49): [True: 9, False: 0]
  ------------------
  248|      9|      resize (mask - 8); // This ensures we jump to next larger size
  249|       |
  250|  15.5k|    return true;
  251|  15.5k|  }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6resizeEj:
  164|  2.03k|  {
  165|  2.03k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|  2.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.03k]
  |  |  ------------------
  ------------------
  166|       |
  167|  2.03k|    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
  ------------------
  |  Branch (167:9): [True: 9, False: 2.03k]
  |  Branch (167:32): [True: 1, False: 8]
  ------------------
  168|       |
  169|  2.03k|    unsigned int power = hb_bit_storage (hb_max ((unsigned) population, new_population) * 2 + 8);
  170|  2.03k|    unsigned int new_size = 1u << power;
  171|  2.03k|    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
  ------------------
  |  |  233|  2.03k|#define hb_malloc hb_malloc_impl
  ------------------
  172|  2.03k|    if (unlikely (!new_items))
  ------------------
  |  |  259|  2.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 1.99k]
  |  |  ------------------
  ------------------
  173|     44|    {
  174|     44|      successful = false;
  175|     44|      return false;
  176|     44|    }
  177|  1.99k|    for (auto &_ : hb_iter (new_items, new_size))
  ------------------
  |  Branch (177:18): [True: 56.2k, False: 1.99k]
  ------------------
  178|  56.2k|      new (&_) item_t ();
  179|       |
  180|  1.99k|    unsigned int old_size = size ();
  181|  1.99k|    item_t *old_items = items;
  182|       |
  183|       |    /* Switch to new, empty, array. */
  184|  1.99k|    population = occupancy = 0;
  185|  1.99k|    mask = new_size - 1;
  186|  1.99k|    prime = prime_for (power);
  187|  1.99k|    max_chain_length = power * 2;
  188|  1.99k|    items = new_items;
  189|       |
  190|       |    /* Insert back old items. */
  191|  17.7k|    for (unsigned int i = 0; i < old_size; i++)
  ------------------
  |  Branch (191:30): [True: 15.7k, False: 1.99k]
  ------------------
  192|  15.7k|    {
  193|  15.7k|      if (old_items[i].is_real ())
  ------------------
  |  Branch (193:11): [True: 10.2k, False: 5.58k]
  ------------------
  194|  10.2k|      {
  195|  10.2k|	set_with_hash (std::move (old_items[i].key),
  196|  10.2k|		       old_items[i].hash,
  197|  10.2k|		       std::move (old_items[i].value));
  198|  10.2k|      }
  199|  15.7k|      old_items[i].~item_t ();
  200|  15.7k|    }
  201|       |
  202|  1.99k|    hb_free (old_items);
  ------------------
  |  |  236|  1.99k|#define hb_free hb_free_impl
  ------------------
  203|       |
  204|  1.99k|    return true;
  205|  2.03k|  }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE4sizeEv:
  319|  1.99k|  unsigned size () const { return mask ? mask + 1 : 0; }
  ------------------
  |  Branch (319:35): [True: 451, False: 1.54k]
  ------------------
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE9prime_forEj:
  445|  1.99k|  {
  446|       |    /* Following comment and table copied from glib. */
  447|       |    /* Each table size has an associated prime modulo (the first prime
  448|       |     * lower than the table size) used to find the initial bucket. Probing
  449|       |     * then works modulo 2^n. The prime modulo is necessary to get a
  450|       |     * good distribution with poor hash functions.
  451|       |     */
  452|       |    /* Not declaring static to make all kinds of compilers happy... */
  453|  1.99k|    /*static*/ const unsigned int prime_mod [32] =
  454|  1.99k|    {
  455|  1.99k|      1,          /* For 1 << 0 */
  456|  1.99k|      2,
  457|  1.99k|      3,
  458|  1.99k|      7,
  459|  1.99k|      13,
  460|  1.99k|      31,
  461|  1.99k|      61,
  462|  1.99k|      127,
  463|  1.99k|      251,
  464|  1.99k|      509,
  465|  1.99k|      1021,
  466|  1.99k|      2039,
  467|  1.99k|      4093,
  468|  1.99k|      8191,
  469|  1.99k|      16381,
  470|  1.99k|      32749,
  471|  1.99k|      65521,      /* For 1 << 16 */
  472|  1.99k|      131071,
  473|  1.99k|      262139,
  474|  1.99k|      524287,
  475|  1.99k|      1048573,
  476|  1.99k|      2097143,
  477|  1.99k|      4194301,
  478|  1.99k|      8388593,
  479|  1.99k|      16777213,
  480|  1.99k|      33554393,
  481|  1.99k|      67108859,
  482|  1.99k|      134217689,
  483|  1.99k|      268435399,
  484|  1.99k|      536870909,
  485|  1.99k|      1073741789,
  486|  1.99k|      2147483647  /* For 1 << 31 */
  487|  1.99k|    };
  488|       |
  489|  1.99k|    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
  ------------------
  |  |  259|  1.99k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.99k]
  |  |  ------------------
  ------------------
  490|      0|      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
  491|       |
  492|  1.99k|    return prime_mod[shift];
  493|  1.99k|  }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE13set_with_hashIS3_jEEbOT_jOT0_:
  209|  10.2k|  {
  210|  10.2k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  211|  10.2k|    if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  212|       |
  213|  10.2k|    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
  214|  10.2k|    unsigned int tombstone = (unsigned int) -1;
  215|  10.2k|    unsigned int i = hash % prime;
  216|  10.2k|    unsigned length = 0;
  217|  10.2k|    unsigned step = 0;
  218|  12.5k|    while (items[i].is_used ())
  ------------------
  |  Branch (218:12): [True: 2.32k, False: 10.2k]
  ------------------
  219|  2.32k|    {
  220|  2.32k|      if ((std::is_integral<K>::value || items[i].hash == hash) &&
  ------------------
  |  Branch (220:12): [Folded - Ignored]
  |  Branch (220:42): [True: 0, False: 2.32k]
  ------------------
  221|  2.32k|	  items[i] == key)
  ------------------
  |  Branch (221:4): [True: 0, False: 0]
  ------------------
  222|      0|        break;
  223|  2.32k|      if (items[i].is_tombstone () && tombstone == (unsigned) -1)
  ------------------
  |  Branch (223:11): [True: 0, False: 2.32k]
  |  Branch (223:39): [True: 0, False: 0]
  ------------------
  224|      0|        tombstone = i;
  225|  2.32k|      i = (i + ++step) & mask;
  226|  2.32k|      length++;
  227|  2.32k|    }
  228|       |
  229|  10.2k|    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
  ------------------
  |  Branch (229:26): [True: 10.2k, False: 0]
  ------------------
  230|       |
  231|  10.2k|    if (item.is_used ())
  ------------------
  |  Branch (231:9): [True: 0, False: 10.2k]
  ------------------
  232|      0|    {
  233|      0|      occupancy--;
  234|      0|      if (!item.is_tombstone ())
  ------------------
  |  Branch (234:11): [True: 0, False: 0]
  ------------------
  235|      0|	population--;
  236|      0|    }
  237|       |
  238|  10.2k|    item.key = std::forward<KK> (key);
  239|  10.2k|    item.value = std::forward<VV> (value);
  240|  10.2k|    item.hash = hash;
  241|  10.2k|    item.set_used (true);
  242|  10.2k|    item.set_tombstone (false);
  243|       |
  244|  10.2k|    occupancy++;
  245|  10.2k|    population++;
  246|       |
  247|  10.2k|    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
  ------------------
  |  |  259|  20.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  |  Branch (247:49): [True: 0, False: 0]
  ------------------
  248|      0|      resize (mask - 8); // This ensures we jump to next larger size
  249|       |
  250|  10.2k|    return true;
  251|  10.2k|  }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t12is_tombstoneEv:
   83|  13.8k|    bool is_tombstone () const { return is_tombstone_; }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t8set_usedEb:
   82|  25.7k|    void set_used (bool is_used) { is_used_ = is_used; }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t13set_tombstoneEb:
   84|  25.7k|    void set_tombstone (bool is_tombstone) { is_tombstone_ = is_tombstone; }
_ZNK12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE8in_errorEv:
  161|  18.4k|  bool in_error () const { return !successful; }
_ZN12hb_hashmap_tIjjLb1EE3setIRjEEbRKjOT_:
  254|  33.3k|  bool set (const K &key, VV&& value) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value)); }
_ZN12hb_hashmap_tIjjLb1EE13set_with_hashIRKjRjEEbOT_jOT0_:
  209|  33.3k|  {
  210|  33.3k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 460, False: 32.8k]
  |  |  ------------------
  ------------------
  211|  32.8k|    if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
  ------------------
  |  |  259|  65.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 549, False: 32.3k]
  |  |  |  Branch (259:47): [True: 32.8k, False: 0]
  |  |  |  Branch (259:47): [True: 549, False: 32.3k]
  |  |  ------------------
  ------------------
  212|       |
  213|  32.3k|    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
  214|  32.3k|    unsigned int tombstone = (unsigned int) -1;
  215|  32.3k|    unsigned int i = hash % prime;
  216|  32.3k|    unsigned length = 0;
  217|  32.3k|    unsigned step = 0;
  218|  32.3k|    while (items[i].is_used ())
  ------------------
  |  Branch (218:12): [True: 0, False: 32.3k]
  ------------------
  219|      0|    {
  220|      0|      if ((std::is_integral<K>::value || items[i].hash == hash) &&
  ------------------
  |  Branch (220:12): [Folded - Ignored]
  |  Branch (220:42): [True: 0, False: 0]
  ------------------
  221|      0|	  items[i] == key)
  ------------------
  |  Branch (221:4): [True: 0, False: 0]
  ------------------
  222|      0|        break;
  223|      0|      if (items[i].is_tombstone () && tombstone == (unsigned) -1)
  ------------------
  |  Branch (223:11): [True: 0, False: 0]
  |  Branch (223:39): [True: 0, False: 0]
  ------------------
  224|      0|        tombstone = i;
  225|      0|      i = (i + ++step) & mask;
  226|      0|      length++;
  227|      0|    }
  228|       |
  229|  32.3k|    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
  ------------------
  |  Branch (229:26): [True: 32.3k, False: 0]
  ------------------
  230|       |
  231|  32.3k|    if (item.is_used ())
  ------------------
  |  Branch (231:9): [True: 0, False: 32.3k]
  ------------------
  232|      0|    {
  233|      0|      occupancy--;
  234|      0|      if (!item.is_tombstone ())
  ------------------
  |  Branch (234:11): [True: 0, False: 0]
  ------------------
  235|      0|	population--;
  236|      0|    }
  237|       |
  238|  32.3k|    item.key = std::forward<KK> (key);
  239|  32.3k|    item.value = std::forward<VV> (value);
  240|  32.3k|    item.hash = hash;
  241|  32.3k|    item.set_used (true);
  242|  32.3k|    item.set_tombstone (false);
  243|       |
  244|  32.3k|    occupancy++;
  245|  32.3k|    population++;
  246|       |
  247|  32.3k|    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
  ------------------
  |  |  259|  64.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.3k]
  |  |  ------------------
  ------------------
  |  Branch (247:49): [True: 0, False: 0]
  ------------------
  248|      0|      resize (mask - 8); // This ensures we jump to next larger size
  249|       |
  250|  32.3k|    return true;
  251|  32.8k|  }
_ZN12hb_hashmap_tIjjLb1EE6resizeEj:
  164|  32.8k|  {
  165|  32.8k|    if (unlikely (!successful)) return false;
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.8k]
  |  |  ------------------
  ------------------
  166|       |
  167|  32.8k|    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
  ------------------
  |  Branch (167:9): [True: 0, False: 32.8k]
  |  Branch (167:32): [True: 0, False: 0]
  ------------------
  168|       |
  169|  32.8k|    unsigned int power = hb_bit_storage (hb_max ((unsigned) population, new_population) * 2 + 8);
  170|  32.8k|    unsigned int new_size = 1u << power;
  171|  32.8k|    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
  ------------------
  |  |  233|  32.8k|#define hb_malloc hb_malloc_impl
  ------------------
  172|  32.8k|    if (unlikely (!new_items))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 549, False: 32.3k]
  |  |  ------------------
  ------------------
  173|    549|    {
  174|    549|      successful = false;
  175|    549|      return false;
  176|    549|    }
  177|  32.3k|    for (auto &_ : hb_iter (new_items, new_size))
  ------------------
  |  Branch (177:18): [True: 517k, False: 32.3k]
  ------------------
  178|   517k|      new (&_) item_t ();
  179|       |
  180|  32.3k|    unsigned int old_size = size ();
  181|  32.3k|    item_t *old_items = items;
  182|       |
  183|       |    /* Switch to new, empty, array. */
  184|  32.3k|    population = occupancy = 0;
  185|  32.3k|    mask = new_size - 1;
  186|  32.3k|    prime = prime_for (power);
  187|  32.3k|    max_chain_length = power * 2;
  188|  32.3k|    items = new_items;
  189|       |
  190|       |    /* Insert back old items. */
  191|  32.3k|    for (unsigned int i = 0; i < old_size; i++)
  ------------------
  |  Branch (191:30): [True: 0, False: 32.3k]
  ------------------
  192|      0|    {
  193|      0|      if (old_items[i].is_real ())
  ------------------
  |  Branch (193:11): [True: 0, False: 0]
  ------------------
  194|      0|      {
  195|      0|	set_with_hash (std::move (old_items[i].key),
  196|      0|		       old_items[i].hash,
  197|      0|		       std::move (old_items[i].value));
  198|      0|      }
  199|      0|      old_items[i].~item_t ();
  200|      0|    }
  201|       |
  202|  32.3k|    hb_free (old_items);
  ------------------
  |  |  236|  32.3k|#define hb_free hb_free_impl
  ------------------
  203|       |
  204|  32.3k|    return true;
  205|  32.8k|  }
_ZNK12hb_hashmap_tIjjLb1EE4sizeEv:
  319|  32.3k|  unsigned size () const { return mask ? mask + 1 : 0; }
  ------------------
  |  Branch (319:35): [True: 0, False: 32.3k]
  ------------------
_ZN12hb_hashmap_tIjjLb1EE9prime_forEj:
  445|  32.3k|  {
  446|       |    /* Following comment and table copied from glib. */
  447|       |    /* Each table size has an associated prime modulo (the first prime
  448|       |     * lower than the table size) used to find the initial bucket. Probing
  449|       |     * then works modulo 2^n. The prime modulo is necessary to get a
  450|       |     * good distribution with poor hash functions.
  451|       |     */
  452|       |    /* Not declaring static to make all kinds of compilers happy... */
  453|  32.3k|    /*static*/ const unsigned int prime_mod [32] =
  454|  32.3k|    {
  455|  32.3k|      1,          /* For 1 << 0 */
  456|  32.3k|      2,
  457|  32.3k|      3,
  458|  32.3k|      7,
  459|  32.3k|      13,
  460|  32.3k|      31,
  461|  32.3k|      61,
  462|  32.3k|      127,
  463|  32.3k|      251,
  464|  32.3k|      509,
  465|  32.3k|      1021,
  466|  32.3k|      2039,
  467|  32.3k|      4093,
  468|  32.3k|      8191,
  469|  32.3k|      16381,
  470|  32.3k|      32749,
  471|  32.3k|      65521,      /* For 1 << 16 */
  472|  32.3k|      131071,
  473|  32.3k|      262139,
  474|  32.3k|      524287,
  475|  32.3k|      1048573,
  476|  32.3k|      2097143,
  477|  32.3k|      4194301,
  478|  32.3k|      8388593,
  479|  32.3k|      16777213,
  480|  32.3k|      33554393,
  481|  32.3k|      67108859,
  482|  32.3k|      134217689,
  483|  32.3k|      268435399,
  484|  32.3k|      536870909,
  485|  32.3k|      1073741789,
  486|  32.3k|      2147483647  /* For 1 << 31 */
  487|  32.3k|    };
  488|       |
  489|  32.3k|    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
  ------------------
  |  |  259|  32.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.3k]
  |  |  ------------------
  ------------------
  490|      0|      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
  491|       |
  492|  32.3k|    return prime_mod[shift];
  493|  32.3k|  }
_ZN12hb_hashmap_tIjjLb1EE6item_tC2Ev:
   79|   517k|		value () {}
_ZN12hb_hashmap_tIjjLb1EEC2Ev:
   45|  32.8k|  hb_hashmap_t ()  { init (); }
_ZN12hb_hashmap_tIjjLb1EED2Ev:
   46|  32.8k|  ~hb_hashmap_t () { fini (); }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EEC2Ev:
   45|  1.71k|  hb_hashmap_t ()  { init (); }
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_tC2Ev:
   79|  56.2k|		value () {}
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EED2Ev:
   46|  1.71k|  ~hb_hashmap_t () { fini (); }

hb-aat-layout.cc:_ZNK3$_2clIRjjjEEDTclL_ZL6hb_minEclL_ZL6hb_maxEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEclsr3stdE7forwardIT1_Efp1_EEEOS2_OS3_OS4_:
   76|  1.43M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  30.8M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 15.3M, False: 1.23k]
  ------------------
hb-aat-layout.cc:_ZNK3$_0clIRjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   106M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 51.7M, False: 1.38M]
  ------------------
hb-aat-layout.cc:_ZorI13hb_map_iter_tI17hb_sorted_array_tIKN3AAT11FeatureNameEEMS3_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0ELPv0EE9hb_sink_tI10hb_array_tIS6_EELSA_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSH_OSG_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_12clIRMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvERKS2_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS9_OSA_:
   76|     18|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_124implIRMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvERKS2_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS9_OSA_11hb_priorityILj1EE:
   76|     18|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_13clIRMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEJRKS2_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS9_DpOSC_:
   76|     18|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_134implIRMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvERKS2_JEEEDTcldsclL_ZL8hb_derefEclsr3stdE7forwardIT0_Efp1_EEclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT1_Efp2_EEEOSA_11hb_priorityILj2EEOS9_DpOSB_:
   76|     18|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_4clIRKN3AAT11FeatureNameEEEDTclsr3stdE7forwardIT_Efp_EEOS5_:
   76|     18|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEE3getEv:
  157|     18|  T& get () { return v; }
hb-aat-layout.cc:_ZorI17hb_sorted_array_tIKN3AAT11FeatureNameEE21hb_map_iter_factory_tIMS2_KF28hb_aat_layout_feature_type_tvEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSD_OSC_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIMN3AAT11FeatureNameEKF28hb_aat_layout_feature_type_tvEEC2ES4_:
  153|  33.3k|  hb_reference_wrapper (T v) : v (v) {}
hb-aat-layout.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  44.3M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 22.1M, False: 34.4k]
  ------------------
hb-aat-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN3AAT11SettingNameEEZNKS2_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS4_E_L24hb_function_sortedness_t0ELPv0EE9hb_sink_tIS1_IS8_EELSF_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSL_OSK_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_12clIRZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_SA_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSD_OSE_:
   76|      2|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_124implIRZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_SA_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSD_OSE_11hb_priorityILj1EE:
   76|      2|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_13clIRZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_JSA_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSD_DpOSG_:
   76|      2|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_134implIRZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_JSA_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSD_11hb_priorityILj0EEDpOSE_:
   76|      2|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_4clIRZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS3_PKvEUlRKNS1_11SettingNameEE_EEDTclsr3stdE7forwardIT_Efp_EEOSD_:
   76|      2|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS2_PKvEUlRKNS0_11SettingNameEE_E3getEv:
  157|      2|  T& get () { return v; }
hb-aat-layout.cc:_ZorI10hb_array_tIKN3AAT11SettingNameEE21hb_map_iter_factory_tIZNKS1_11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS7_PKvEUlRS3_E_L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSI_OSH_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT11FeatureName18get_selector_infosEjPjP37hb_aat_layout_feature_selector_info_tS2_PKvEUlRKNS0_11SettingNameEE_EC2ESA_:
  153|  33.3k|  hb_reference_wrapper (T v) : v (v) {}
_ZN21hb_sanitize_context_t8dispatchIN2OT8ClassDefEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|   115k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8ClassDefEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|   115k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10AttachListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.10k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10AttachListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.10k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout6Common8CoverageEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|   651k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout6Common8CoverageEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|   651k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEJPKNS1_10AttachListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  30.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEJPKNS1_10AttachListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  30.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT11AttachPointEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  23.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT11AttachPointEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  23.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12LigCaretListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.90k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12LigCaretListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.90k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12LigCaretListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  23.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12LigCaretListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  23.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8LigGlyphEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  12.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8LigGlyphEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  12.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEJPKNS1_8LigGlyphEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  29.2M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEJPKNS1_8LigGlyphEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  29.2M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10CaretValueEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  17.6M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10CaretValueEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  17.6M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6DeviceEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  8.80M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6DeviceEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  8.80M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13MarkGlyphSetsEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.01k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13MarkGlyphSetsEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.01k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_20MarkGlyphSetsFormat1EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|  1.23k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_20MarkGlyphSetsFormat1EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|  1.23k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14VariationStoreEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.27k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14VariationStoreEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.27k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13VarRegionListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.26k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13VarRegionListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.26k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_14VariationStoreEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  7.28k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_14VariationStoreEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  7.28k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7VarDataEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.64k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7VarDataEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.64k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_1clImjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  63.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 2.46k, False: 29.1k]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN3AAT21RearrangementSubtableINS1_13ExtendedTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    224|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT21RearrangementSubtableINS1_13ExtendedTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    224|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT6LookupIN2OT7IntTypeItLj2EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  2.62k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT6LookupIN2OT7IntTypeItLj2EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  2.62k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeItLj2EEEEEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    451|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeItLj2EEEEEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    451|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_1clIRiS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  21.1M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 10.5M, False: 66]
  ------------------
hb-aat-layout.cc:_ZNK3$_0clIRiS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  21.1M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 10.5M, False: 9.94k]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN3AAT18ContextualSubtableINS1_13ExtendedTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    391|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT18ContextualSubtableINS1_13ExtendedTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    391|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEJRjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSD_:
   76|    353|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEJRjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSB_:
   76|    353|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEJPKNS1_23UnsizedListOfOffset16ToIS6_S8_Lb0EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  11.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEJPKNS1_23UnsizedListOfOffset16ToIS6_S8_Lb0EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  11.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT6LookupIN2OT11HBGlyphID16EEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  11.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT6LookupIN2OT11HBGlyphID16EEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  11.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_11HBGlyphID16EEEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    305|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_11HBGlyphID16EEEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    305|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT16LigatureSubtableINS1_13ExtendedTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    219|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT16LigatureSubtableINS1_13ExtendedTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    219|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT21NoncontextualSubtableINS1_13ExtendedTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    145|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT21NoncontextualSubtableINS1_13ExtendedTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    145|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT17InsertionSubtableINS1_13ExtendedTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    474|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT17InsertionSubtableINS1_13ExtendedTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    474|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  16.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT13FTStringRangeEJPKNS1_4ltagEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  16.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT21RearrangementSubtableINS1_13ObsoleteTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    180|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT21RearrangementSubtableINS1_13ObsoleteTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    180|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT10ClassTableIN2OT7IntTypeIhLj1EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  1.46k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT10ClassTableIN2OT7IntTypeIhLj1EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  1.46k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT18ContextualSubtableINS1_13ObsoleteTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    340|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT18ContextualSubtableINS1_13ObsoleteTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    340|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEEJiEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|    304|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEEJiEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|    304|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    179|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    179|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT21NoncontextualSubtableINS1_13ObsoleteTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    484|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT21NoncontextualSubtableINS1_13ObsoleteTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    484|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT17InsertionSubtableINS1_13ObsoleteTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    566|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT17InsertionSubtableINS1_13ObsoleteTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    566|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_1clIRjRKjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  46.8M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 4.79M, False: 18.6M]
  ------------------
hb-aat-layout.cc:_ZNK3$_1clIRKjS2_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  46.8M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 22.5M, False: 855k]
  ------------------
hb-aat-layout.cc:_ZNK3$_4clIR13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ExtendedTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EEEEDTclsr3stdE7forwardIT_Efp_EEOSI_:
   76|  7.99k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_14clIRK4$_11bEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOS5_OS6_:
   75|  26.2k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-aat-layout.cc:_ZNK4$_144implIRK4$_11bEEDTclL_ZL6hb_hasEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj1EE:
   76|  26.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_15clIRK4$_11bEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOS5_OS6_:
   75|  26.2k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-aat-layout.cc:_ZNK4$_154implIRK4$_11bEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj0EE:
   76|  26.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_13clIRK4$_11JbEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS4_DpOS7_:
   76|  52.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_134implIRK4$_11JbEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS4_11hb_priorityILj0EEDpOS5_:
   76|  52.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_4clIRK4$_11EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  52.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_11clIbEEDTclsr3stdE7forwardIT_Efp_EEOS1_:
   76|  52.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_12clIRK4$_11bEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS4_OS5_:
   76|  26.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_124implIRK4$_11bEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj1EE:
   76|  26.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_12clIRZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_RKS8_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSD_OSE_:
   76|  6.69k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_124implIRZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_RKS8_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSD_OSE_11hb_priorityILj1EE:
   76|  6.69k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_13clIRZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_JRKS8_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSD_DpOSG_:
   76|  6.69k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_134implIRZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_JRKS8_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSD_11hb_priorityILj0EEDpOSE_:
   76|  6.69k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_4clIRZNK3AAT5ChainINS1_13ExtendedTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EEDTclsr3stdE7forwardIT_Efp_EEOSB_:
   76|  6.69k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT5ChainINS0_13ExtendedTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_E3getEv:
  157|  6.69k|  T& get () { return v; }
hb-aat-layout.cc:_ZorI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEE21hb_map_iter_factory_tIZNK3AAT5ChainINS6_13ExtendedTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSH_OSG_:
   76|  7.99k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT5ChainINS0_13ExtendedTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EC2ES8_:
  153|  7.99k|  hb_reference_wrapper (T v) : v (v) {}
hb-aat-layout.cc:_ZNK3$_4clIK11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEEEDTdefp_EPT_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_1clIjRjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  18.2M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 8.98M, False: 114k]
  ------------------
hb-aat-layout.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  17.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 5.08M, False: 3.63M]
  ------------------
hb-aat-layout.cc:_ZNK3$_4clIR13hb_map_iter_tI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEEZNK3AAT5ChainINS7_13ObsoleteTypesEE5applyEPNS7_22hb_aat_apply_context_tEEUlS4_E_L24hb_function_sortedness_t0ELPv0EEEEDTclsr3stdE7forwardIT_Efp_EEOSI_:
   76|  21.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_12clIRZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_RKS8_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSD_OSE_:
   76|  19.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_124implIRZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_RKS8_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSD_OSE_11hb_priorityILj1EE:
   76|  19.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_13clIRZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_JRKS8_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSD_DpOSG_:
   76|  19.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK4$_134implIRZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_JRKS8_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSD_11hb_priorityILj0EEDpOSE_:
   76|  19.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_4clIRZNK3AAT5ChainINS1_13ObsoleteTypesEE5applyEPNS1_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EEDTclsr3stdE7forwardIT_Efp_EEOSB_:
   76|  19.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT5ChainINS0_13ObsoleteTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_E3getEv:
  157|  19.5k|  T& get () { return v; }
hb-aat-layout.cc:_ZorI17hb_sorted_array_tIKN12hb_aat_map_t13range_flags_tEE21hb_map_iter_factory_tIZNK3AAT5ChainINS6_13ObsoleteTypesEE5applyEPNS6_22hb_aat_apply_context_tEEUlS2_E_L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSH_OSG_:
   76|  21.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK3AAT5ChainINS0_13ObsoleteTypesEE5applyEPNS0_22hb_aat_apply_context_tEEUlN12hb_aat_map_t13range_flags_tEE_EC2ES8_:
  153|  21.6k|  hb_reference_wrapper (T v) : v (v) {}
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat0INS1_18KerxSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    151|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat0INS1_18KerxSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    151|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat1INS1_18KerxSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    229|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat1INS1_18KerxSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    229|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    158|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    158|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat4INS1_18KerxSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    316|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat4INS1_18KerxSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    316|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|    676|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|    676|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT6LookupIN2OT7IntTypeIjLj4EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|    799|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT6LookupIN2OT7IntTypeIjLj4EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|    799|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIjLj4EEEEEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    303|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIjLj4EEEEEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    303|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT6LookupIN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEJPKNS7_IhLj1EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSI_:
   76|    478|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT6LookupIN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEJPKNS7_IhLj1EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSG_:
   76|    478|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEJRPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  1.44k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEJRPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  1.44k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEJjRPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSI_:
   76|    339|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEJjRPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSG_:
   76|    339|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-layout.cc:_ZNK3$_0clIjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  3.55M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 67.4k, False: 1.71M]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN3AAT9TrackDataEJPKNS1_4trakEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    242|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT9TrackDataEJPKNS1_4trakEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    242|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIiLj4EEELj16EEEEEJRKNS4_ItLj2EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSD_:
   76|    179|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIiLj4EEELj16EEEEEJRKNS4_ItLj2EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSB_:
   76|    179|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT15TrackTableEntryEJRPKvRKN2OT7IntTypeItLj2EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSD_:
   76|  11.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT15TrackTableEntryEJRPKvRKN2OT7IntTypeItLj2EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSB_:
   76|  11.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIsLj2EEEEEJRjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  11.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIsLj2EEEEEJRjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  11.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT11FeatureNameEJPKNS1_4featEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    448|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT11FeatureNameEJPKNS1_4featEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    448|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13FeatureParamsEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|   194k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13FeatureParamsEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|   194k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7LangSysEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  29.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7LangSysEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  29.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6RecordINS1_7LangSysEEEJPKNS1_6ScriptEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|  17.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6RecordINS1_7LangSysEEEJPKNS1_6ScriptEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|  17.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7LangSysEJPKNS1_25Record_sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   685k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7LangSysEJPKNS1_25Record_sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   685k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_12ConditionSetEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  7.87k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_12ConditionSetEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  7.87k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ConditionEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.88k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ConditionEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.88k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7FeatureEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7FeatureEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT30FeatureTableSubstitutionRecordEJPKNS1_24FeatureTableSubstitutionEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  8.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT30FeatureTableSubstitutionRecordEJPKNS1_24FeatureTableSubstitutionEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  8.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12ConditionSetEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.15k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12ConditionSetEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.15k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT24FeatureTableSubstitutionEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.04k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT24FeatureTableSubstitutionEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.04k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT22FeatureVariationRecordEJPKNS1_17FeatureVariationsEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  6.37k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT22FeatureVariationRecordEJPKNS1_17FeatureVariationsEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  6.37k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEJPKNS1_19ChainContextFormat3EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|   402k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEJPKNS1_19ChainContextFormat3EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|   402k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE_E3getEv:
  157|  3.33M|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_E3getEv:
  157|   179M|  T& get () { return v; }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl6AnchorEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  13.6M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl6AnchorEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  13.6M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl15EntryExitRecordEJPKNS3_17CursivePosFormat1EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|   608k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl15EntryExitRecordEJPKNS3_17CursivePosFormat1EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|   608k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl10MarkRecordEJPKNS3_9MarkArrayEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|  11.0M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl10MarkRecordEJPKNS3_9MarkArrayEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|  11.0M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_E3getEv:
  157|  1.76M|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_E3getEv:
  157|  27.8k|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_E3getEv:
  157|   532k|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_E3getEv:
  157|   492k|  T& get () { return v; }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEJPKNS1_6LookupEjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|  3.18M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEJPKNS1_6LookupEjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|  3.18M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl17PosLookupSubTableEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.17M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl17PosLookupSubTableEJjEEEDTcldtfp_8dispatchfpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj0EEDpOS5_:
   76|  2.17M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16SinglePosFormat1EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  3.48k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16SinglePosFormat1EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  3.48k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16SinglePosFormat2EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  5.58k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16SinglePosFormat2EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  5.58k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  14.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  14.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_16PairPosFormat1_3IS6_EEPNS7_18sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSJ_:
   76|   120k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_16PairPosFormat1_3IS6_EEPNS7_18sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSH_:
   76|   120k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEEJPNS6_18sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  49.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEEJPNS6_18sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  49.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  10.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  10.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  4.05k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  4.05k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_16PairPosFormat1_3IS6_EEPNS7_18sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSJ_:
   76|  68.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_16PairPosFormat1_3IS6_EEPNS7_18sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSH_:
   76|  68.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEEJPNS6_18sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  3.87k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEEJPNS6_18sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  3.87k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  5.49k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  5.49k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl17CursivePosFormat1EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  8.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl17CursivePosFormat1EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  8.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  9.08k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  9.08k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl9MarkArrayEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  16.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl9MarkArrayEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  16.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl12AnchorMatrixEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  1.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl12AnchorMatrixEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  1.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  7.33k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  7.33k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  7.12k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  7.12k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl13LigatureArrayEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  4.72k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl13LigatureArrayEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  4.72k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|  2.26M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|  2.26M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  6.53k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  6.53k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  7.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  7.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  8.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  8.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16ContextFormat1_4INS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  15.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16ContextFormat1_4INS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  15.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16ContextFormat1_4IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  47.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16ContextFormat1_4IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  47.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7RuleSetINS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  45.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7RuleSetINS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  45.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_7RuleSetIS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|   219k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_7RuleSetIS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|   219k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT4RuleINS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   119k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT4RuleINS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   119k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16ContextFormat2_5INS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  18.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16ContextFormat2_5INS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  18.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16ContextFormat2_5IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  28.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16ContextFormat2_5IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  28.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14ContextFormat3EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  5.08k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14ContextFormat3EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  5.08k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16ContextFormat1_4INS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  9.30k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16ContextFormat1_4INS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  9.30k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16ContextFormat1_4IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  6.40k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16ContextFormat1_4IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  6.40k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7RuleSetINS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  2.95k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7RuleSetINS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  2.95k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_7RuleSetIS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  13.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_7RuleSetIS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  13.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT4RuleINS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  4.46k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT4RuleINS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  4.46k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16ContextFormat2_5INS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  32.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16ContextFormat2_5INS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  32.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16ContextFormat2_5INS4_11MediumTypesEEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|  56.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16ContextFormat2_5INS4_11MediumTypesEEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|  56.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT21ChainContextFormat1_4INS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  12.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT21ChainContextFormat1_4INS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  12.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_21ChainContextFormat1_4IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|   523k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_21ChainContextFormat1_4IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|   523k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12ChainRuleSetINS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  35.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12ChainRuleSetINS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  35.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12ChainRuleSetIS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  1.92M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12ChainRuleSetIS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  1.92M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ChainRuleINS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   398k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ChainRuleINS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   398k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT21ChainContextFormat2_5INS1_6Layout10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  17.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT21ChainContextFormat2_5INS1_6Layout10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  17.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_21ChainContextFormat2_5IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  37.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_21ChainContextFormat2_5IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  37.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT19ChainContextFormat3EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.92k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT19ChainContextFormat3EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.92k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT21ChainContextFormat1_4INS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  6.59k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT21ChainContextFormat1_4INS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  6.59k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_21ChainContextFormat1_4IS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|  6.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_21ChainContextFormat1_4IS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|  6.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12ChainRuleSetINS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  4.59k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12ChainRuleSetINS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  4.59k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12ChainRuleSetIS5_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSG_:
   76|   301k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS1_12ChainRuleSetIS5_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSE_:
   76|   301k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ChainRuleINS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  80.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ChainRuleINS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  80.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT21ChainContextFormat2_5INS1_6Layout11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  13.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT21ChainContextFormat2_5INS1_6Layout11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  13.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_21ChainContextFormat2_5INS4_11MediumTypesEEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|  29.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_21ChainContextFormat2_5INS4_11MediumTypesEEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|  29.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT18RecordListOfScriptEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  39.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT18RecordListOfScriptEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  39.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6RecordINS1_6ScriptEEEJPKNS1_12RecordListOfIS3_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  1.46M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6RecordINS1_6ScriptEEEJPKNS1_12RecordListOfIS3_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  1.46M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6ScriptEJPKNS1_25Record_sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  67.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6ScriptEJPKNS1_25Record_sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  67.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12RecordListOfINS1_7FeatureEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  33.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12RecordListOfINS1_7FeatureEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  33.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6RecordINS1_7FeatureEEEJPKNS1_12RecordListOfIS3_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  1.58M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6RecordINS1_7FeatureEEEJPKNS1_12RecordListOfIS3_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  1.58M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7FeatureEJPKNS1_25Record_sanitize_closure_tEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   308k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7FeatureEJPKNS1_25Record_sanitize_closure_tEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   308k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  13.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  13.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|   171k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|   171k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GPOS_impl9PosLookupEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  95.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GPOS_impl9PosLookupEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  95.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT17FeatureVariationsEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT17FeatureVariationsEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|    284|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|    284|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16SinglePosFormat1EEEjRKT_11hb_priorityILj0EE:
   76|    382|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16SinglePosFormat2EEEjRKT_11hb_priorityILj0EE:
   76|    758|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  2.23k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    954|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    625|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    790|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl17CursivePosFormat1EEEjRKT_11hb_priorityILj0EE:
   76|  1.23k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.56k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.01k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    990|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.76k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_16ContextFormat1_4INS_6Layout10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  4.50k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t13apply_cached_INS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEN10_hb_head_tIbJDTclptfp_12apply_cachedfp0_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tE11hb_priorityILj1EE:
   75|   429k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t11cache_func_INS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEN10_hb_head_tIbJDTclptfp_10cache_funcfp0_fp1_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tEb11hb_priorityILj1EE:
   75|  6.82k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEDTcldtfp_10cache_costEERKT_11hb_priorityILj1EE:
   76|  3.97k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_14ContextFormat3EEEjRKT_11hb_priorityILj0EE:
   76|    864|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_16ContextFormat1_4INS_6Layout11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    993|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t13apply_cached_INS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEN10_hb_head_tIbJDTclptfp_12apply_cachedfp0_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tE11hb_priorityILj1EE:
   75|  2.82k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t11cache_func_INS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEN10_hb_head_tIbJDTclptfp_10cache_funcfp0_fp1_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tEb11hb_priorityILj1EE:
   75|  2.22k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEDTcldtfp_10cache_costEERKT_11hb_priorityILj1EE:
   76|  3.46k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  2.51k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t13apply_cached_INS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEN10_hb_head_tIbJDTclptfp_12apply_cachedfp0_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tE11hb_priorityILj1EE:
   75|   232k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t11cache_func_INS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEN10_hb_head_tIbJDTclptfp_10cache_funcfp0_fp1_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tEb11hb_priorityILj1EE:
   75|  4.78k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEDTcldtfp_10cache_costEERKT_11hb_priorityILj1EE:
   76|  3.64k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_19ChainContextFormat3EEEjRKT_11hb_priorityILj0EE:
   76|  1.02k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    704|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t13apply_cached_INS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEN10_hb_head_tIbJDTclptfp_12apply_cachedfp0_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tE11hb_priorityILj1EE:
   75|  2.05k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t11cache_func_INS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEN10_hb_head_tIbJDTclptfp_10cache_funcfp0_fp1_EEEE4typeEPKT_PNS_21hb_ot_apply_context_tEb11hb_priorityILj1EE:
   75|  3.74k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEDTcldtfp_10cache_costEERKT_11hb_priorityILj1EE:
   76|  2.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-aat-map.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  21.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 10.5k, False: 0]
  ------------------
hb-blob.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   106k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 12.2k, False: 41.2k]
  ------------------
hb-blob.cc:_ZNK3$_2clIRKP18hb_user_data_key_tRN20hb_user_data_array_t19hb_user_data_item_tEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS8_OS9_:
   76|  63.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-blob.cc:_ZNK3$_24implIRKP18hb_user_data_key_tRN20hb_user_data_array_t19hb_user_data_item_tEEEDTeqclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEOS9_OS8_11hb_priorityILj0EE:
   76|  63.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-buffer.cc:_ZNK3$_0clIRjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.26M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 65.3k, False: 1.06M]
  ------------------
hb-buffer.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  9.78M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 4.89M, False: 1.41k]
  ------------------
hb-common.cc:_ZNK3$_1clIRiiEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  15.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 6.65M, False: 1.08M]
  ------------------
hb-common.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   683k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 330k, False: 11.4k]
  ------------------
hb-common.cc:_ZNK3$_0clIRjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   133k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 61.2k, False: 5.23k]
  ------------------
hb-common.cc:_ZNK3$_0clIjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   309k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 84.8k, False: 69.8k]
  ------------------
hb-common.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  1.47M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 366k, False: 369k]
  ------------------
hb-common.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   718k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 359k, False: 0]
  ------------------
hb-common.cc:_ZNK3$_1clIjRjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   150k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 71.5k, False: 3.77k]
  ------------------
hb-common.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   114k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 52.2k, False: 4.94k]
  ------------------
hb-common.cc:_ZNK3$_1clIiRiEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   109k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 6.75k, False: 48.0k]
  ------------------
hb-common.cc:_ZNK3$_0clIiRiEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  50.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 23.4k, False: 1.68k]
  ------------------
hb-common.cc:_ZNK3$_1clIRfS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  11.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 2.90k, False: 2.83k]
  ------------------
hb-common.cc:_ZNK3$_0clIRfS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  7.58k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.78k, False: 2.00k]
  ------------------
hb-common.cc:_ZNK3$_2clIRiiiEEDTclL_ZL6hb_minEclL_ZL6hb_maxEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEclsr3stdE7forwardIT1_Efp1_EEEOS2_OS3_OS4_:
   76|  7.61M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-common.cc:_ZNK3$_0clIRiiEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  15.2M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 7.08M, False: 527k]
  ------------------
hb-common.cc:_ZNK3$_1clIRfRKfEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  44.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 18.3k, False: 3.93k]
  ------------------
hb-common.cc:_ZNK3$_0clIRfRKfEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  44.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 16.2k, False: 5.99k]
  ------------------
hb-common.cc:_ZNK3$_0clIffEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  6.80k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.35k, False: 48]
  ------------------
hb-common.cc:_ZNK3$_2clIfffEEDTclL_ZL6hb_minEclL_ZL6hb_maxEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEclsr3stdE7forwardIT1_Efp1_EEEOS1_OS2_OS3_:
   76|  3.40k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-common.cc:_ZNK3$_1clIRffEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  6.80k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.33k, False: 71]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIsLj2EEELj14EEEEEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|    585|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIsLj2EEELj14EEEEEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|    585|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16DeltaSetIndexMapEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.92k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16DeltaSetIndexMapEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.92k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10DefaultUVSEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.16k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10DefaultUVSEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.16k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13NonDefaultUVSEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  3.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13NonDefaultUVSEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  3.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT23VariationSelectorRecordEJPKNS1_20CmapSubtableFormat14EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  14.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT23VariationSelectorRecordEJPKNS1_20CmapSubtableFormat14EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  14.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12CmapSubtableEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  24.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12CmapSubtableEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  24.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14EncodingRecordEJPKNS1_4cmapEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  36.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14EncodingRecordEJPKNS1_4cmapEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  36.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT5PaintEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT5PaintEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT15PaintColrLayersEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  43.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT15PaintColrLayersEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  43.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_10PaintSolidEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  40.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_10PaintSolidEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  40.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_10PaintSolidEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  35.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_10PaintSolidEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  35.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_19PaintLinearGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  35.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_19PaintLinearGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  35.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ColorLineINS1_10NoVariableEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  16.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ColorLineINS1_10NoVariableEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  16.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_19PaintLinearGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  57.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_19PaintLinearGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  57.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ColorLineINS1_8VariableEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  88.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ColorLineINS1_8VariableEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  88.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_19PaintRadialGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   187k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_19PaintRadialGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   187k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_19PaintRadialGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  64.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_19PaintRadialGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  64.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_18PaintSweepGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  15.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_18PaintSweepGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  15.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_18PaintSweepGradientIS2_EEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  24.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_18PaintSweepGradientIS2_EEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  24.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10PaintGlyphEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  77.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10PaintGlyphEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  77.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14PaintColrGlyphEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.97k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14PaintColrGlyphEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.97k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14PaintTransformINS1_10NoVariableEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  84.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14PaintTransformINS1_10NoVariableEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  84.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_9Affine2x3EEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  76.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_9Affine2x3EEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  76.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14PaintTransformINS1_8VariableEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|   126k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14PaintTransformINS1_8VariableEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|   126k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_9Affine2x3EEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  78.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_9Affine2x3EEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  78.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_14PaintTranslateEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.41k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_14PaintTranslateEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  2.41k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_14PaintTranslateEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  84.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_14PaintTranslateEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  84.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_10PaintScaleEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  9.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_10PaintScaleEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  9.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_10PaintScaleEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|   123k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_10PaintScaleEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|   123k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_22PaintScaleAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  38.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_22PaintScaleAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  38.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_22PaintScaleAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  3.42k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_22PaintScaleAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  3.42k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_17PaintScaleUniformEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  47.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_17PaintScaleUniformEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  47.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_17PaintScaleUniformEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  4.07k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_17PaintScaleUniformEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  4.07k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_29PaintScaleUniformAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  1.52k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_29PaintScaleUniformAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  1.52k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_29PaintScaleUniformAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  3.29k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_29PaintScaleUniformAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  3.29k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_11PaintRotateEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  9.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_11PaintRotateEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  9.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_11PaintRotateEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  11.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_11PaintRotateEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  11.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_23PaintRotateAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  4.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_23PaintRotateAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  4.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_23PaintRotateAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.42k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_23PaintRotateAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  2.42k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_9PaintSkewEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  82.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_9PaintSkewEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  82.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_9PaintSkewEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_9PaintSkewEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  2.77k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NoVariableINS1_21PaintSkewAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NoVariableINS1_21PaintSkewAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  2.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8VariableINS1_21PaintSkewAroundCenterEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  6.04k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8VariableINS1_21PaintSkewAroundCenterEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  6.04k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14PaintCompositeEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.20M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14PaintCompositeEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.20M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7ClipBoxEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7ClipBoxEJEEEDTcldtfp_8dispatchfpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj0EEDpOS3_:
   76|  2.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14ClipBoxFormat1EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    361|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14ClipBoxFormat1EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    361|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14ClipBoxFormat2EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    318|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14ClipBoxFormat2EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    318|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10ClipRecordEJPKNS1_8ClipListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   240k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10ClipRecordEJPKNS1_8ClipListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   240k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT20BaseGlyphPaintRecordEJPKNS1_13BaseGlyphListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  37.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT20BaseGlyphPaintRecordEJPKNS1_13BaseGlyphListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  37.0k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_9LayerListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  38.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_9LayerListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  38.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13BaseGlyphListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  7.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13BaseGlyphListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  7.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9LayerListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.84k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9LayerListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.84k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8ClipListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.60k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8ClipListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.60k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-face.cc:_ZNK3$_6clIRKN2OT3TagERKNS1_11TableRecordEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS8_OS9_:
   76|  4.97M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-face.cc:_ZNK3$_64implIRKN2OT3TagERKNS1_11TableRecordEEEDTeqcldtclsr3stdE7forwardIT0_Efp0_E3cmpclsr3stdE7forwardIT_Efp_EELi0EEOS9_OS8_11hb_priorityILj3EE:
   76|  4.97M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-face.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   140k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 69.9k, False: 358]
  ------------------
hb-face.cc:_ZNK3$_4clIR10hb_array_tIjEEEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  14.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-face.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   272k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 55.4k, False: 80.8k]
  ------------------
hb-face.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  39.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 14.9k, False: 4.87k]
  ------------------
hb-face.cc:_ZNK3$_0clIjRjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  65.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 32.8k, False: 0]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_17TTCHeaderVersion1EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  2.85k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_17TTCHeaderVersion1EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  2.85k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT19OpenTypeOffsetTableEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.72k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT19OpenTypeOffsetTableEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.72k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEJRKNS3_IjLj4EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  7.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEJRKNS3_IjLj4EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  7.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT11ResourceMapEJPKNS1_14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|     94|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT11ResourceMapEJPKNS1_14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|     94|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9ArrayOfM1INS1_18ResourceTypeRecordENS1_7IntTypeItLj2EEEEEJPKS6_RPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|     92|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9ArrayOfM1INS1_18ResourceTypeRecordENS1_7IntTypeItLj2EEEEEJPKS6_RPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|     92|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT18ResourceTypeRecordEJPKNS1_9ArrayOfM1IS2_NS1_7IntTypeItLj2EEEEERPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|  85.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT18ResourceTypeRecordEJPKNS1_9ArrayOfM1IS2_NS1_7IntTypeItLj2EEEEERPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|  85.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_14ResourceRecordEEEJjRPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSA_:
   76|  85.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_14ResourceRecordEEEJjRPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS8_:
   76|  85.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14ResourceRecordEJRPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  1.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14ResourceRecordEJRPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  1.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7ArrayOfINS1_7IntTypeIhLj1EEENS3_IjLj4EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  1.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7ArrayOfINS1_7IntTypeIhLj1EEENS3_IjLj4EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  1.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-face.cc:_ZNK3$_1clImmEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.13k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 5, False: 1.06k]
  ------------------
hb-font.cc:_ZNK3$_1clIRjRKN2OT7IntTypeItLj2EEEEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  66.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 32.3k, False: 959]
  ------------------
hb-font.cc:_ZNK3$_1clIRffEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  10.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.05k, False: 2.34k]
  ------------------
hb-font.cc:_ZNK3$_0clIRffEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  10.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.28k, False: 2.10k]
  ------------------
hb-map.cc:_ZNK3$_3clIjEEN10_hb_head_tIjJDTcl4implfp_cv11hb_priorityILj16EE_EEEEE4typeERKT_:
   75|  33.3k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-map.cc:_ZNK3$_34implIjLPv0EEEN10_hb_head_tIjJDTmlfp_Lj2654435761EEEE4typeERKT_11hb_priorityILj1EE:
   75|  33.3k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-color.cc:_ZorI10hb_array_tIKN2OT7IntTypeIjLj4EEEE9hb_sink_tIS0_IjEELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSB_OSA_:
   76|  5.28k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-color.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  87.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 41.7k, False: 2.15k]
  ------------------
hb-ot-color.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.23k, False: 0]
  ------------------
hb-ot-color.cc:_ZNK3$_0clIRKN2OT7IntTypeIhLj1EEES5_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.27k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 927, False: 209]
  ------------------
_ZN21hb_sanitize_context_t8dispatchIN2OT15BitmapSizeTableEJPKNS1_4CBLCEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  3.14k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT15BitmapSizeTableEJPKNS1_4CBLCEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  3.14k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT18IndexSubtableArrayEJRKNS1_7IntTypeIjLj4EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  3.13k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT18IndexSubtableArrayEJRKNS1_7IntTypeIjLj4EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  3.13k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT19IndexSubtableRecordEJPKNS1_18IndexSubtableArrayEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   101k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT19IndexSubtableRecordEJPKNS1_18IndexSubtableArrayEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   101k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13IndexSubtableEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  55.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13IndexSubtableEJjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  55.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_4sbixEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  6.75k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEJPKNS1_4sbixEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  6.75k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10SBIXStrikeEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  2.68k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10SBIXStrikeEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  2.68k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS4_IhLj1EEEEEJDnRjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  2.56k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS4_IhLj1EEEEEJDnRjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  2.56k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS4_ItLj2EEEEEJDnRjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|    126|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS4_ItLj2EEEEEJDnRjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|    126|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6KernOTEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    225|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6KernOTEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    225|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    219|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat0IN2OT20KernOTSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    219|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|     93|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|     93|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT10ClassTableIN2OT7IntTypeItLj2EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|    306|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT10ClassTableIN2OT7IntTypeItLj2EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|    306|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7KernAATEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    473|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7KernAATEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    473|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    117|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat0IN2OT21KernAATSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    117|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|    206|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|    206|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|     65|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|     65|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT19KernSubTableFormat3INS1_21KernAATSubTableHeaderEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|     51|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT19KernSubTableFormat3INS1_21KernAATSubTableHeaderEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|     51|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT7DataMapEJPKNS1_4metaEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  6.88k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT7DataMapEJPKNS1_4metaEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  6.88k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEJRKNS3_ItLj2EEEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|   581k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEEJRKNS3_ItLj2EEEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|   581k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10NameRecordEJRPKvEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   581k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10NameRecordEJRPKvEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   581k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEJPKNS3_9GSUB_impl30ReverseChainSingleSubstFormat1EEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|  3.38M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEJPKNS3_9GSUB_impl30ReverseChainSingleSubstFormat1EEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|  3.38M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEJPKNS1_6LookupEjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSE_:
   76|  3.58M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEJPKNS1_6LookupEjEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSC_:
   76|  3.58M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl19SubstLookupSubTableEJjEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  2.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl19SubstLookupSubTableEJjEEEDTcldtfp_8dispatchfpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj0EEDpOS5_:
   76|  2.59M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  3.33k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  3.33k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  4.70k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  4.70k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  1.12k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  1.12k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  4.70k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  4.70k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  23.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  23.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_22MultipleSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|   206k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_22MultipleSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|   206k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  94.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  94.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  4.29k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  4.29k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_22MultipleSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|   226k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_22MultipleSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|   226k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  16.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  16.2k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  5.18k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  5.18k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_23AlternateSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|   107k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_23AlternateSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|   107k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  67.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  67.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  3.34k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  3.34k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_23AlternateSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|  13.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_23AlternateSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|  13.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  3.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  3.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  15.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  15.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_22LigatureSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|   190k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_22LigatureSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|   190k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  45.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  45.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_11LigatureSetIS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|  2.08M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_11LigatureSetIS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|  2.08M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|   155k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|   155k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  6.60k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  6.60k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_22LigatureSubstFormat1_2IS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|  3.92M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEJPKNS4_22LigatureSubstFormat1_2IS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|  3.92M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  7.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  7.82k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_11LigatureSetIS6_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSH_:
   76|   156k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEJPKNS4_11LigatureSetIS6_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSF_:
   76|   156k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  24.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  24.5k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|  10.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|  10.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_E3getEv:
  157|  1.16M|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_E3getEv:
  157|  3.61k|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_E3getEv:
  157|   116k|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_E3getEv:
  157|  1.81k|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_E3getEv:
  157|  6.54M|  T& get () { return v; }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_E3getEv:
  157|    870|  T& get () { return v; }
_ZN21hb_sanitize_context_t8dispatchIN2OT16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|  20.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|  20.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|   331k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|   331k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6Layout9GSUB_impl11SubstLookupEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS7_:
   76|   130k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6Layout9GSUB_impl11SubstLookupEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS5_:
   76|   130k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSB_:
   76|    251|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS9_:
   76|    251|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSF_:
   76|   173k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEJPKNS1_16List16OfOffsetToIS5_S7_EEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSD_:
   76|   173k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    558|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.42k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    137|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    613|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  7.13k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    874|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|    450|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  5.16k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEEEjRKT_11hb_priorityILj0EE:
   76|  1.01k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN2OT33hb_accelerate_subtables_context_t10cache_costINS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EEEjRKT_11hb_priorityILj0EE:
   76|  3.00k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-font.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|    750|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 340, False: 35]
  ------------------
hb-ot-font.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  61.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.03k, False: 27.8k]
  ------------------
hb-ot-font.cc:_ZNK3$_1clIjRjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|    424|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 183, False: 29]
  ------------------
hb-ot-font.cc:_ZNK3$_1clIRKN2OT7IntTypeIsLj2EEES5_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  18.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 5.72k, False: 3.45k]
  ------------------
hb-ot-font.cc:_ZNK3$_0clIRKN2OT7IntTypeIsLj2EEES5_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  18.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 5.72k, False: 3.45k]
  ------------------
hb-ot-font.cc:_ZNK3$_1clIjRmEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  1.66k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 824, False: 6]
  ------------------
hb-ot-font.cc:_ZNK3$_1clIRKjS2_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  1.67M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 502k, False: 334k]
  ------------------
hb-ot-layout.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  11.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 700k, False: 5.02M]
  ------------------
hb-ot-layout.cc:_ZNK3$_1clImjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  48.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 75, False: 24.1k]
  ------------------
hb-ot-layout.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|    184|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 71, False: 21]
  ------------------
hb-ot-layout.cc:_ZNK3$_0clIjjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.69M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.34M, False: 0]
  ------------------
hb-ot-layout.cc:_ZNK3$_4clIK4$_40EEDTdefp_EPT_:
   76|  10.6M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperIPK4$_40EcvRS2_Ev:
  156|  10.6M|  operator T& () { return v; }
hb-ot-layout.cc:_ZN20hb_reference_wrapperIPK4$_40EC2ES2_:
  153|  2.36M|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT5IndexEE9hb_sink_tIS0_IjEELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSA_OS9_:
   76|   327k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRK4$_11EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|   386M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEERKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSN_OSO_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEERKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSN_OSO_11hb_priorityILj1EE:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEEJRKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSQ_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEEJRKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSN_11hb_priorityILj0EEDpOSO_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_10SmallTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_6Layout9GSUB_impl8LigatureINS6_10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS7_11LigatureSetIS9_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSN_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_6Layout9GSUB_impl8LigatureINS6_10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS7_11LigatureSetIS9_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSK_11hb_priorityILj0EEDpOSL_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS4_11LigatureSetIS6_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_10SmallTypesEEEEE3getEv:
  157|  1.16M|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSR_OSQ_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_10SmallTypesEEEEEC2ESC_:
  153|  51.9k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS9_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSC_OSD_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEERKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSN_OSO_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEERKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSN_OSO_11hb_priorityILj1EE:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEEJRKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSQ_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEEJRKNS5_8OffsetToINS7_8LigatureIS9_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSN_11hb_priorityILj0EEDpOSO_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS6_11MediumTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_6Layout9GSUB_impl8LigatureINS6_11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS7_11LigatureSetIS9_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSK_DpOSN_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_6Layout9GSUB_impl8LigatureINS6_11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS7_11LigatureSetIS9_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSK_11hb_priorityILj0EEDpOSL_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS4_11LigatureSetIS6_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_11MediumTypesEEEEE3getEv:
  157|  3.61k|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS4_11LigatureSetIS6_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSR_OSQ_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS5_11MediumTypesEEEEEC2ESC_:
  153|  3.17k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS9_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT6Layout9GSUB_impl11LigatureSetINS4_11MediumTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSC_OSD_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEERKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSM_OSN_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEERKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSM_OSN_11hb_priorityILj1EE:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEEJRKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSP_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEEJRKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSM_11hb_priorityILj0EEDpOSN_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout10SmallTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_4RuleINS4_6Layout10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_7RuleSetIS8_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSJ_DpOSM_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_4RuleINS4_6Layout10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_7RuleSetIS8_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSJ_11hb_priorityILj0EEDpOSK_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS1_7RuleSetIS5_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|  1.88M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout10SmallTypesEEEEE3getEv:
  157|  1.88M|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSQ_OSP_:
   76|   990k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout10SmallTypesEEEEEC2ESB_:
  153|   990k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|   990k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT7RuleSetINS1_6Layout10SmallTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS8_:
   76|   990k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout10SmallTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSB_OSC_:
   76|   990k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEERKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSM_OSN_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEERKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSM_OSN_11hb_priorityILj1EE:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEEJRKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSP_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEEJRKNS5_8OffsetToINS5_4RuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSM_11hb_priorityILj0EEDpOSN_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS5_6Layout11MediumTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_4RuleINS4_6Layout11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_7RuleSetIS8_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSJ_DpOSM_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_4RuleINS4_6Layout11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_7RuleSetIS8_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSJ_11hb_priorityILj0EEDpOSK_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS1_7RuleSetIS5_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|  29.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout11MediumTypesEEEEE3getEv:
  157|  29.6k|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS1_7RuleSetIS5_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSQ_OSP_:
   76|  32.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT7RuleSetINS4_6Layout11MediumTypesEEEEEC2ESB_:
  153|  32.3k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|  32.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT7RuleSetINS1_6Layout11MediumTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS8_:
   76|  32.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT7RuleSetINS3_6Layout11MediumTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSB_OSC_:
   76|  32.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEERKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSM_OSN_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEERKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSM_OSN_11hb_priorityILj1EE:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEEJRKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSP_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEEJRKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSM_11hb_priorityILj0EEDpOSN_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout10SmallTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_9ChainRuleINS4_6Layout10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_12ChainRuleSetIS8_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSJ_DpOSM_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_9ChainRuleINS4_6Layout10SmallTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_12ChainRuleSetIS8_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSJ_11hb_priorityILj0EEDpOSK_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS1_12ChainRuleSetIS5_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|  7.07M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout10SmallTypesEEEEE3getEv:
  157|  7.07M|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSQ_OSP_:
   76|   852k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout10SmallTypesEEEEEC2ESB_:
  153|   852k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|   852k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT12ChainRuleSetINS1_6Layout10SmallTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS8_:
   76|   852k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout10SmallTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSB_OSC_:
   76|   852k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEERKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSM_OSN_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEERKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSM_OSN_11hb_priorityILj1EE:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEEJRKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSP_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEEJRKNS5_8OffsetToINS5_9ChainRuleIS8_EENS5_7IntTypeItLj2EEELb1EEEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSM_11hb_priorityILj0EEDpOSN_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS5_6Layout11MediumTypesEEEEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIPK4$_40JRKN2OT8OffsetToINS4_9ChainRuleINS4_6Layout11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_12ChainRuleSetIS8_EEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSJ_DpOSM_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIPK4$_40JRKN2OT8OffsetToINS4_9ChainRuleINS4_6Layout11MediumTypesEEENS4_7IntTypeItLj2EEELb1EEEPKNS4_12ChainRuleSetIS8_EEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSJ_11hb_priorityILj0EEDpOSK_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEPKNS1_12ChainRuleSetIS5_EEEEDTplfp_fp0_ERKT_RKT0_:
   76|   493k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout11MediumTypesEEEEE3getEv:
  157|   493k|  T& get () { return v; }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEE21hb_map_iter_factory_tI12hb_partial_tILj2EPK4$_40PKNS1_12ChainRuleSetIS5_EEEL24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSQ_OSP_:
   76|   435k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZN20hb_reference_wrapperI12hb_partial_tILj2EPK4$_40PKN2OT12ChainRuleSetINS4_6Layout11MediumTypesEEEEEC2ESB_:
  153|   435k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clIRKN2OT7ArrayOfINS1_8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEES9_EEEEDTclsr3stdE7forwardIT_Efp_EEOSE_:
   76|   435k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_40clIPKN2OT12ChainRuleSetINS1_6Layout11MediumTypesEEEEEDTcl10hb_partialILi2EEpsfpTclsr3stdE7forwardIT_Efp_EEEOS8_:
   76|   435k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_Z10hb_partialILj2EPK4$_40PKN2OT12ChainRuleSetINS3_6Layout11MediumTypesEEEEDTcv12hb_partial_tIXT_ET0_T1_E_fp_fp0_EEOSB_OSC_:
   76|   435k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EERK4$_34LSO_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EEEEDTclsr3stdE7forwardIT_Efp_EEOSY_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_14clIRK4$_11bEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOS5_OS6_:
   75|   193M|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-layout.cc:_ZNK4$_144implIRK4$_11bEEDTclL_ZL6hb_hasEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj1EE:
   76|   193M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_15clIRK4$_11bEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOS5_OS6_:
   75|   193M|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-layout.cc:_ZNK4$_154implIRK4$_11bEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj0EE:
   76|   193M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRK4$_11JbEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS4_DpOS7_:
   76|   386M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRK4$_11JbEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS4_11hb_priorityILj0EEDpOS5_:
   76|   386M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_11clIbEEDTclsr3stdE7forwardIT_Efp_EEOS1_:
   76|   386M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRK4$_11bEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS4_OS5_:
   76|   193M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRK4$_11bEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS4_OS5_11hb_priorityILj1EE:
   76|   193M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_SC_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSF_OSG_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_SC_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSF_OSG_11hb_priorityILj1EE:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_JSC_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSF_DpOSI_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_JSC_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSF_11hb_priorityILj0EEDpOSG_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  1.16M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0EELSO_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSY_OSX_:
   76|  51.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_EC2ESC_:
  153|  51.9k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0ELSO_0EERK4$_34LSO_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_6Layout9GSUB_impl8LigatureINS5_11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS6_11LigatureSetIS8_EEEL24hb_function_sortedness_t0ELPv0EEZNKSK_11would_applyEPNS3_24hb_would_apply_context_tEEUlRKS9_E_LSO_0ELSP_0EEEEDTclsr3stdE7forwardIT_Efp_EEOSY_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_SC_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSF_OSG_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_SC_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSF_OSG_11hb_priorityILj1EE:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_JSC_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSF_DpOSI_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_JSC_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSF_11hb_priorityILj0EEDpOSG_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tEEUlRKNS3_8LigatureIS5_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSF_:
   76|  3.61k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_6Layout9GSUB_impl8LigatureINS4_11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS5_11LigatureSetIS7_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSJ_11would_applyEPNS2_24hb_would_apply_context_tEEUlRKS8_E_LSN_0EELSO_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSY_OSX_:
   76|  3.17k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tEEUlRKNS2_8LigatureIS4_EEE_EC2ESC_:
  153|  3.17k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|  89.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|  89.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|   116k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|   116k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|   116k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|   116k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|   116k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  89.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_EC2ESE_:
  153|  89.4k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|  2.25k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|  2.25k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|  1.81k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|  1.81k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|  1.81k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|  1.81k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|  1.81k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  2.25k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_EC2ESE_:
  153|  2.25k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|   335k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|   335k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|  6.54M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|  6.54M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|  6.54M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|  6.54M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|  6.54M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|   335k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_EC2ESE_:
  153|   335k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|  5.24k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_11would_applyEPNS3_24hb_would_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|  5.24k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|    870|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|    870|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|    870|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|    870|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE11would_applyEPNS1_24hb_would_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|    870|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_11would_applyEPNS2_24hb_would_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  5.24k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE11would_applyEPNS0_24hb_would_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_EC2ESE_:
  153|  5.24k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_0clIjRjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   359k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.53k, False: 178k]
  ------------------
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT7IntTypeIjLj3EEEE9hb_sink_tIS0_IjEELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSB_OSA_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|   901k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|   901k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|  1.76M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|  1.76M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|  1.76M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|  1.76M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT7RuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|  1.76M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_0clIRiiEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   401k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 177k, False: 23.2k]
  ------------------
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|   901k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_EC2ESE_:
  153|   901k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|  30.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_4RuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_7RuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_25ContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|  30.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|  27.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|  27.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|  27.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|  27.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT7RuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_25ContextApplyLookupContextEEUlRKNS1_4RuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|  27.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_4RuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_7RuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_25ContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|  30.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT7RuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_25ContextApplyLookupContextEEUlRKNS0_4RuleIS3_EEE_EC2ESE_:
  153|  30.1k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|   517k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout10SmallTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|   517k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|   532k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|   532k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|   532k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|   532k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT12ChainRuleSetINS1_6Layout10SmallTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|   532k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout10SmallTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|   517k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout10SmallTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_EC2ESE_:
  153|   517k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tIS0_I10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EEZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0ELSN_0EERK4$_34LSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS12_OS11_:
   76|   430k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tIS1_I10hb_array_tIKN2OT8OffsetToINS3_9ChainRuleINS3_6Layout11MediumTypesEEENS3_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS3_12ChainRuleSetIS7_EEEL24hb_function_sortedness_t0ELPv0EEZNKSJ_5applyEPNS3_21hb_ot_apply_context_tERKNS3_30ChainContextApplyLookupContextEEUlRKS8_E_LSN_0ELSO_0EEEEDTclsr3stdE7forwardIT_Efp_EEOS10_:
   76|   430k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSH_OSI_:
   76|   492k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_SE_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSH_OSI_11hb_priorityILj1EE:
   76|   492k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSH_DpOSK_:
   76|   492k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_JSE_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSH_11hb_priorityILj0EEDpOSI_:
   76|   492k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT12ChainRuleSetINS1_6Layout11MediumTypesEE5applyEPNS1_21hb_ot_apply_context_tERKNS1_30ChainContextApplyLookupContextEEUlRKNS1_9ChainRuleIS4_EEE_EEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|   492k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT8OffsetToINS2_9ChainRuleINS2_6Layout11MediumTypesEEENS2_7IntTypeItLj2EEELb1EEEE12hb_partial_tILj2EPK4$_40PKNS2_12ChainRuleSetIS6_EEEL24hb_function_sortedness_t0ELPv0EE21hb_map_iter_factory_tIZNKSI_5applyEPNS2_21hb_ot_apply_context_tERKNS2_30ChainContextApplyLookupContextEEUlRKS7_E_LSM_0EELSN_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS10_OSZ_:
   76|   430k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT12ChainRuleSetINS0_6Layout11MediumTypesEE5applyEPNS0_21hb_ot_apply_context_tERKNS0_30ChainContextApplyLookupContextEEUlRKNS0_9ChainRuleIS3_EEE_EC2ESE_:
  153|   430k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E_L24hb_function_sortedness_t0ELPv0EERK4$_34LSD_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSJ_OSI_:
   76|   674k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E_L24hb_function_sortedness_t0ELPv0EEEEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|   674k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_S8_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSB_OSC_:
   76|  3.33M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_S8_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSB_OSC_11hb_priorityILj1EE:
   76|  3.33M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_JS8_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSB_DpOSE_:
   76|  3.33M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_JS8_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSB_11hb_priorityILj0EEDpOSC_:
   76|  3.33M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE_EEDTclsr3stdE7forwardIT_Efp_EEOSB_:
   76|  3.33M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE21hb_map_iter_factory_tIZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E_L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSG_OSF_:
   76|   674k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE_EC2ES8_:
  153|   674k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-layout.cc:_ZNK3$_4clI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEEEDTclsr3stdE7forwardIT_Efp_EEOS7_:
   76|  19.4M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS2_33hb_ot_layout_lookup_accelerator_t5applyEPNS2_21hb_ot_apply_context_tEjbEUlRS5_E0_L24hb_function_sortedness_t0ELPv0EERK4$_34LSD_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSJ_OSI_:
   76|  18.7M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIR13hb_map_iter_tI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEEZNKS3_33hb_ot_layout_lookup_accelerator_t5applyEPNS3_21hb_ot_apply_context_tEjbEUlRS6_E0_L24hb_function_sortedness_t0ELPv0EEEEDTclsr3stdE7forwardIT_Efp_EEOSH_:
   76|  18.7M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_12clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_S8_EEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSB_OSC_:
   76|   179M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_124implIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_S8_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSB_OSC_11hb_priorityILj1EE:
   76|   179M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_13clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_JS8_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSB_DpOSE_:
   76|   179M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK4$_134implIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_JS8_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSB_11hb_priorityILj0EEDpOSC_:
   76|   179M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZNK3$_4clIRZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRKNS1_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_EEDTclsr3stdE7forwardIT_Efp_EEOSB_:
   76|   179M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-layout.cc:_ZorI10hb_array_tIKN2OT33hb_accelerate_subtables_context_t15hb_applicable_tEE21hb_map_iter_factory_tIZNKS1_33hb_ot_layout_lookup_accelerator_t5applyEPNS1_21hb_ot_apply_context_tEjbEUlRS4_E0_L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSG_OSF_:
   76|  18.7M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS0_21hb_ot_apply_context_tEjbEUlRKNS0_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_EC2ES8_:
  153|  18.7M|  hb_reference_wrapper (T v) : v (v) {}
_ZN21hb_sanitize_context_t8dispatchIN2OT4AxisEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT4AxisEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.19k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13SortedArrayOfINS1_3TagENS1_7IntTypeItLj2EEEEEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS9_:
   76|  1.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13SortedArrayOfINS1_3TagENS1_7IntTypeItLj2EEEEEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS7_:
   76|  1.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT14BaseScriptListEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT14BaseScriptListEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16BaseScriptRecordEJPKNS1_14BaseScriptListEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   339k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16BaseScriptRecordEJPKNS1_14BaseScriptListEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   339k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10BaseScriptEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  18.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10BaseScriptEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  18.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT10BaseValuesEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  4.34k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT10BaseValuesEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  4.34k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEJPKNS1_10BaseValuesEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOSC_:
   76|  6.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEJPKNS1_10BaseValuesEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOSA_:
   76|  6.47k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT9BaseCoordEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  10.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT9BaseCoordEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  10.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT6MinMaxEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  81.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT6MinMaxEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  81.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT16FeatMinMaxRecordEJPKNS1_6MinMaxEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  71.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT16FeatMinMaxRecordEJPKNS1_6MinMaxEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  71.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT17BaseLangSysRecordEJPKNS1_10BaseScriptEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  1.25M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT17BaseLangSysRecordEJPKNS1_10BaseScriptEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  1.25M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-math.cc:_ZNK3$_1clIRjRKjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|     80|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 40, False: 0]
  ------------------
hb-ot-math.cc:_ZNK3$_1clIjRKjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|     80|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 34, False: 6]
  ------------------
hb-ot-math.cc:_ZNK3$_4clIR10hb_array_tIKN2OT22MathGlyphVariantRecordEEEEDTclsr3stdE7forwardIT_Efp_EEOS7_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-math.cc:_ZNK3$_4clIR10hb_array_tI26hb_ot_math_glyph_variant_tEEEDTclsr3stdE7forwardIT_Efp_EEOS5_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-math.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   133k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 66.6k, False: 5]
  ------------------
hb-ot-math.cc:_ZNK3$_4clIR10hb_array_tIKN2OT19MathGlyphPartRecordEEEEDTclsr3stdE7forwardIT_Efp_EEOS7_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-math.cc:_ZNK3$_4clIR10hb_array_tI23hb_ot_math_glyph_part_tEEEDTclsr3stdE7forwardIT_Efp_EEOS5_:
   76|  33.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13MathConstantsEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    942|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13MathConstantsEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    942|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT13MathGlyphInfoEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  1.14k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT13MathGlyphInfoEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  1.14k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT25MathItalicsCorrectionInfoEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    707|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT25MathItalicsCorrectionInfoEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    707|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT15MathValueRecordEJPKNS1_25MathItalicsCorrectionInfoEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   837k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT15MathValueRecordEJPKNS1_25MathItalicsCorrectionInfoEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   837k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT23MathTopAccentAttachmentEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    778|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT23MathTopAccentAttachmentEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    778|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT15MathValueRecordEJPKNS1_23MathTopAccentAttachmentEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|   328k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT15MathValueRecordEJPKNS1_23MathTopAccentAttachmentEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|   328k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12MathKernInfoEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    700|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12MathKernInfoEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    700|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT18MathKernInfoRecordEJPKNS1_12MathKernInfoEEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS8_:
   76|  3.91k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT18MathKernInfoRecordEJPKNS1_12MathKernInfoEEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS6_:
   76|  3.91k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT8MathKernEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  6.94k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT8MathKernEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  6.94k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT12MathVariantsEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|    859|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT12MathVariantsEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|    859|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT21MathGlyphConstructionEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  11.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT21MathGlyphConstructionEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  11.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t8dispatchIN2OT17MathGlyphAssemblyEJEEEDTcl9_dispatchfp_cv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEERKT_DpOS5_:
   76|  6.64k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN21hb_sanitize_context_t9_dispatchIN2OT17MathGlyphAssemblyEJEEEDTcldtfp_8sanitizefpTspclsr3stdE7forwardIT0_Efp1_EEERKT_11hb_priorityILj1EEDpOS3_:
   76|  6.64k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-meta.cc:_ZNK3$_5clIRKjRKN2OT7DataMapEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS7_OS8_:
   76|  4.20k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-meta.cc:_ZNK3$_54implIRKjRKN2OT7DataMapEEEDTeqcldtclsr3stdE7forwardIT0_Efp0_E3cmpclsr3stdE7forwardIT_Efp_EELi0EEOS8_OS7_11hb_priorityILj3EE:
   76|  4.20k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-name.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  65.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 32.6k, False: 0]
  ------------------
hb-ot-name.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|    990|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 105, False: 390]
  ------------------
hb-ot-var.cc:_ZNK3$_1clIRjRKN2OT7IntTypeItLj2EEEEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   133k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 66.6k, False: 0]
  ------------------
hb-paint-extents.cc:_ZNK3$_1clIRfS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.13M, False: 297k]
  ------------------
hb-paint-extents.cc:_ZNK3$_0clIRfS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.27M, False: 152k]
  ------------------
hb-paint-extents.cc:_ZNK3$_0clIRfRKfEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   144k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 65.5k, False: 6.72k]
  ------------------
hb-paint-extents.cc:_ZNK3$_1clIRfRKfEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   144k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 62.7k, False: 9.53k]
  ------------------
hb-ot-cff2-table.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|    110|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 55, False: 0]
  ------------------
hb-ot-cff2-table.cc:_ZNK3$_1clIRjRKN2OT7IntTypeItLj2EEEEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|    108|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 54, False: 0]
  ------------------
hb-ot-cff2-table.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  7.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 0, False: 3.87k]
  ------------------
hb-ot-map.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  37.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 18.7k, False: 0]
  ------------------
hb-ot-map.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   119k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 59.7k, False: 0]
  ------------------
hb-ot-map.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   481k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 48.6k, False: 191k]
  ------------------
hb-ot-shaper-arabic.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  50.3k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 2.68k, False: 22.5k]
  ------------------
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EEEEDTclsr3stdE7forwardIT_Efp_EEOS7_:
   76|  23.6k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZorI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EERK3$_6L24hb_function_sortedness_t1ELPv0EE24hb_filter_iter_factory_tIZNS3_6Layout9GSUB_impl11SingleSubst9serializeIS8_LSD_0EEEbP22hb_serialize_context_tT_EUljE_RK4$_11ELSD_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardISM_Efp_EEEOSM_OSS_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS0_11HBGlyphID16EE10hb_array_tIS7_EELPv0EEEbP22hb_serialize_context_tT_EUljE_EC2ESG_:
  153|    787|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK4$_11EC2ES2_:
  163|    787|  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
hb-ot-shaper-arabic.cc:_ZNK4$_15clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_RS8_EEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardISG_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOSG_OSL_:
   75|  26.7k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_154implIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_RS8_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardISG_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSG_OSK_11hb_priorityILj0EE:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_JRS8_EEEDTcl4implclsr3stdE7forwardISG_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSG_DpOSM_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_JRS8_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardISG_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSG_11hb_priorityILj0EEDpOSK_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUljE_EEDTclsr3stdE7forwardISG_Efp_EEOSG_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
_ZN20hb_reference_wrapperIZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS0_11HBGlyphID16EE10hb_array_tIS7_EELPv0EEEbP22hb_serialize_context_tT_EUljE_E3getEv:
  157|  26.7k|  T& get () { return v; }
hb-ot-shaper-arabic.cc:_ZNK4$_12clIRK4$_11RN2OT11HBGlyphID16EEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS7_OS8_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_124implIRK4$_11RN2OT11HBGlyphID16EEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS7_OS8_11hb_priorityILj1EE:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRK4$_11JRN2OT11HBGlyphID16EEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS7_DpOSA_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRK4$_11JRN2OT11HBGlyphID16EEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS7_11hb_priorityILj0EEDpOS8_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIRK4$_11EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_11clIRN2OT11HBGlyphID16EEEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  26.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK4$_11E3getEv:
  167|  26.7k|  T& get () { return *v; }
hb-ot-shaper-arabic.cc:_ZNK4$_12clIRK3$_69hb_pair_tIRN2OT11HBGlyphID16ES7_EEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS9_OSA_:
   76|  50.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_124implIRK3$_69hb_pair_tIRN2OT11HBGlyphID16ES7_EEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS9_OSA_11hb_priorityILj1EE:
   76|  50.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRK3$_6J9hb_pair_tIRN2OT11HBGlyphID16ES7_EEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS9_DpOSC_:
   76|  50.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRK3$_6J9hb_pair_tIRN2OT11HBGlyphID16ES7_EEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS9_11hb_priorityILj0EEDpOSA_:
   76|  50.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIRK3$_6EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  50.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK3$_6E3getEv:
  167|  50.8k|  T& get () { return *v; }
hb-ot-shaper-arabic.cc:_ZorI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t1EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSG_OSF_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK3$_6EC2ES2_:
  163|  1.47k|  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS4_EEEEDTclsr3stdE7forwardIT_Efp_EEOSA_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_14clIRjjEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOS3_OS4_:
   75|  3.36k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_144implIRjjEEDTeqclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEOS2_OS3_11hb_priorityILj0EE:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_12clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_SH_IRS8_SL_EEEDTcl4implclsr3stdE7forwardISG_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOSG_OSN_:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_124implIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_SH_IRS8_SL_EEEDTclL_ZL9hb_invokeEclsr3stdE7forwardISG_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSG_OSN_11hb_priorityILj1EE:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_JSH_IRS8_SL_EEEEDTcl4implclsr3stdE7forwardISG_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSG_DpOSP_:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_JSH_IRS8_SL_EEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardISG_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSG_11hb_priorityILj0EEDpOSN_:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIRZN2OT6Layout9GSUB_impl11SingleSubst9serializeI13hb_zip_iter_tI17hb_sorted_array_tINS1_11HBGlyphID16EE10hb_array_tIS8_EELPv0EEEbP22hb_serialize_context_tT_EUl9hb_pair_tIjjEE_EEDTclsr3stdE7forwardISG_Efp_EEOSG_:
   76|  3.36k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_34clIR13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_5L24hb_function_sortedness_t1ELPv0EEEEN10_hb_head_tIjJDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_EEEEE4typeEOSI_:
   75|  1.32k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_344implIR13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_5L24hb_function_sortedness_t1ELPv0EEEEN10_hb_head_tIjJDTcldtfp_3lenEEEE4typeEOT_11hb_priorityILj1EE:
   75|  1.32k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  4.03k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 2.01k, False: 0]
  ------------------
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK3$_5EcvS2_Ev:
  166|  1.28k|  operator T& () { return *v; }
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK3$_5EC2ES2_:
  163|  2.07k|  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
hb-ot-shaper-arabic.cc:_ZNK4$_12clIRK3$_59hb_pair_tIRN2OT11HBGlyphID16ES7_EEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS9_OSA_:
   76|  64.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_124implIRK3$_59hb_pair_tIRN2OT11HBGlyphID16ES7_EEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS9_OSA_11hb_priorityILj1EE:
   76|  64.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRK3$_5J9hb_pair_tIRN2OT11HBGlyphID16ES7_EEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS9_DpOSC_:
   76|  64.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRK3$_5J9hb_pair_tIRN2OT11HBGlyphID16ES7_EEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS9_11hb_priorityILj0EEDpOSA_:
   76|  64.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIRK3$_5EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  64.9k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZN20hb_reference_wrapperIRK3$_5E3getEv:
  167|  64.9k|  T& get () { return *v; }
hb-ot-shaper-arabic.cc:_ZorI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE21hb_map_iter_factory_tIRK3$_5L24hb_function_sortedness_t1EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSG_OSF_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZorI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS3_EE21hb_map_iter_factory_tIRK3$_6L24hb_function_sortedness_t0EELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSG_OSF_:
   76|    692|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_34clIR13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_6L24hb_function_sortedness_t0ELPv0EEEEN10_hb_head_tIjJDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_EEEEE4typeEOSI_:
   75|    692|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_344implIR13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIN2OT11HBGlyphID16EE10hb_array_tIS5_EERK3$_6L24hb_function_sortedness_t0ELPv0EEEEN10_hb_head_tIjJDTcldtfp_3lenEEEE4typeEOT_11hb_priorityILj1EE:
   75|    692|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR17hb_sorted_array_tIN2OT11HBGlyphID16EEEEDTclsr3stdE7forwardIT_Efp_EEOS6_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR10hb_array_tIN2OT11HBGlyphID16EEEEDTclsr3stdE7forwardIT_Efp_EEOS6_:
   76|    787|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_3clIPN22hb_serialize_context_t8object_tEEEN10_hb_head_tIjJDTcl4implfp_cv11hb_priorityILj16EE_EEEEE4typeERKT_:
   75|  22.8k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_34implIPN22hb_serialize_context_t8object_tEEEN10_hb_head_tIjJDTcldtclL_ZL8hb_derefEfp_E4hashEEEE4typeERKT_11hb_priorityILj2EE:
   75|  22.8k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIN22hb_serialize_context_t8object_tEEEDTdefp_EPT_:
   76|  22.8k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIKN22hb_serialize_context_t8object_tEEEDTdefp_EPT_:
   76|  35.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_3clIPKN22hb_serialize_context_t8object_tEEEN10_hb_head_tIjJDTcl4implfp_cv11hb_priorityILj16EE_EEEEE4typeERKT_:
   75|  21.2k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_34implIPKN22hb_serialize_context_t8object_tEEEN10_hb_head_tIjJDTcldtclL_ZL8hb_derefEfp_E4hashEEEE4typeERKT_11hb_priorityILj2EE:
   75|  21.2k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_0clIjRjEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  4.07k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 2.03k, False: 8]
  ------------------
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EEEEDTclsr3stdE7forwardIT_Efp_EEOS8_:
   76|  18.4k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZorI10hb_array_tIKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEE10hb_apply_tIRFvPvEELSA_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSF_OSE_:
   76|  1.71k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_13clIRFvPvEJRKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSC_DpOSF_:
   76|  2.05k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_134implIRFvPvEJRKPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSC_11hb_priorityILj0EEDpOSD_:
   76|  2.05k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIFvPvEEEDTdefp_EPT_:
   76|  2.05k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_4clIR11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EEEEDTclsr3stdE7forwardIT_Efp_EEOSA_:
   76|  1.71k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-arabic.cc:_ZNK3$_0clIiiEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  29.7k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 14.8k, False: 0]
  ------------------
hb-ot-shaper-arabic.cc:_ZNK4$_34clIR10hb_array_tIKN2OT11HBGlyphID16EEEEN10_hb_head_tIjJDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_EEEEE4typeEOS8_:
   75|  14.8k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_344implIR10hb_array_tIKN2OT11HBGlyphID16EEEEN10_hb_head_tIjJDTcldtfp_3lenEEEE4typeEOT_11hb_priorityILj1EE:
   75|  14.8k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_34clIR17hb_sorted_array_tIKN2OT11HBGlyphID16EEEEN10_hb_head_tIjJDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_EEEEE4typeEOS8_:
   75|  1.49k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-arabic.cc:_ZNK4$_344implIR17hb_sorted_array_tIKN2OT11HBGlyphID16EEEEN10_hb_head_tIjJDTcldtfp_3lenEEEE4typeEOT_11hb_priorityILj1EE:
   75|  1.49k|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-indic.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  2.75k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.10k, False: 276]
  ------------------
hb-ot-shaper-indic.cc:_ZNK3$_1clI13ot_position_tS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   573k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 279k, False: 7.57k]
  ------------------
hb-ot-shaper-indic.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|   118k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 49.2k, False: 10.0k]
  ------------------
hb-ot-shaper-indic.cc:_ZNK3$_1clIRjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  6.75k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 3.02k, False: 350]
  ------------------
hb-ot-shaper-use.cc:_ZorI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEERK4$_32LSG_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSU_OST_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIR13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEEEDTclsr3stdE7forwardIT_Efp_EEOSS_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZorI16hb_filter_iter_tIS0_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EERK4$_29LSG_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOST_OSS_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_29clI16hb_filter_iter_tIS1_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEjLSH_0EEEDTclL_ZL6hb_zipEclL_ZL7hb_iotaEfp0_Efp_EEOT_T0_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIR14hb_iota_iter_tIjjEEEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  3.49k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIR16hb_filter_iter_tIS1_I13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEEEDTclsr3stdE7forwardIT_Efp_EEOSR_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZorI16hb_filter_iter_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EE24hb_filter_iter_factory_tIZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9ELSG_0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSR_OSQ_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_EC2ES7_:
  153|  1.74k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIRK3$_9EC2ES2_:
  163|  1.74k|  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
hb-ot-shaper-use.cc:_ZNK4$_13clIRZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_S3_IjRS4_EEEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOSD_OSE_:
   75|  6.86M|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_134implIRZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_S3_IjRS4_EEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOSC_OSD_11hb_priorityILj0EE:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_11clIRZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_JS3_IjRS4_EEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOSC_DpOSF_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_114implIRZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_JS3_IjRS4_EEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOSC_11hb_priorityILj0EEDpOSD_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIRZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_EEDTclsr3stdE7forwardIT_Efp_EEOSA_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIZL18find_syllables_useP11hb_buffer_tEUl9hb_pair_tIjRK15hb_glyph_info_tEE_E3getEv:
  157|  6.86M|  T& get () { return v; }
hb-ot-shaper-use.cc:_ZNK4$_10clIRK3$_99hb_pair_tIjR15hb_glyph_info_tEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS8_OS9_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_104implIRK3$_99hb_pair_tIjR15hb_glyph_info_tEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS8_OS9_11hb_priorityILj1EE:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_11clIRK3$_9J9hb_pair_tIjR15hb_glyph_info_tEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS8_DpOSB_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_114implIRK3$_9J9hb_pair_tIjR15hb_glyph_info_tEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS8_11hb_priorityILj0EEDpOS9_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIRK3$_9EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_9clI9hb_pair_tIjR15hb_glyph_info_tEEEDTclsr3stdE7forwardIT_Efp_EEOS5_:
   76|  6.86M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIRK3$_9E3getEv:
  167|  6.86M|  T& get () { return *v; }
hb-ot-shaper-use.cc:_ZNK4$_13clIRZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_RS3_EEN10_hb_head_tIbJDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEEE4typeEOSA_OSB_:
   75|  7.15M|#define HB_RETURN(Ret, E) -> hb_head_t<Ret, decltype ((E))> { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_134implIRZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_RS3_EEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS9_OSA_11hb_priorityILj0EE:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_11clIRZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_JRS3_EEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS9_DpOSC_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_114implIRZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_JRS3_EEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS9_11hb_priorityILj0EEDpOSA_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIRZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_EEDTclsr3stdE7forwardIT_Efp_EEOS8_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_E3getEv:
  157|  7.15M|  T& get () { return v; }
hb-ot-shaper-use.cc:_ZNK4$_10clIRK4$_319hb_pair_tIjR15hb_glyph_info_tEEEDTcl4implclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_Ecv11hb_priorityILj16EE_EEEOS8_OS9_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_104implIRK4$_319hb_pair_tIjR15hb_glyph_info_tEEEDTclL_ZL9hb_invokeEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEEOS8_OS9_11hb_priorityILj1EE:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_11clIRK4$_31J9hb_pair_tIjR15hb_glyph_info_tEEEEDTcl4implclsr3stdE7forwardIT_Efp_Ecv11hb_priorityILj16EE_Espclsr3stdE7forwardIT0_Efp0_EEEOS8_DpOSB_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_114implIRK4$_31J9hb_pair_tIjR15hb_glyph_info_tEEEEDTclclL_ZL8hb_derefEclsr3stdE7forwardIT_Efp_EEspclsr3stdE7forwardIT0_Efp1_EEEOS8_11hb_priorityILj0EEDpOS9_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIRK4$_31EEDTclsr3stdE7forwardIT_Efp_EEOS4_:
   76|  7.15M|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIRK4$_31E3getEv:
  167|  7.15M|  T& get () { return *v; }
hb-ot-shaper-use.cc:_ZorI13hb_zip_iter_tI14hb_iota_iter_tIjjE10hb_array_tI15hb_glyph_info_tEE24hb_filter_iter_factory_tIZL18find_syllables_useP11hb_buffer_tEUlRKS4_E_RK4$_31ELPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOSJ_OSI_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIZL18find_syllables_useP11hb_buffer_tEUlRK15hb_glyph_info_tE_EC2ES5_:
  153|  1.74k|  hb_reference_wrapper (T v) : v (v) {}
hb-ot-shaper-use.cc:_ZN20hb_reference_wrapperIRK4$_31EC2ES2_:
  163|  1.74k|  hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
hb-ot-shaper-use.cc:_ZorI10hb_array_tI15hb_glyph_info_tERK4$_29LPv0EEDTclclsr3stdE7forwardIT0_Efp0_Eclsr3stdE7forwardIT_Efp_EEEOS8_OS7_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK4$_29clI10hb_array_tI15hb_glyph_info_tEjLPv0EEEDTclL_ZL6hb_zipEclL_ZL7hb_iotaEfp0_Efp_EEOT_T0_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_4clIR10hb_array_tI15hb_glyph_info_tEEEDTclsr3stdE7forwardIT_Efp_EEOS5_:
   76|  1.74k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-ot-shaper-use.cc:_ZNK3$_1clIjjEEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|   380k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 98, False: 190k]
  ------------------
hb-buffer-serialize.cc:_ZNK3$_2clIRjS1_S1_EEDTclL_ZL6hb_minEclL_ZL6hb_maxEclsr3stdE7forwardIT_Efp_Eclsr3stdE7forwardIT0_Efp0_EEclsr3stdE7forwardIT1_Efp1_EEEOS2_OS3_OS4_:
   76|    766|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
hb-buffer-serialize.cc:_ZNK3$_0clIRjS1_EEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  1.53k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 766, False: 0]
  ------------------
hb-buffer-serialize.cc:_ZNK3$_1clIRjS1_EEDTqulefp_fp0_fp_fp0_EOT_OT0_:
   76|  3.06k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 1.53k, False: 0]
  ------------------
hb-buffer-serialize.cc:_ZNK3$_0clIiiEEDTqugefp_fp0_fp_fp0_EOT_OT0_:
   76|  29.1k|#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); }
  ------------------
  |  Branch (76:55): [True: 0, False: 14.5k]
  ------------------

_ZN10hb_mutex_t4initEv:
  105|  33.1k|  void init   () { hb_mutex_impl_init   ((hb_mutex_impl_t *) m); }
  ------------------
  |  |   54|  33.1k|#define hb_mutex_impl_init(M)	pthread_mutex_init (M, nullptr)
  ------------------
_ZN10hb_mutex_t4lockEv:
  106|   163k|  void lock   () { hb_mutex_impl_lock   ((hb_mutex_impl_t *) m); }
  ------------------
  |  |   55|   163k|#define hb_mutex_impl_lock(M)	pthread_mutex_lock (M)
  ------------------
_ZN10hb_mutex_t6unlockEv:
  107|   163k|  void unlock () { hb_mutex_impl_unlock ((hb_mutex_impl_t *) m); }
  ------------------
  |  |   56|   163k|#define hb_mutex_impl_unlock(M)	pthread_mutex_unlock (M)
  ------------------
_ZN10hb_mutex_t4finiEv:
  108|  33.1k|  void fini   () { hb_mutex_impl_finish ((hb_mutex_impl_t *) m); }
  ------------------
  |  |   57|  33.1k|#define hb_mutex_impl_finish(M)	pthread_mutex_destroy (M)
  ------------------

_ZN16CrapOrNullHelperIKN2OT7IntTypeIsLj2EEEE3getEv:
  196|  10.2k|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|  10.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN10NullHelperIN2OT7IntTypeIsLj2EEEE8get_nullEv:
  122|  10.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7IntTypeIsLj2EEEE8get_nullEv:
  113|  10.2k|  {
  114|  10.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  10.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  10.2k|  }
_ZN10NullHelperIN3AAT11FeatureNameEE8get_nullEv:
  122|  66.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT11FeatureNameEE8get_nullEv:
  113|  66.6k|  {
  114|  66.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  66.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  66.6k|  }
_ZN16CrapOrNullHelperIKN3AAT11SettingNameEE3getEv:
  196|      2|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|      2|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN10NullHelperIN3AAT11SettingNameEE8get_nullEv:
  122|      2|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT11SettingNameEE8get_nullEv:
  132|      2|	  static Namespace::Type const & get_null () { \
  133|      2|	    return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
  134|      2|	  } \
_ZN10NullHelperIN2OT18GDEF_accelerator_tEE8get_nullEv:
  122|  33.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18GDEF_accelerator_tEE8get_nullEv:
  113|  33.7k|  {
  114|  33.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.7k|  }
_ZN16hb_nonnull_ptr_tI9hb_blob_tEC2EPS0_:
  210|   589k|  hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
_ZN16hb_nonnull_ptr_tI9hb_blob_tEaSEPS0_:
  211|  1.21M|  T * operator = (T *v_)   { return v = v_; }
_ZNK16hb_nonnull_ptr_tI9hb_blob_tEptEv:
  212|  19.3M|  T * operator -> () const { return get (); }
_ZNK16hb_nonnull_ptr_tI9hb_blob_tE3getEv:
  218|  19.8M|  T * get () const { return v ? v : const_cast<T *> (&Null (T)); }
  ------------------
  |  |  124|  67.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (218:29): [True: 19.7M, False: 67.3k]
  ------------------
_ZN10NullHelperIN2OT4GDEFEE8get_nullEv:
  122|   839k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4GDEFEE8get_nullEv:
  113|   839k|  {
  114|   839k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   839k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   839k|  }
_ZNK16hb_nonnull_ptr_tI9hb_blob_tE7get_rawEv:
  219|  1.62M|  T * get_raw () const { return v; }
_ZN10NullHelperIN3AAT4ankrEE8get_nullEv:
  122|  35.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4ankrEE8get_nullEv:
  113|  35.9k|  {
  114|  35.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  35.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  35.9k|  }
_ZN10NullHelperI11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEE8get_nullEv:
  122|  1.82k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEE8get_nullEv:
  113|  1.82k|  {
  114|  1.82k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.82k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.82k|  }
_ZN10CrapHelperIN12hb_aat_map_t13range_flags_tEE8get_crapEv:
  186|  1.45k|  static Type & get_crap () { return Crap<Type> (); }
hb-aat-layout.cc:_ZL4CrapIN12hb_aat_map_t13range_flags_tEERT_v:
  176|    725|static inline Type& Crap () {
  177|    725|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    725|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    725|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    725|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    725|  return *obj;
  181|    725|}
_ZN10NullHelperIN12hb_aat_map_t13range_flags_tEE8get_nullEv:
  122|  1.45k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN12hb_aat_map_t13range_flags_tEE8get_nullEv:
  113|  1.45k|  {
  114|  1.45k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.45k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.45k|  }
_ZN10NullHelperIN3AAT4ltagEE8get_nullEv:
  122|   471k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4ltagEE8get_nullEv:
  113|   471k|  {
  114|   471k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   471k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   471k|  }
_ZN10NullHelperIN3AAT13FTStringRangeEE8get_nullEv:
  122|   472k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT13FTStringRangeEE8get_nullEv:
  113|   472k|  {
  114|   472k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   472k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   472k|  }
_ZN10NullHelperIN3AAT4morxEE8get_nullEv:
  122|  58.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4morxEE8get_nullEv:
  113|  58.7k|  {
  114|  58.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  58.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  58.7k|  }
_ZN10NullHelperIN2OT8ClassDefEE8get_nullEv:
  122|   507k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8ClassDefEE8get_nullEv:
  113|   507k|  {
  114|   507k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   507k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   507k|  }
_ZN10NullHelperIN2OT7IntTypeItLj2EEEE8get_nullEv:
  122|   197k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7IntTypeItLj2EEEE8get_nullEv:
  113|   197k|  {
  114|   197k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   197k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   197k|  }
_ZN10NullHelperIN2OT6Layout6Common11RangeRecordINS1_10SmallTypesEEEE8get_nullEv:
  122|  19.6M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT6Layout6Common11RangeRecordINS1_11MediumTypesEEEE8get_nullEv:
  122|  1.77M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN3AAT4mortEE8get_nullEv:
  122|  46.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4mortEE8get_nullEv:
  113|  46.8k|  {
  114|  46.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  46.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  46.8k|  }
_ZN10NullHelperIN3AAT4kerxEE8get_nullEv:
  122|  47.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4kerxEE8get_nullEv:
  113|  47.5k|  {
  114|  47.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  47.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  47.5k|  }
_ZN10NullHelperIN2OT14VariationStoreEE8get_nullEv:
  122|  3.19M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT14VariationStoreEE8get_nullEv:
  113|  3.19M|  {
  114|  3.19M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  3.19M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  3.19M|  }
_ZN10NullHelperIN2OT13VarRegionListEE8get_nullEv:
  122|  49.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13VarRegionListEE8get_nullEv:
  113|  49.9k|  {
  114|  49.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  49.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  49.9k|  }
_ZN10NullHelperIN2OT13MarkGlyphSetsEE8get_nullEv:
  122|   226k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13MarkGlyphSetsEE8get_nullEv:
  113|   226k|  {
  114|   226k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   226k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   226k|  }
_ZN10NullHelperIN2OT6Layout6Common8CoverageEE8get_nullEv:
  122|  1.76M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout6Common8CoverageEE8get_nullEv:
  113|  1.76M|  {
  114|  1.76M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.76M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.76M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  122|  1.04k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout6Common8CoverageENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  113|  1.04k|  {
  114|  1.04k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.04k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.04k|  }
_ZN10NullHelperIN3AAT8KernPairEE8get_nullEv:
  122|   207k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT8KernPairEE8get_nullEv:
  113|   207k|  {
  114|   207k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   207k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   207k|  }
_ZN10NullHelperIN3AAT6LookupIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE8get_nullEv:
  122|   588k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT6LookupIN2OT8OffsetToINS2_7ArrayOfINS0_6AnchorENS2_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE8get_nullEv:
  143|   588k|	  static Namespace::Type<Spec> const & get_null () { \
  144|   588k|	    return *reinterpret_cast<const Namespace::Type<Spec> *> (_hb_Null_##Namespace##_##Type); \
  145|   588k|	  } \
_ZN10NullHelperIN3AAT6AnchorEE8get_nullEv:
  122|  1.15M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT6AnchorEE8get_nullEv:
  113|  1.15M|  {
  114|  1.15M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.15M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.15M|  }
_ZN10NullHelperIN2OT7IntTypeIjLj4EEEE8get_nullEv:
  122|  78.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7IntTypeIjLj4EEEE8get_nullEv:
  113|  78.0k|  {
  114|  78.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  78.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  78.0k|  }
_ZN10NullHelperIN3AAT4trakEE8get_nullEv:
  122|  47.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4trakEE8get_nullEv:
  113|  47.9k|  {
  114|  47.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  47.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  47.9k|  }
_ZN10NullHelperI9hb_blob_tE8get_nullEv:
  122|  2.08M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI9hb_blob_tE8get_nullEv:
  113|  2.08M|  {
  114|  2.08M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.08M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.08M|  }
_ZN10NullHelperIN3AAT4featEE8get_nullEv:
  122|  99.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3AAT4featEE8get_nullEv:
  113|  99.9k|  {
  114|  99.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.9k|  }
_ZN4NullI18hb_unicode_funcs_tE8get_nullEv:
  157|      2|	  static Type const & get_null () { \
  158|      2|	    return _hb_Null_##Type; \
  159|      2|	  } \
_ZN4NullI11hb_buffer_tE8get_nullEv:
  157|  2.04k|	  static Type const & get_null () { \
  158|  2.04k|	    return _hb_Null_##Type; \
  159|  2.04k|	  } \
_ZN4NullI9hb_face_tE8get_nullEv:
  157|     14|	  static Type const & get_null () { \
  158|     14|	    return _hb_Null_##Type; \
  159|     14|	  } \
_ZN4NullI9hb_font_tE8get_nullEv:
  157|  33.3k|	  static Type const & get_null () { \
  158|  33.3k|	    return _hb_Null_##Type; \
  159|  33.3k|	  } \
_ZN4NullIN2OT5IndexEE8get_nullEv:
  132|    123|	  static Namespace::Type const & get_null () { \
  133|    123|	    return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
  134|    123|	  } \
_ZN4NullIN2OT7LangSysEE8get_nullEv:
  132|  2.47M|	  static Namespace::Type const & get_null () { \
  133|  2.47M|	    return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
  134|  2.47M|	  } \
_ZN10CrapHelperIN20hb_user_data_array_t19hb_user_data_item_tEE8get_crapEv:
  186|  1.49k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN20hb_user_data_array_t19hb_user_data_item_tEE8get_nullEv:
  122|  1.49k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN20hb_user_data_array_t19hb_user_data_item_tEE8get_nullEv:
  113|  1.49k|  {
  114|  1.49k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.49k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.49k|  }
_ZN10NullHelperIN11hb_ot_map_t11stage_map_tEE8get_nullEv:
  122|  2.08k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN11hb_ot_map_t11stage_map_tEE8get_nullEv:
  113|  2.08k|  {
  114|  2.08k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.08k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.08k|  }
_ZN10CrapHelperIjE8get_crapEv:
  186|    287|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIjE8get_nullEv:
  122|  15.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIjE8get_nullEv:
  113|  15.9k|  {
  114|  15.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  15.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  15.9k|  }
_ZN10CrapHelperIN22hb_serialize_context_t8object_t6link_tEE8get_crapEv:
  186|     89|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN22hb_serialize_context_t8object_t6link_tEE8get_nullEv:
  122|     89|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN22hb_serialize_context_t8object_t6link_tEE8get_nullEv:
  113|     89|  {
  114|     89|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     89|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     89|  }
_ZN10CrapHelperIPN22hb_serialize_context_t8object_tEE8get_crapEv:
  186|    125|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIPN22hb_serialize_context_t8object_tEE8get_nullEv:
  122|    125|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIPN22hb_serialize_context_t8object_tEE8get_nullEv:
  113|    125|  {
  114|    125|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    125|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    125|  }
_ZN10NullHelperIN2OT11HBGlyphID16EE8get_nullEv:
  122|  7.02k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT11HBGlyphID16EE8get_nullEv:
  113|  7.02k|  {
  114|  7.02k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  7.02k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  7.02k|  }
_ZN16CrapOrNullHelperIKN2OT5IndexEE3getEv:
  196|    123|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|    123|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN10NullHelperIN2OT5IndexEE8get_nullEv:
  122|    123|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT25FeatureParamsStylisticSetEE8get_nullEv:
  122|      6|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT25FeatureParamsStylisticSetEE8get_nullEv:
  113|      6|  {
  114|      6|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      6|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      6|  }
_ZN10NullHelperIN2OT30FeatureParamsCharacterVariantsEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT30FeatureParamsCharacterVariantsEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT13FeatureParamsEE8get_nullEv:
  122|   100k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13FeatureParamsEE8get_nullEv:
  113|   100k|  {
  114|   100k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   100k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   100k|  }
_ZN10NullHelperIN2OT6RecordINS0_7FeatureEEEE8get_nullEv:
  122|  6.31M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6RecordINS0_7FeatureEEEE8get_nullEv:
  113|  6.31M|  {
  114|  6.31M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  6.31M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  6.31M|  }
_ZN10NullHelperIN2OT7FeatureEE8get_nullEv:
  122|   269k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7FeatureEE8get_nullEv:
  113|   269k|  {
  114|   269k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   269k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   269k|  }
_ZN10NullHelperIN2OT6RecordINS0_7LangSysEEEE8get_nullEv:
  122|  31.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6RecordINS0_7LangSysEEEE8get_nullEv:
  113|  31.6k|  {
  114|  31.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  31.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  31.6k|  }
_ZN10NullHelperIN2OT7LangSysEE8get_nullEv:
  122|  2.47M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT6RecordINS0_6ScriptEEEE8get_nullEv:
  122|  2.54M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6RecordINS0_6ScriptEEEE8get_nullEv:
  113|  2.54M|  {
  114|  2.54M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.54M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.54M|  }
_ZN10NullHelperIN2OT6ScriptEE8get_nullEv:
  122|  2.54M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6ScriptEE8get_nullEv:
  113|  2.54M|  {
  114|  2.54M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.54M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.54M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_7VarDataENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  122|  1.47k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_7VarDataENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  113|  1.47k|  {
  114|  1.47k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.47k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.47k|  }
_ZN10NullHelperIN2OT7VarDataEE8get_nullEv:
  122|  46.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7VarDataEE8get_nullEv:
  113|  46.3k|  {
  114|  46.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  46.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  46.3k|  }
_ZN10NullHelperIN2OT9ConditionEE8get_nullEv:
  122|    329|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9ConditionEE8get_nullEv:
  113|    329|  {
  114|    329|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    329|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    329|  }
_ZN10NullHelperIN2OT24FeatureTableSubstitutionEE8get_nullEv:
  122|    792|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT24FeatureTableSubstitutionEE8get_nullEv:
  113|    792|  {
  114|    792|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    792|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    792|  }
_ZN10NullHelperIN2OT12ConditionSetEE8get_nullEv:
  122|  11.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12ConditionSetEE8get_nullEv:
  113|  11.2k|  {
  114|  11.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  11.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  11.2k|  }
_ZN10NullHelperIN2OT6DeviceEE8get_nullEv:
  122|  1.79M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6DeviceEE8get_nullEv:
  113|  1.79M|  {
  114|  1.79M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.79M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.79M|  }
_ZN16CrapOrNullHelperIiE3getEv:
  192|  45.9k|  static Type & get () { return Crap (Type); }
  ------------------
  |  |  188|  45.9k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
_ZN10CrapHelperIiE8get_crapEv:
  186|   693k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIiE8get_nullEv:
  122|   693k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIiE8get_nullEv:
  113|   693k|  {
  114|   693k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   693k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   693k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_8LigGlyphENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|      5|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_8LigGlyphENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|      5|  {
  114|      5|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      5|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      5|  }
_ZN10NullHelperIN2OT8LigGlyphEE8get_nullEv:
  122|      6|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8LigGlyphEE8get_nullEv:
  113|      6|  {
  114|      6|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      6|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      6|  }
_ZN10NullHelperIN2OT12LigCaretListEE8get_nullEv:
  122|  33.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12LigCaretListEE8get_nullEv:
  113|  33.0k|  {
  114|  33.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.0k|  }
_ZN10NullHelperI8hb_set_tE8get_nullEv:
  122|  1.49k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI8hb_set_tE8get_nullEv:
  113|  1.49k|  {
  114|  1.49k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.49k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.49k|  }
_ZN10NullHelperIN2OT18RecordListOfScriptEE8get_nullEv:
  122|  2.77M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18RecordListOfScriptEE8get_nullEv:
  113|  2.77M|  {
  114|  2.77M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.77M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.77M|  }
_ZN10NullHelperIN2OT12RecordListOfINS0_7FeatureEEEE8get_nullEv:
  122|   526k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12RecordListOfINS0_7FeatureEEEE8get_nullEv:
  113|   526k|  {
  114|   526k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   526k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   526k|  }
_ZN10NullHelperIN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  122|  3.67k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  113|  3.67k|  {
  114|  3.67k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  3.67k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  3.67k|  }
_ZN10NullHelperIN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeIjLj3EEEEEE8get_nullEv:
  122|    637|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT16List16OfOffsetToINS0_6LookupENS0_7IntTypeIjLj3EEEEEE8get_nullEv:
  113|    637|  {
  114|    637|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    637|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    637|  }
_ZN10NullHelperIN2OT6LookupEE8get_nullEv:
  122|  3.22M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6LookupEE8get_nullEv:
  113|  3.22M|  {
  114|  3.22M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  3.22M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  3.22M|  }
_ZN10NullHelperIN2OT17FeatureVariationsEE8get_nullEv:
  122|  1.21M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT17FeatureVariationsEE8get_nullEv:
  113|  1.21M|  {
  114|  1.21M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.21M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.21M|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl15EntryExitRecordEE8get_nullEv:
  122|  1.37M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl15EntryExitRecordEE8get_nullEv:
  113|  1.37M|  {
  114|  1.37M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.37M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.37M|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl6AnchorEE8get_nullEv:
  122|   245k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl6AnchorEE8get_nullEv:
  113|   245k|  {
  114|   245k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   245k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   245k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl10MarkRecordEE8get_nullEv:
  122|   127k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl10MarkRecordEE8get_nullEv:
  113|   127k|  {
  114|   127k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   127k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   127k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|   939k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|   939k|  {
  114|   939k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   939k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   939k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEEE8get_nullEv:
  122|  1.80M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEEE8get_nullEv:
  113|  1.80M|  {
  114|  1.80M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.80M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.80M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  40.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  40.6k|  {
  114|  40.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  40.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  40.6k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEEE8get_nullEv:
  122|  44.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEEE8get_nullEv:
  113|  44.3k|  {
  114|  44.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  44.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  44.3k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_7RuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|  86.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_7RuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|  86.5k|  {
  114|  86.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  86.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  86.5k|  }
_ZN10NullHelperIN2OT4RuleINS0_6Layout10SmallTypesEEEE8get_nullEv:
  122|  99.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4RuleINS0_6Layout10SmallTypesEEEE8get_nullEv:
  113|  99.0k|  {
  114|  99.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.0k|  }
_ZN10NullHelperIN2OT7RuleSetINS0_6Layout10SmallTypesEEEE8get_nullEv:
  122|   178k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7RuleSetINS0_6Layout10SmallTypesEEEE8get_nullEv:
  113|   178k|  {
  114|   178k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   178k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   178k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_7RuleSetINS0_6Layout11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  4.22k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_7RuleSetINS0_6Layout11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  4.22k|  {
  114|  4.22k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  4.22k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  4.22k|  }
_ZN10NullHelperIN2OT4RuleINS0_6Layout11MediumTypesEEEE8get_nullEv:
  122|  1.63k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4RuleINS0_6Layout11MediumTypesEEEE8get_nullEv:
  113|  1.63k|  {
  114|  1.63k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.63k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.63k|  }
_ZN10NullHelperIN2OT7RuleSetINS0_6Layout11MediumTypesEEEE8get_nullEv:
  122|  4.95k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7RuleSetINS0_6Layout11MediumTypesEEEE8get_nullEv:
  113|  4.95k|  {
  114|  4.95k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  4.95k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  4.95k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_7RuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  2.85k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_7RuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  2.85k|  {
  114|  2.85k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.85k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.85k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|   219k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|   219k|  {
  114|   219k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   219k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   219k|  }
_ZN10NullHelperIN2OT9ChainRuleINS0_6Layout10SmallTypesEEEE8get_nullEv:
  122|  5.04M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9ChainRuleINS0_6Layout10SmallTypesEEEE8get_nullEv:
  113|  5.04M|  {
  114|  5.04M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  5.04M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  5.04M|  }
_ZN10NullHelperIN2OT12ChainRuleSetINS0_6Layout10SmallTypesEEEE8get_nullEv:
  122|   373k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12ChainRuleSetINS0_6Layout10SmallTypesEEEE8get_nullEv:
  113|   373k|  {
  114|   373k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   373k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   373k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  7.42k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  7.42k|  {
  114|  7.42k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  7.42k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  7.42k|  }
_ZN10NullHelperIN2OT9ChainRuleINS0_6Layout11MediumTypesEEEE8get_nullEv:
  122|  99.4k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9ChainRuleINS0_6Layout11MediumTypesEEEE8get_nullEv:
  113|  99.4k|  {
  114|  99.4k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.4k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.4k|  }
_ZN10NullHelperIN2OT12ChainRuleSetINS0_6Layout11MediumTypesEEEE8get_nullEv:
  122|  18.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12ChainRuleSetINS0_6Layout11MediumTypesEEEE8get_nullEv:
  113|  18.8k|  {
  114|  18.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  18.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  18.8k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  18.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_12ChainRuleSetINS0_6Layout10SmallTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  18.8k|  {
  114|  18.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  18.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  18.8k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl17PosLookupSubTableEE8get_nullEv:
  122|   137k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl17PosLookupSubTableEE8get_nullEv:
  113|   137k|  {
  114|   137k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   137k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   137k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GPOS_impl17PosLookupSubTableENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|    153|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GPOS_impl17PosLookupSubTableENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|    153|  {
  114|    153|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    153|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    153|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl9MarkArrayEE8get_nullEv:
  122|  73.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl9MarkArrayEE8get_nullEv:
  113|  73.1k|  {
  114|  73.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  73.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  73.1k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl12AnchorMatrixEE8get_nullEv:
  122|  84.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl12AnchorMatrixEE8get_nullEv:
  113|  84.2k|  {
  114|  84.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  84.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  84.2k|  }
_ZN10NullHelperIN2OT6Layout9GPOS_impl13LigatureArrayEE8get_nullEv:
  122|  26.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GPOS_impl13LigatureArrayEE8get_nullEv:
  113|  26.5k|  {
  114|  26.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  26.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  26.5k|  }
_ZN10NullHelperIN2OT6Layout4GPOSEE8get_nullEv:
  122|  2.12M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout4GPOSEE8get_nullEv:
  113|  2.12M|  {
  114|  2.12M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.12M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.12M|  }
_ZN10CrapHelperIN20hb_aat_map_builder_t15feature_event_tEE8get_crapEv:
  186|    628|  static Type & get_crap () { return Crap<Type> (); }
hb-aat-map.cc:_ZL4CrapIN20hb_aat_map_builder_t15feature_event_tEERT_v:
  176|    628|static inline Type& Crap () {
  177|    628|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    628|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    628|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    628|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    628|  return *obj;
  181|    628|}
_ZN10NullHelperIN20hb_aat_map_builder_t15feature_event_tEE8get_nullEv:
  122|    628|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN20hb_aat_map_builder_t15feature_event_tEE8get_nullEv:
  113|    628|  {
  114|    628|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    628|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    628|  }
hb-aat-map.cc:_ZL4CrapIN12hb_aat_map_t13range_flags_tEERT_v:
  176|    725|static inline Type& Crap () {
  177|    725|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    725|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    725|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    725|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    725|  return *obj;
  181|    725|}
hb-blob.cc:_ZL4CrapIN20hb_user_data_array_t19hb_user_data_item_tEERT_v:
  176|  1.49k|static inline Type& Crap () {
  177|  1.49k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  1.49k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  1.49k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  1.49k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  1.49k|  return *obj;
  181|  1.49k|}
_ZN10NullHelperI11hb_buffer_tE8get_nullEv:
  122|  2.04k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT4maxpEE8get_nullEv:
  122|  88.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4maxpEE8get_nullEv:
  113|  88.5k|  {
  114|  88.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  88.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  88.5k|  }
_ZN10NullHelperIN2OT9glyf_impl11GlyphHeaderEE8get_nullEv:
  122|   290k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9glyf_impl11GlyphHeaderEE8get_nullEv:
  113|   290k|  {
  114|   290k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   290k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   290k|  }
_ZN16CrapOrNullHelperIN2OT15contour_point_tEE3getEv:
  192|   215k|  static Type & get () { return Crap (Type); }
  ------------------
  |  |  188|   215k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
_ZN10CrapHelperIN2OT15contour_point_tEE8get_crapEv:
  186|   215k|  static Type & get_crap () { return Crap<Type> (); }
hb-common.cc:_ZL4CrapIN2OT15contour_point_tEERT_v:
  176|   215k|static inline Type& Crap () {
  177|   215k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|   215k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|   215k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|   215k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|   215k|  return *obj;
  181|   215k|}
_ZN10NullHelperIN2OT15contour_point_tEE8get_nullEv:
  122|   215k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT15contour_point_tEE8get_nullEv:
  113|   215k|  {
  114|   215k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   215k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   215k|  }
_ZN10NullHelperIN2OT4gvarEE8get_nullEv:
  122|   221k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4gvarEE8get_nullEv:
  113|   221k|  {
  114|   221k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   221k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   221k|  }
_ZN10NullHelperIN2OT18GlyphVariationDataEE8get_nullEv:
  122|  4.00k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18GlyphVariationDataEE8get_nullEv:
  113|  4.00k|  {
  114|  4.00k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  4.00k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  4.00k|  }
_ZN10NullHelperIN2OT7IntTypeIhLj1EEEE8get_nullEv:
  122|   119k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7IntTypeIhLj1EEEE8get_nullEv:
  113|   119k|  {
  114|   119k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   119k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   119k|  }
hb-common.cc:_ZL4CrapIiERT_v:
  176|   693k|static inline Type& Crap () {
  177|   693k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|   693k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|   693k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|   693k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|   693k|  return *obj;
  181|   693k|}
hb-common.cc:_ZL4CrapIjERT_v:
  176|     36|static inline Type& Crap () {
  177|     36|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|     36|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|     36|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|     36|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|     36|  return *obj;
  181|     36|}
_ZN10NullHelperIN2OT4headEE8get_nullEv:
  122|   130k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4headEE8get_nullEv:
  113|   130k|  {
  114|   130k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   130k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   130k|  }
_ZN10NullHelperIN2OT18glyf_accelerator_tEE8get_nullEv:
  122|  33.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18glyf_accelerator_tEE8get_nullEv:
  113|  33.7k|  {
  114|  33.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.7k|  }
_ZN10NullHelperIN2OT18gvar_accelerator_tEE8get_nullEv:
  122|  33.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18gvar_accelerator_tEE8get_nullEv:
  113|  33.2k|  {
  114|  33.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.2k|  }
_ZN10NullHelperIN2OT18hmtx_accelerator_tEE8get_nullEv:
  122|  33.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18hmtx_accelerator_tEE8get_nullEv:
  113|  33.5k|  {
  114|  33.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.5k|  }
_ZN10NullHelperIN2OT4hheaEE8get_nullEv:
  122|   127k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4hheaEE8get_nullEv:
  113|   127k|  {
  114|   127k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   127k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   127k|  }
_ZN10NullHelperIN2OT18vmtx_accelerator_tEE8get_nullEv:
  122|  33.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18vmtx_accelerator_tEE8get_nullEv:
  113|  33.7k|  {
  114|  33.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.7k|  }
_ZN10NullHelperIN2OT4vheaEE8get_nullEv:
  122|  32.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4vheaEE8get_nullEv:
  113|  32.5k|  {
  114|  32.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  32.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  32.5k|  }
_ZN4NullIN2OT21CmapSubtableLongGroupEE8get_nullEv:
  132|   199k|	  static Namespace::Type const & get_null () { \
  133|   199k|	    return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
  134|   199k|	  } \
_ZN4NullI16hb_paint_funcs_tE8get_nullEv:
  157|      2|	  static Type const & get_null () { \
  158|      2|	    return _hb_Null_##Type; \
  159|      2|	  } \
_ZN4NullI15hb_draw_funcs_tE8get_nullEv:
  157|  33.3k|	  static Type const & get_null () { \
  158|  33.3k|	    return _hb_Null_##Type; \
  159|  33.3k|	  } \
_ZN10NullHelperIhE8get_nullEv:
  122|  48.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIhE8get_nullEv:
  113|  48.0k|  {
  114|  48.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  48.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  48.0k|  }
_ZN10NullHelperIN2OT4MVAREE8get_nullEv:
  122|   107k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4MVAREE8get_nullEv:
  113|   107k|  {
  114|   107k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   107k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   107k|  }
_ZN10NullHelperIN2OT21CmapSubtableLongGroupEE8get_nullEv:
  122|   199k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT10DefaultUVSEE8get_nullEv:
  122|  67.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10DefaultUVSEE8get_nullEv:
  113|  67.5k|  {
  114|  67.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  67.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  67.5k|  }
_ZN10NullHelperIN2OT13NonDefaultUVSEE8get_nullEv:
  122|  67.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13NonDefaultUVSEE8get_nullEv:
  113|  67.5k|  {
  114|  67.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  67.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  67.5k|  }
_ZN10NullHelperIN2OT10UVSMappingEE8get_nullEv:
  122|  34.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10UVSMappingEE8get_nullEv:
  113|  34.3k|  {
  114|  34.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.3k|  }
_ZN10NullHelperIN2OT23VariationSelectorRecordEE8get_nullEv:
  122|  67.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT23VariationSelectorRecordEE8get_nullEv:
  113|  67.7k|  {
  114|  67.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  67.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  67.7k|  }
_ZN10NullHelperIN2OT4cmapEE8get_nullEv:
  122|  59.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4cmapEE8get_nullEv:
  113|  59.5k|  {
  114|  59.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  59.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  59.5k|  }
_ZN10NullHelperIN2OT12CmapSubtableEE8get_nullEv:
  122|  30.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12CmapSubtableEE8get_nullEv:
  113|  30.8k|  {
  114|  30.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  30.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  30.8k|  }
_ZN16hb_nonnull_ptr_tIKN2OT12CmapSubtableEEaSEPS2_:
  211|  32.8k|  T * operator = (T *v_)   { return v = v_; }
_ZN10NullHelperIN2OT20CmapSubtableFormat14EE8get_nullEv:
  122|  32.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT20CmapSubtableFormat14EE8get_nullEv:
  113|  34.3k|  {
  114|  34.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.3k|  }
_ZN16hb_nonnull_ptr_tIKN2OT20CmapSubtableFormat14EEaSEPS2_:
  211|  33.0k|  T * operator = (T *v_)   { return v = v_; }
_ZNK16hb_nonnull_ptr_tIKN2OT12CmapSubtableEEcvPKT_IvEEv:
  216|  32.8k|  template <typename C> operator const C * () const { return get (); }
_ZNK16hb_nonnull_ptr_tIKN2OT12CmapSubtableEE3getEv:
  218|  99.1k|  T * get () const { return v ? v : const_cast<T *> (&Null (T)); }
  ------------------
  |  |  124|    511|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (218:29): [True: 98.5k, False: 511]
  ------------------
_ZN10NullHelperIKN2OT12CmapSubtableEE8get_nullEv:
  122|    511|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT3OS2EE8get_nullEv:
  122|   100k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT3OS2EE8get_nullEv:
  113|   100k|  {
  114|   100k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   100k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   100k|  }
_ZNK16hb_nonnull_ptr_tIKN2OT12CmapSubtableEEptEv:
  212|  66.2k|  T * operator -> () const { return get (); }
_ZNK16hb_nonnull_ptr_tIKN2OT20CmapSubtableFormat14EEptEv:
  212|   101k|  T * operator -> () const { return get (); }
_ZNK16hb_nonnull_ptr_tIKN2OT20CmapSubtableFormat14EE3getEv:
  218|   101k|  T * get () const { return v ? v : const_cast<T *> (&Null (T)); }
  ------------------
  |  |  124|  1.48k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (218:29): [True: 99.5k, False: 1.48k]
  ------------------
_ZN10NullHelperIKN2OT20CmapSubtableFormat14EE8get_nullEv:
  122|  1.48k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT14EncodingRecordEE8get_nullEv:
  122|   316k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT14EncodingRecordEE8get_nullEv:
  113|   316k|  {
  114|   316k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   316k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   316k|  }
_ZN10CrapHelperI14hb_transform_tE8get_crapEv:
  186|   269k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperI14hb_transform_tE8get_nullEv:
  122|   402k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI14hb_transform_tE8get_nullEv:
  113|   402k|  {
  114|   402k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   402k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   402k|  }
_ZN10CrapHelperI11hb_bounds_tE8get_crapEv:
  186|   206k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperI11hb_bounds_tE8get_nullEv:
  122|   301k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI11hb_bounds_tE8get_nullEv:
  113|   301k|  {
  114|   301k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   301k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   301k|  }
_ZN10NullHelperIN2OT5PaintEE8get_nullEv:
  122|  1.03M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT5PaintEE8get_nullEv:
  113|  1.03M|  {
  114|  1.03M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.03M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.03M|  }
_ZN10NullHelperIN2OT9ColorLineINS0_10NoVariableEEEE8get_nullEv:
  122|   118k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9ColorLineINS0_10NoVariableEEEE8get_nullEv:
  113|   118k|  {
  114|   118k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   118k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   118k|  }
_ZN10NullHelperIN2OT9ColorLineINS0_8VariableEEEE8get_nullEv:
  122|  67.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9ColorLineINS0_8VariableEEEE8get_nullEv:
  113|  67.6k|  {
  114|  67.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  67.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  67.6k|  }
_ZN10NullHelperIN2OT10NoVariableINS0_9Affine2x3EEEE8get_nullEv:
  122|  15.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10NoVariableINS0_9Affine2x3EEEE8get_nullEv:
  113|  15.7k|  {
  114|  15.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  15.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  15.7k|  }
_ZN10NullHelperIN2OT8VariableINS0_9Affine2x3EEEE8get_nullEv:
  122|  10.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8VariableINS0_9Affine2x3EEEE8get_nullEv:
  113|  10.6k|  {
  114|  10.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  10.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  10.6k|  }
_ZN10NullHelperIN2OT7ClipBoxEE8get_nullEv:
  122|    551|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7ClipBoxEE8get_nullEv:
  113|    551|  {
  114|    551|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    551|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    551|  }
_ZN10NullHelperIN2OT8OffsetToINS0_5PaintENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  122|   735k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_5PaintENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  113|   735k|  {
  114|   735k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   735k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   735k|  }
_ZN10NullHelperIN2OT13BaseGlyphListEE8get_nullEv:
  122|  2.16k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13BaseGlyphListEE8get_nullEv:
  113|  2.16k|  {
  114|  2.16k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.16k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.16k|  }
_ZN10NullHelperIN2OT15BaseGlyphRecordEE8get_nullEv:
  122|  36.4k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT15BaseGlyphRecordEE8get_nullEv:
  113|  36.4k|  {
  114|  36.4k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  36.4k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  36.4k|  }
_ZN10NullHelperIN2OT4COLREE8get_nullEv:
  122|   805k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4COLREE8get_nullEv:
  113|   805k|  {
  114|   805k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   805k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   805k|  }
_ZN10NullHelperIN2OT9LayerListEE8get_nullEv:
  122|  17.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9LayerListEE8get_nullEv:
  113|  17.0k|  {
  114|  17.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  17.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  17.0k|  }
_ZN10NullHelperIN2OT20BaseGlyphPaintRecordEE8get_nullEv:
  122|   137k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT20BaseGlyphPaintRecordEE8get_nullEv:
  113|   137k|  {
  114|   137k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   137k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   137k|  }
_ZN10NullHelperIN2OT8ClipListEE8get_nullEv:
  122|   129k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8ClipListEE8get_nullEv:
  113|   129k|  {
  114|   129k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   129k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   129k|  }
_ZN10NullHelperIN2OT16DeltaSetIndexMapEE8get_nullEv:
  122|  22.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT16DeltaSetIndexMapEE8get_nullEv:
  113|  22.7k|  {
  114|  22.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  22.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  22.7k|  }
_ZN10NullHelperI15hb_draw_funcs_tE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT11TableRecordEE8get_nullEv:
  122|  1.22M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT11TableRecordEE8get_nullEv:
  113|  1.22M|  {
  114|  1.22M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.22M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.22M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_19OpenTypeOffsetTableENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  122|     71|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_19OpenTypeOffsetTableENS0_7IntTypeIjLj4EEELb1EEEE8get_nullEv:
  113|     71|  {
  114|     71|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     71|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     71|  }
_ZN10NullHelperIN2OT19OpenTypeOffsetTableEE8get_nullEv:
  122|   160k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT19OpenTypeOffsetTableEE8get_nullEv:
  113|   160k|  {
  114|   160k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   160k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   160k|  }
_ZN10NullHelperIN2OT16OpenTypeFontFileEE8get_nullEv:
  122|  24.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT16OpenTypeFontFileEE8get_nullEv:
  113|  24.8k|  {
  114|  24.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  24.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  24.8k|  }
_ZN10NullHelperI9hb_face_tE8get_nullEv:
  122|     14|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT18cmap_accelerator_tEE8get_nullEv:
  122|  33.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18cmap_accelerator_tEE8get_nullEv:
  113|  33.9k|  {
  114|  33.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.9k|  }
_ZN16hb_nonnull_ptr_tIKN2OT12CmapSubtableEEC2EPS2_:
  210|  32.8k|  hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
_ZN16hb_nonnull_ptr_tIKN2OT20CmapSubtableFormat14EEC2EPS2_:
  210|  32.8k|  hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
_ZN10NullHelperIN2OT10AxisRecordEE8get_nullEv:
  122|      5|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10AxisRecordEE8get_nullEv:
  113|      5|  {
  114|      5|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      5|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      5|  }
_ZN10NullHelperI9hb_font_tE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN10NullHelperIN2OT4fvarEE8get_nullEv:
  122|   193k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4fvarEE8get_nullEv:
  113|   193k|  {
  114|   193k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   193k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   193k|  }
_ZN10NullHelperIN2OT4avarEE8get_nullEv:
  122|  99.4k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4avarEE8get_nullEv:
  113|  99.4k|  {
  114|  99.4k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.4k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.4k|  }
_ZN10NullHelperI8hb_map_tE8get_nullEv:
  122|    460|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI8hb_map_tE8get_nullEv:
  113|    460|  {
  114|    460|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    460|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    460|  }
_ZN10NullHelperIN2OT10CPALV1TailEE8get_nullEv:
  122|  99.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10CPALV1TailEE8get_nullEv:
  113|  99.8k|  {
  114|  99.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.8k|  }
_ZN16CrapOrNullHelperIKN2OT7IntTypeIjLj4EEEE3getEv:
  196|     61|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|     61|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN10NullHelperIN2OT3SVGEE8get_nullEv:
  122|  99.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT3SVGEE8get_nullEv:
  113|  99.9k|  {
  114|  99.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.9k|  }
_ZN10NullHelperIN2OT13SortedArrayOfINS0_21SVGDocumentIndexEntryENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13SortedArrayOfINS0_21SVGDocumentIndexEntryENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT21SVGDocumentIndexEntryEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT21SVGDocumentIndexEntryEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT4sbixEE8get_nullEv:
  122|   815k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4sbixEE8get_nullEv:
  113|   815k|  {
  114|   815k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   815k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   815k|  }
_ZN10NullHelperIN2OT10SBIXStrikeEE8get_nullEv:
  122|  6.66k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10SBIXStrikeEE8get_nullEv:
  113|  6.66k|  {
  114|  6.66k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  6.66k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  6.66k|  }
_ZN10NullHelperIN2OT9SBIXGlyphEE8get_nullEv:
  122|     34|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT9SBIXGlyphEE8get_nullEv:
  113|     34|  {
  114|     34|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     34|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     34|  }
_ZN10NullHelperIN2OT4CBLCEE8get_nullEv:
  122|  1.49M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4CBLCEE8get_nullEv:
  113|  1.49M|  {
  114|  1.49M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.49M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.49M|  }
_ZN10NullHelperIN2OT15BitmapSizeTableEE8get_nullEv:
  122|   749k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT15BitmapSizeTableEE8get_nullEv:
  113|   749k|  {
  114|   749k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   749k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   749k|  }
_ZN10NullHelperIN2OT13IndexSubtableEE8get_nullEv:
  122|     91|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13IndexSubtableEE8get_nullEv:
  113|     91|  {
  114|     91|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     91|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     91|  }
_ZN10NullHelperIN2OT4CPALEE8get_nullEv:
  122|   240k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4CPALEE8get_nullEv:
  113|   240k|  {
  114|   240k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   240k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   240k|  }
_ZN10NullHelperIN2OT17SVG_accelerator_tEE8get_nullEv:
  122|  34.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT17SVG_accelerator_tEE8get_nullEv:
  113|  34.0k|  {
  114|  34.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.0k|  }
_ZN10NullHelperIN2OT18CBDT_accelerator_tEE8get_nullEv:
  122|  33.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18CBDT_accelerator_tEE8get_nullEv:
  113|  33.9k|  {
  114|  33.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.9k|  }
_ZN10NullHelperIN2OT18sbix_accelerator_tEE8get_nullEv:
  122|  33.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18sbix_accelerator_tEE8get_nullEv:
  113|  33.8k|  {
  114|  33.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.8k|  }
_ZN10NullHelperIN2OT4sbix13accelerator_t9PNGHeaderEE8get_nullEv:
  122|    453|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4sbix13accelerator_t9PNGHeaderEE8get_nullEv:
  113|    453|  {
  114|    453|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    453|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    453|  }
_ZN10NullHelperIN2OT18post_accelerator_tEE8get_nullEv:
  122|  33.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18post_accelerator_tEE8get_nullEv:
  113|  33.7k|  {
  114|  33.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.7k|  }
_ZN10NullHelperIN2OT18name_accelerator_tEE8get_nullEv:
  122|  34.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18name_accelerator_tEE8get_nullEv:
  113|  34.1k|  {
  114|  34.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.1k|  }
_ZN10NullHelperIN2OT18meta_accelerator_tEE8get_nullEv:
  122|  34.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18meta_accelerator_tEE8get_nullEv:
  113|  34.0k|  {
  114|  34.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.0k|  }
_ZN10NullHelperIN2OT18cff1_accelerator_tEE8get_nullEv:
  122|  33.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18cff1_accelerator_tEE8get_nullEv:
  113|  33.6k|  {
  114|  33.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.6k|  }
_ZN10NullHelperIN2OT18cff2_accelerator_tEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18cff2_accelerator_tEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT18GSUB_accelerator_tEE8get_nullEv:
  122|  34.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18GSUB_accelerator_tEE8get_nullEv:
  113|  34.1k|  {
  114|  34.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.1k|  }
_ZN10NullHelperIN2OT18GPOS_accelerator_tEE8get_nullEv:
  122|  34.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18GPOS_accelerator_tEE8get_nullEv:
  113|  34.0k|  {
  114|  34.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  34.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  34.0k|  }
_ZN10CrapHelperIN3CFF8number_tEE8get_crapEv:
  186|  10.3k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF8number_tEE8get_nullEv:
  122|  10.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8number_tEE8get_nullEv:
  113|  10.3k|  {
  114|  10.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  10.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  10.3k|  }
_ZN10NullHelperIN3CFF8FDSelectEE8get_nullEv:
  122|   274k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8FDSelectEE8get_nullEv:
  113|   274k|  {
  114|   274k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   274k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   274k|  }
_ZN10NullHelperIN3CFF15Encoding1_RangeEE8get_nullEv:
  122|      1|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF15Encoding1_RangeEE8get_nullEv:
  113|      1|  {
  114|      1|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      1|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      1|  }
_ZN10CrapHelperIN3CFF19cff1_top_dict_val_tEE8get_crapEv:
  186|    309|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF19cff1_top_dict_val_tEE8get_nullEv:
  122|    309|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF19cff1_top_dict_val_tEE8get_nullEv:
  113|    309|  {
  114|    309|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    309|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    309|  }
_ZN10CrapHelperIN3CFF8op_str_tEE8get_crapEv:
  186|    130|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF8op_str_tEE8get_nullEv:
  122|    130|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8op_str_tEE8get_nullEv:
  113|    130|  {
  114|    130|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    130|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    130|  }
_ZN10CrapHelperIN3CFF10dict_val_tEE8get_crapEv:
  186|    685|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF10dict_val_tEE8get_nullEv:
  122|    685|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF10dict_val_tEE8get_nullEv:
  113|    685|  {
  114|    685|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    685|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    685|  }
_ZN10NullHelperIN3CFF23cff1_font_dict_values_tEE8get_nullEv:
  122|      5|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF23cff1_font_dict_values_tEE8get_nullEv:
  113|      5|  {
  114|      5|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      5|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      5|  }
_ZN10NullHelperIN2OT4cff1EE8get_nullEv:
  122|  63.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4cff1EE8get_nullEv:
  113|  63.8k|  {
  114|  63.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  63.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  63.8k|  }
_ZN10NullHelperIN3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEEE8get_nullEv:
  122|  4.76k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEEE8get_nullEv:
  113|  4.76k|  {
  114|  4.76k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  4.76k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  4.76k|  }
_ZN10NullHelperIN3CFF7CharsetEE8get_nullEv:
  122|   135k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF7CharsetEE8get_nullEv:
  113|   135k|  {
  114|   135k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   135k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   135k|  }
_ZN10NullHelperIN3CFF11CFF1FDArrayEE8get_nullEv:
  122|  1.46k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF11CFF1FDArrayEE8get_nullEv:
  113|  1.46k|  {
  114|  1.46k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.46k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.46k|  }
_ZN10NullHelperIN3CFF12CFF1FDSelectEE8get_nullEv:
  122|  1.45k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF12CFF1FDSelectEE8get_nullEv:
  113|  1.45k|  {
  114|  1.45k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.45k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.45k|  }
_ZN10NullHelperIN3CFF8EncodingEE8get_nullEv:
  122|  1.45k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8EncodingEE8get_nullEv:
  113|  1.45k|  {
  114|  1.45k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.45k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.45k|  }
_ZN10NullHelperIN3CFF15CFF1StringIndexEE8get_nullEv:
  122|  1.42k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF15CFF1StringIndexEE8get_nullEv:
  113|  1.42k|  {
  114|  1.42k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.42k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.42k|  }
_ZN10NullHelperIN3CFF5SubrsIN2OT7IntTypeItLj2EEEEEE8get_nullEv:
  122|   146k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF5SubrsIN2OT7IntTypeItLj2EEEEEE8get_nullEv:
  113|   146k|  {
  114|   146k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   146k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   146k|  }
_ZN10NullHelperIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEEE8get_nullEv:
  122|     22|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEEE8get_nullEv:
  113|     22|  {
  114|     22|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     22|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     22|  }
_ZN10CrapHelperIN3CFF23cff1_font_dict_values_tEE8get_crapEv:
  186|      5|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF12CFF2FDSelectEE8get_nullEv:
  122|  14.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF12CFF2FDSelectEE8get_nullEv:
  113|  14.1k|  {
  114|  14.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  14.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  14.1k|  }
_ZN10NullHelperIN2OT4cff2EE8get_nullEv:
  122|  62.7k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4cff2EE8get_nullEv:
  113|  62.7k|  {
  114|  62.7k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  62.7k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  62.7k|  }
_ZN10NullHelperIN3CFF18CFF2VariationStoreEE8get_nullEv:
  122|  2.15k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF18CFF2VariationStoreEE8get_nullEv:
  113|  2.15k|  {
  114|  2.15k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.15k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.15k|  }
_ZN10NullHelperIN3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEEEE8get_nullEv:
  122|  1.11k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEEEE8get_nullEv:
  113|  1.11k|  {
  114|  1.11k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.11k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.11k|  }
_ZN10NullHelperIN3CFF5SubrsIN2OT7IntTypeIjLj4EEEEEE8get_nullEv:
  122|   185k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF5SubrsIN2OT7IntTypeIjLj4EEEEEE8get_nullEv:
  113|   185k|  {
  114|   185k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   185k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   185k|  }
_ZN10NullHelperIN3CFF11CFF2FDArrayEE8get_nullEv:
  122|  1.08k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF11CFF2FDArrayEE8get_nullEv:
  113|  1.08k|  {
  114|  1.08k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.08k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.08k|  }
_ZN10CrapHelperIN3CFF23cff2_font_dict_values_tEE8get_crapEv:
  186|  46.2k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperIN3CFF23cff2_font_dict_values_tEE8get_nullEv:
  122|  46.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF23cff2_font_dict_values_tEE8get_nullEv:
  113|  46.2k|  {
  114|  46.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  46.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  46.2k|  }
_ZN10NullHelperIN3CFF14UnsizedByteStrEE8get_nullEv:
  122|  45.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF14UnsizedByteStrEE8get_nullEv:
  113|  45.0k|  {
  114|  45.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  45.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  45.0k|  }
_ZN10NullHelperIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEEE8get_nullEv:
  122|  9.91k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEEE8get_nullEv:
  113|  9.91k|  {
  114|  9.91k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  9.91k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  9.91k|  }
_ZN16CrapOrNullHelperIKhE3getEv:
  196|  45.0k|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|  45.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN16CrapOrNullHelperIKN2OT7IntTypeIhLj1EEEE3getEv:
  196|   119k|  static const Type & get () { return Null (Type); }
  ------------------
  |  |  124|   119k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN10NullHelperIN2OT4metaEE8get_nullEv:
  122|  66.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4metaEE8get_nullEv:
  113|  66.6k|  {
  114|  66.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  66.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  66.6k|  }
_ZN10NullHelperIN2OT7DataMapEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT7DataMapEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT4nameEE8get_nullEv:
  122|   191k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4nameEE8get_nullEv:
  113|   191k|  {
  114|   191k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   191k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   191k|  }
_ZN10CrapHelperI18hb_ot_name_entry_tE8get_crapEv:
  186|  3.67k|  static Type & get_crap () { return Crap<Type> (); }
_ZN10NullHelperI18hb_ot_name_entry_tE8get_nullEv:
  122|  3.67k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI18hb_ot_name_entry_tE8get_nullEv:
  113|  3.67k|  {
  114|  3.67k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  3.67k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  3.67k|  }
_ZN10NullHelperIN2OT4postEE8get_nullEv:
  122|  32.0k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4postEE8get_nullEv:
  113|  32.0k|  {
  114|  32.0k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  32.0k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  32.0k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|   553k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|   553k|  {
  114|   553k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   553k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   553k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|   497k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|   497k|  {
  114|   497k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   497k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   497k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEEE8get_nullEv:
  122|   607k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEEE8get_nullEv:
  113|   607k|  {
  114|   607k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   607k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   607k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEEE8get_nullEv:
  122|  13.8M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEEE8get_nullEv:
  113|  13.8M|  {
  114|  13.8M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  13.8M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  13.8M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  11.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  11.9k|  {
  114|  11.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  11.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  11.9k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEEE8get_nullEv:
  122|  12.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEEE8get_nullEv:
  113|  12.9k|  {
  114|  12.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  12.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  12.9k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEEE8get_nullEv:
  122|  63.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEEE8get_nullEv:
  113|  63.5k|  {
  114|  63.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  63.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  63.5k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl19SubstLookupSubTableEE8get_nullEv:
  122|  3.67M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl19SubstLookupSubTableEE8get_nullEv:
  113|  3.67M|  {
  114|  3.67M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  3.67M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  3.67M|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl19SubstLookupSubTableENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|    260|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl19SubstLookupSubTableENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|    260|  {
  114|    260|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    260|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    260|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  122|   601k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEENS0_7IntTypeItLj2EEELb1EEEE8get_nullEv:
  113|   601k|  {
  114|   601k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   601k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   601k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEEE8get_nullEv:
  122|   708k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEEE8get_nullEv:
  113|   708k|  {
  114|   708k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   708k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   708k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  17.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  17.2k|  {
  114|  17.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  17.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  17.2k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEEE8get_nullEv:
  122|  17.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEEE8get_nullEv:
  113|  17.5k|  {
  114|  17.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  17.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  17.5k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEEE8get_nullEv:
  122|   559k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEEE8get_nullEv:
  113|   559k|  {
  114|   559k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   559k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   559k|  }
_ZN10NullHelperIN2OT8OffsetToINS0_6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  122|  40.5k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8OffsetToINS0_6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEENS0_7IntTypeIjLj3EEELb1EEEE8get_nullEv:
  113|  40.5k|  {
  114|  40.5k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  40.5k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  40.5k|  }
_ZN10NullHelperIN2OT6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEEE8get_nullEv:
  122|  40.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEEE8get_nullEv:
  113|  40.9k|  {
  114|  40.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  40.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  40.9k|  }
_ZN10NullHelperIN2OT6Layout4GSUBEE8get_nullEv:
  122|  1.96M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT6Layout4GSUBEE8get_nullEv:
  113|  1.96M|  {
  114|  1.96M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.96M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.96M|  }
_ZN10NullHelperIN2OT4HVAREE8get_nullEv:
  122|   687k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4HVAREE8get_nullEv:
  113|   687k|  {
  114|   687k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   687k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   687k|  }
_ZN10NullHelperIN2OT4VVAREE8get_nullEv:
  122|    213|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4VVAREE8get_nullEv:
  113|    213|  {
  114|    213|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    213|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    213|  }
_ZN10NullHelperIN2OT4VORGEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4VORGEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
hb-ot-font.cc:_ZL4CrapIjERT_v:
  176|    251|static inline Type& Crap () {
  177|    251|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    251|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    251|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    251|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    251|  return *obj;
  181|    251|}
hb-ot-font.cc:_ZL4CrapIN3CFF8number_tEERT_v:
  176|    185|static inline Type& Crap () {
  177|    185|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    185|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    185|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    185|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    185|  return *obj;
  181|    185|}
hb-ot-font.cc:_ZL4CrapIN3CFF19cff1_top_dict_val_tEERT_v:
  176|    309|static inline Type& Crap () {
  177|    309|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    309|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    309|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    309|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    309|  return *obj;
  181|    309|}
hb-ot-font.cc:_ZL4CrapIN3CFF23cff1_font_dict_values_tEERT_v:
  176|      5|static inline Type& Crap () {
  177|      5|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|      5|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|      5|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|      5|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|      5|  return *obj;
  181|      5|}
hb-ot-font.cc:_ZL4CrapIN3CFF8op_str_tEERT_v:
  176|    130|static inline Type& Crap () {
  177|    130|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    130|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    130|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    130|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    130|  return *obj;
  181|    130|}
hb-ot-font.cc:_ZL4CrapIN3CFF10dict_val_tEERT_v:
  176|    685|static inline Type& Crap () {
  177|    685|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    685|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    685|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    685|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    685|  return *obj;
  181|    685|}
hb-ot-font.cc:_ZL4CrapIN3CFF23cff2_font_dict_values_tEERT_v:
  176|  46.2k|static inline Type& Crap () {
  177|  46.2k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  46.2k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  46.2k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  46.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  46.2k|  return *obj;
  181|  46.2k|}
hb-ot-font.cc:_ZL4CrapI14hb_transform_tERT_v:
  176|    345|static inline Type& Crap () {
  177|    345|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    345|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    345|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    345|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    345|  return *obj;
  181|    345|}
hb-ot-font.cc:_ZL4CrapI11hb_bounds_tERT_v:
  176|  2.02k|static inline Type& Crap () {
  177|  2.02k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  2.02k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  2.02k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  2.02k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  2.02k|  return *obj;
  181|  2.02k|}
_ZN10NullHelperIN2OT4AxisEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4AxisEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT14BaseScriptListEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT14BaseScriptListEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT16BaseScriptRecordEE8get_nullEv:
  122|  66.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT16BaseScriptRecordEE8get_nullEv:
  113|  66.6k|  {
  114|  66.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  66.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  66.6k|  }
_ZN10NullHelperIN2OT10BaseScriptEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT10BaseScriptEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT13SortedArrayOfINS0_3TagENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  122|      1|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13SortedArrayOfINS0_3TagENS0_7IntTypeItLj2EEEEEE8get_nullEv:
  113|      1|  {
  114|      1|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|      1|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|      1|  }
_ZN10NullHelperIN2OT4kernEE8get_nullEv:
  122|  46.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4kernEE8get_nullEv:
  113|  46.2k|  {
  114|  46.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  46.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  46.2k|  }
_ZN10NullHelperIN11hb_ot_map_t12lookup_map_tEE8get_nullEv:
  122|   108k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN11hb_ot_map_t12lookup_map_tEE8get_nullEv:
  113|   108k|  {
  114|   108k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   108k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   108k|  }
_ZN10NullHelperIN2OT4BASEEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4BASEEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT13MathConstantsEE8get_nullEv:
  122|  1.86M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13MathConstantsEE8get_nullEv:
  113|  1.86M|  {
  114|  1.86M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.86M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.86M|  }
_ZN10NullHelperIN2OT13MathGlyphInfoEE8get_nullEv:
  122|   198k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT13MathGlyphInfoEE8get_nullEv:
  113|   198k|  {
  114|   198k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   198k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   198k|  }
_ZN10NullHelperIN2OT25MathItalicsCorrectionInfoEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT25MathItalicsCorrectionInfoEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT15MathValueRecordEE8get_nullEv:
  122|  33.3k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT15MathValueRecordEE8get_nullEv:
  113|  33.3k|  {
  114|  33.3k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.3k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.3k|  }
_ZN10NullHelperIN2OT23MathTopAccentAttachmentEE8get_nullEv:
  122|  33.1k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT23MathTopAccentAttachmentEE8get_nullEv:
  113|  33.1k|  {
  114|  33.1k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.1k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.1k|  }
_ZN10NullHelperIN2OT12MathKernInfoEE8get_nullEv:
  122|  99.4k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12MathKernInfoEE8get_nullEv:
  113|  99.4k|  {
  114|  99.4k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.4k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.4k|  }
_ZN10NullHelperIN2OT18MathKernInfoRecordEE8get_nullEv:
  122|  99.8k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT18MathKernInfoRecordEE8get_nullEv:
  113|  99.8k|  {
  114|  99.8k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.8k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.8k|  }
_ZN10NullHelperIN2OT8MathKernEE8get_nullEv:
  122|  33.2k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT8MathKernEE8get_nullEv:
  113|  33.2k|  {
  114|  33.2k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  33.2k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  33.2k|  }
_ZN10NullHelperIN2OT12MathVariantsEE8get_nullEv:
  122|   231k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT12MathVariantsEE8get_nullEv:
  113|   231k|  {
  114|   231k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   231k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   231k|  }
_ZN10NullHelperIN2OT21MathGlyphConstructionEE8get_nullEv:
  122|   199k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT21MathGlyphConstructionEE8get_nullEv:
  113|   199k|  {
  114|   199k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|   199k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|   199k|  }
_ZN10NullHelperIN2OT17MathGlyphAssemblyEE8get_nullEv:
  122|  99.9k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT17MathGlyphAssemblyEE8get_nullEv:
  113|  99.9k|  {
  114|  99.9k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  99.9k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  99.9k|  }
_ZN10NullHelperIN2OT4MATHEE8get_nullEv:
  122|  2.30M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN2OT4MATHEE8get_nullEv:
  113|  2.30M|  {
  114|  2.30M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.30M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.30M|  }
hb-ot-name.cc:_ZL4CrapI18hb_ot_name_entry_tERT_v:
  176|  3.67k|static inline Type& Crap () {
  177|  3.67k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  3.67k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  3.67k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  3.67k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  3.67k|  return *obj;
  181|  3.67k|}
_ZN10NullHelperI15hb_shape_plan_tE8get_nullEv:
  122|    661|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI15hb_shape_plan_tE8get_nullEv:
  113|    661|  {
  114|    661|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    661|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    661|  }
_ZN10NullHelperI18hb_unicode_funcs_tE8get_nullEv:
  122|      2|  static const Type & get_null () { return Null<Type>::get_null (); }
hb-paint-extents.cc:_ZL4CrapI14hb_transform_tERT_v:
  176|   269k|static inline Type& Crap () {
  177|   269k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|   269k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|   269k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|   269k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|   269k|  return *obj;
  181|   269k|}
hb-paint-extents.cc:_ZL4CrapI11hb_bounds_tERT_v:
  176|   204k|static inline Type& Crap () {
  177|   204k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|   204k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|   204k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|   204k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|   204k|  return *obj;
  181|   204k|}
hb-ot-cff1-table.cc:_ZL4CrapIN3CFF8number_tEERT_v:
  176|  8.22k|static inline Type& Crap () {
  177|  8.22k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  8.22k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  8.22k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  8.22k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  8.22k|  return *obj;
  181|  8.22k|}
_ZN10CrapHelperIN3CFF14call_context_tEE8get_crapEv:
  186|  2.42k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-cff1-table.cc:_ZL4CrapIN3CFF14call_context_tEERT_v:
  176|  1.98k|static inline Type& Crap () {
  177|  1.98k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  1.98k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  1.98k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  1.98k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  1.98k|  return *obj;
  181|  1.98k|}
_ZN10NullHelperIN3CFF14call_context_tEE8get_nullEv:
  122|  2.42k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN3CFF14call_context_tEE8get_nullEv:
  113|  2.42k|  {
  114|  2.42k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.42k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.42k|  }
hb-ot-cff2-table.cc:_ZL4CrapIN3CFF14call_context_tEERT_v:
  176|    443|static inline Type& Crap () {
  177|    443|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    443|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    443|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    443|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    443|  return *obj;
  181|    443|}
hb-ot-cff2-table.cc:_ZL4CrapIN3CFF8number_tEERT_v:
  176|  1.88k|static inline Type& Crap () {
  177|  1.88k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  1.88k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  1.88k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  1.88k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  1.88k|  return *obj;
  181|  1.88k|}
_ZN10CrapHelperIfE8get_crapEv:
  186|     26|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-cff2-table.cc:_ZL4CrapIfERT_v:
  176|     26|static inline Type& Crap () {
  177|     26|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|     26|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|     26|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|     26|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|     26|  return *obj;
  181|     26|}
_ZN10NullHelperIfE8get_nullEv:
  122|     26|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIfE8get_nullEv:
  113|     26|  {
  114|     26|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|     26|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|     26|  }
_ZN10CrapHelperIN19hb_ot_map_builder_t14feature_info_tEE8get_crapEv:
  186|  32.6k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-map.cc:_ZL4CrapIN19hb_ot_map_builder_t14feature_info_tEERT_v:
  176|  32.6k|static inline Type& Crap () {
  177|  32.6k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  32.6k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  32.6k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  32.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  32.6k|  return *obj;
  181|  32.6k|}
_ZN10NullHelperIN19hb_ot_map_builder_t14feature_info_tEE8get_nullEv:
  122|  32.6k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN19hb_ot_map_builder_t14feature_info_tEE8get_nullEv:
  113|  32.6k|  {
  114|  32.6k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  32.6k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  32.6k|  }
_ZN10CrapHelperIN11hb_ot_map_t12lookup_map_tEE8get_crapEv:
  186|   108k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-map.cc:_ZL4CrapIN11hb_ot_map_t12lookup_map_tEERT_v:
  176|   108k|static inline Type& Crap () {
  177|   108k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|   108k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|   108k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|   108k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|   108k|  return *obj;
  181|   108k|}
_ZN10CrapHelperIN19hb_ot_map_builder_t12stage_info_tEE8get_crapEv:
  186|  2.52k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-map.cc:_ZL4CrapIN19hb_ot_map_builder_t12stage_info_tEERT_v:
  176|  2.52k|static inline Type& Crap () {
  177|  2.52k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  2.52k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  2.52k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  2.52k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  2.52k|  return *obj;
  181|  2.52k|}
_ZN10NullHelperIN19hb_ot_map_builder_t12stage_info_tEE8get_nullEv:
  122|  2.52k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN19hb_ot_map_builder_t12stage_info_tEE8get_nullEv:
  113|  2.52k|  {
  114|  2.52k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  2.52k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  2.52k|  }
_ZN10CrapHelperIN11hb_ot_map_t13feature_map_tEE8get_crapEv:
  186|  1.33k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-map.cc:_ZL4CrapIN11hb_ot_map_t13feature_map_tEERT_v:
  176|  1.33k|static inline Type& Crap () {
  177|  1.33k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  1.33k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  1.33k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  1.33k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  1.33k|  return *obj;
  181|  1.33k|}
_ZN10NullHelperIN11hb_ot_map_t13feature_map_tEE8get_nullEv:
  122|  1.33k|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullIN11hb_ot_map_t13feature_map_tEE8get_nullEv:
  113|  1.33k|  {
  114|  1.33k|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.33k|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.33k|  }
_ZN10CrapHelperIN11hb_ot_map_t11stage_map_tEE8get_crapEv:
  186|  2.08k|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-map.cc:_ZL4CrapIN11hb_ot_map_t11stage_map_tEERT_v:
  176|  2.08k|static inline Type& Crap () {
  177|  2.08k|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  2.08k|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  2.08k|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  2.08k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  2.08k|  return *obj;
  181|  2.08k|}
_ZN10NullHelperI22arabic_fallback_plan_tE8get_nullEv:
  122|    693|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI22arabic_fallback_plan_tE8get_nullEv:
  113|    693|  {
  114|    693|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|    693|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|    693|  }
hb-ot-shaper-arabic.cc:_ZL4CrapIPN22hb_serialize_context_t8object_tEERT_v:
  176|    125|static inline Type& Crap () {
  177|    125|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|    125|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|    125|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|    125|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|    125|  return *obj;
  181|    125|}
hb-ot-shaper-arabic.cc:_ZL4CrapIN22hb_serialize_context_t8object_t6link_tEERT_v:
  176|     89|static inline Type& Crap () {
  177|     89|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|     89|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|     89|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|     89|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|     89|  return *obj;
  181|     89|}
_ZN16CrapOrNullHelperI15hb_glyph_info_tE3getEv:
  192|  1.95M|  static Type & get () { return Crap (Type); }
  ------------------
  |  |  188|  1.95M|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
_ZN10CrapHelperI15hb_glyph_info_tE8get_crapEv:
  186|  1.95M|  static Type & get_crap () { return Crap<Type> (); }
hb-ot-shaper-use.cc:_ZL4CrapI15hb_glyph_info_tERT_v:
  176|  1.95M|static inline Type& Crap () {
  177|  1.95M|  static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  178|  1.95M|  Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
  179|  1.95M|  memcpy (obj, &Null (Type), sizeof (*obj));
  ------------------
  |  |  124|  1.95M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  180|  1.95M|  return *obj;
  181|  1.95M|}
_ZN10NullHelperI15hb_glyph_info_tE8get_nullEv:
  122|  1.95M|  static const Type & get_null () { return Null<Type>::get_null (); }
_ZN4NullI15hb_glyph_info_tE8get_nullEv:
  113|  1.95M|  {
  114|  1.95M|    static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
  115|  1.95M|    return *reinterpret_cast<Type const *> (_hb_NullPool);
  116|  1.95M|  }
_ZN10NullHelperI16hb_paint_funcs_tE8get_nullEv:
  122|      2|  static const Type & get_null () { return Null<Type>::get_null (); }

hb-number.cc:_ZL9strtod_rlPKcPS0_:
  123|  1.91k|{
  124|  1.91k|  double value = 0;
  125|  1.91k|  double frac = 0;
  126|  1.91k|  double frac_count = 0;
  127|  1.91k|  unsigned exp = 0;
  128|  1.91k|  bool neg = false, exp_neg = false, exp_overflow = false;
  129|  1.91k|  const unsigned long long MAX_FRACT = 0xFFFFFFFFFFFFFull; /* 2^52-1 */
  130|  1.91k|  const unsigned MAX_EXP = 0x7FFu; /* 2^11-1 */
  131|       |
  132|  1.91k|  const char *pe = *end_ptr;
  133|  1.91k|  while (p < pe && ISSPACE (*p))
  ------------------
  |  Branch (133:10): [True: 1.91k, False: 2]
  |  Branch (133:20): [True: 0, False: 1.91k]
  ------------------
  134|      0|    p++;
  135|       |
  136|  1.91k|  int cs;
  137|       |  
  138|  1.91k|#line 132 "hb-number-parser.hh"
  139|  1.91k|	{
  140|  1.91k|	cs = double_parser_start;
  141|  1.91k|	}
  142|       |
  143|  1.91k|#line 135 "hb-number-parser.hh"
  144|  1.91k|	{
  145|  1.91k|	int _slen;
  146|  1.91k|	int _trans;
  147|  1.91k|	const unsigned char *_keys;
  148|  1.91k|	const char *_inds;
  149|  1.91k|	if ( p == pe )
  ------------------
  |  Branch (149:7): [True: 2, False: 1.91k]
  ------------------
  150|      2|		goto _test_eof;
  151|  1.91k|	if ( cs == 0 )
  ------------------
  |  Branch (151:7): [True: 0, False: 1.91k]
  ------------------
  152|      0|		goto _out;
  153|  18.5k|_resume:
  154|  18.5k|	_keys = _double_parser_trans_keys + (cs<<1);
  155|  18.5k|	_inds = _double_parser_indicies + _double_parser_index_offsets[cs];
  156|       |
  157|  18.5k|	_slen = _double_parser_key_spans[cs];
  158|  18.5k|	_trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
  ------------------
  |  Branch (158:18): [True: 18.5k, False: 0]
  |  Branch (158:31): [True: 18.4k, False: 11]
  ------------------
  159|  18.5k|		(*p) <= _keys[1] ?
  ------------------
  |  Branch (159:3): [True: 18.4k, False: 3]
  ------------------
  160|  18.4k|		(*p) - _keys[0] : _slen ];
  161|       |
  162|  18.5k|	cs = _double_parser_trans_targs[_trans];
  163|       |
  164|  18.5k|	if ( _double_parser_trans_actions[_trans] == 0 )
  ------------------
  |  Branch (164:7): [True: 1.88k, False: 16.6k]
  ------------------
  165|  1.88k|		goto _again;
  166|       |
  167|  16.6k|	switch ( _double_parser_trans_actions[_trans] ) {
  ------------------
  |  Branch (167:11): [True: 0, False: 16.6k]
  ------------------
  168|     30|	case 1:
  ------------------
  |  Branch (168:2): [True: 30, False: 16.5k]
  ------------------
  169|     30|#line 37 "hb-number-parser.rl"
  170|     30|	{ neg = true; }
  171|     30|	break;
  172|    338|	case 4:
  ------------------
  |  Branch (172:2): [True: 338, False: 16.2k]
  ------------------
  173|    338|#line 38 "hb-number-parser.rl"
  174|    338|	{ exp_neg = true; }
  175|    338|	break;
  176|  4.58k|	case 2:
  ------------------
  |  Branch (176:2): [True: 4.58k, False: 12.0k]
  ------------------
  177|  4.58k|#line 40 "hb-number-parser.rl"
  178|  4.58k|	{
  179|  4.58k|	value = value * 10. + ((*p) - '0');
  180|  4.58k|}
  181|  4.58k|	break;
  182|  7.36k|	case 3:
  ------------------
  |  Branch (182:2): [True: 7.36k, False: 9.25k]
  ------------------
  183|  7.36k|#line 43 "hb-number-parser.rl"
  184|  7.36k|	{
  185|  7.36k|	if (likely (frac <= MAX_FRACT / 10))
  ------------------
  |  |  258|  7.36k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 6.89k, False: 470]
  |  |  ------------------
  ------------------
  186|  6.89k|	{
  187|  6.89k|	  frac = frac * 10. + ((*p) - '0');
  188|  6.89k|	  ++frac_count;
  189|  6.89k|	}
  190|  7.36k|}
  191|  7.36k|	break;
  192|  4.30k|	case 5:
  ------------------
  |  Branch (192:2): [True: 4.30k, False: 12.3k]
  ------------------
  193|  4.30k|#line 50 "hb-number-parser.rl"
  194|  4.30k|	{
  195|  4.30k|	if (likely (exp * 10 + ((*p) - '0') <= MAX_EXP))
  ------------------
  |  |  258|  4.30k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.51k, False: 1.79k]
  |  |  ------------------
  ------------------
  196|  2.51k|	  exp = exp * 10 + ((*p) - '0');
  197|  1.79k|	else
  198|  1.79k|	  exp_overflow = true;
  199|  4.30k|}
  200|  4.30k|	break;
  201|  16.6k|#line 187 "hb-number-parser.hh"
  202|  16.6k|	}
  203|       |
  204|  18.5k|_again:
  205|  18.5k|	if ( cs == 0 )
  ------------------
  |  Branch (205:7): [True: 14, False: 18.4k]
  ------------------
  206|     14|		goto _out;
  207|  18.4k|	if ( ++p != pe )
  ------------------
  |  Branch (207:7): [True: 16.5k, False: 1.90k]
  ------------------
  208|  16.5k|		goto _resume;
  209|  1.90k|	_test_eof: {}
  210|  1.91k|	_out: {}
  211|  1.91k|	}
  212|       |
  213|      0|#line 113 "hb-number-parser.rl"
  214|       |
  215|       |
  216|      0|  *end_ptr = p;
  217|       |
  218|  1.91k|  if (frac_count) value += frac / _pow10 (frac_count);
  ------------------
  |  Branch (218:7): [True: 1.01k, False: 899]
  ------------------
  219|  1.91k|  if (neg) value *= -1.;
  ------------------
  |  Branch (219:7): [True: 30, False: 1.88k]
  ------------------
  220|       |
  221|  1.91k|  if (unlikely (exp_overflow))
  ------------------
  |  |  259|  1.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 591, False: 1.32k]
  |  |  ------------------
  ------------------
  222|    591|  {
  223|    591|    if (value == 0) return value;
  ------------------
  |  Branch (223:9): [True: 160, False: 431]
  ------------------
  224|    431|    if (exp_neg)    return neg ? -DBL_MIN : DBL_MIN;
  ------------------
  |  Branch (224:9): [True: 37, False: 394]
  |  Branch (224:28): [True: 3, False: 34]
  ------------------
  225|    394|    else            return neg ? -DBL_MAX : DBL_MAX;
  ------------------
  |  Branch (225:28): [True: 1, False: 393]
  ------------------
  226|    431|  }
  227|       |
  228|  1.32k|  if (exp)
  ------------------
  |  Branch (228:7): [True: 263, False: 1.06k]
  ------------------
  229|    263|  {
  230|    263|    if (exp_neg) value /= _pow10 (exp);
  ------------------
  |  Branch (230:9): [True: 150, False: 113]
  ------------------
  231|    113|    else         value *= _pow10 (exp);
  232|    263|  }
  233|       |
  234|  1.32k|  return value;
  235|  1.91k|}
hb-number.cc:_ZL6_pow10j:
  100|  1.28k|{
  101|  1.28k|  static const double _powers_of_10[] =
  102|  1.28k|  {
  103|  1.28k|    1.0e+256,
  104|  1.28k|    1.0e+128,
  105|  1.28k|    1.0e+64,
  106|  1.28k|    1.0e+32,
  107|  1.28k|    1.0e+16,
  108|  1.28k|    1.0e+8,
  109|  1.28k|    10000.,
  110|  1.28k|    100.,
  111|  1.28k|    10.
  112|  1.28k|  };
  113|  1.28k|  unsigned mask = 1 << (ARRAY_LENGTH (_powers_of_10) - 1);
  114|  1.28k|  double result = 1;
  115|  12.8k|  for (const double *power = _powers_of_10; mask; ++power, mask >>= 1)
  ------------------
  |  Branch (115:45): [True: 11.5k, False: 1.28k]
  ------------------
  116|  11.5k|    if (exponent & mask) result *= *power;
  ------------------
  |  Branch (116:9): [True: 2.25k, False: 9.27k]
  ------------------
  117|  1.28k|  return result;
  118|  1.28k|}

_Z15hb_parse_doublePPKcS0_Pdb:
   73|  1.91k|{
   74|  1.91k|  const char *pend = end;
   75|  1.91k|  *pv = strtod_rl (*pp, &pend);
   76|  1.91k|  if (unlikely (*pp == pend)) return false;
  ------------------
  |  |  259|  1.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.91k]
  |  |  ------------------
  ------------------
   77|  1.91k|  *pp = pend;
   78|  1.91k|  return !whole_buffer || end == pend;
  ------------------
  |  Branch (78:10): [True: 0, False: 1.91k]
  |  Branch (78:27): [True: 1.90k, False: 14]
  ------------------
   79|  1.91k|}

_ZN20hb_reference_count_t4initEi:
  147|   656k|  void init (int v = 1) { ref_count = v; }
_ZNK20hb_reference_count_t11get_relaxedEv:
  148|  12.8M|  int get_relaxed () const { return ref_count; }
_ZNK20hb_reference_count_t3incEv:
  149|  1.11M|  int inc () const { return ref_count.inc (); }
_ZNK20hb_reference_count_t3decEv:
  150|  1.63M|  int dec () const { return ref_count.dec (); }
_ZN20hb_reference_count_t4finiEv:
  151|   658k|  void fini () { ref_count = -0x0000DEAD; }
_ZNK20hb_reference_count_t8is_validEv:
  154|  4.01M|  bool is_valid () const { return ref_count > 0; }
_ZNK20hb_user_data_array_t19hb_user_data_item_teqEPK18hb_user_data_key_t:
  167|  63.0k|    bool operator == (const hb_user_data_key_t *other_key) const { return key == other_key; }
_ZN20hb_user_data_array_t19hb_user_data_item_t4finiEv:
  170|  32.6k|    void fini () { if (destroy) destroy (data); }
  ------------------
  |  Branch (170:24): [True: 32.6k, False: 0]
  ------------------
_ZN20hb_user_data_array_t4initEv:
  176|  33.1k|  void init () { lock.init (); items.init (); }
_ZN20hb_user_data_array_t4finiEv:
  178|  33.1k|  void fini () { items.fini (lock); lock.fini (); }
_ZN20hb_user_data_array_t3setEP18hb_user_data_key_tPvPFvS2_Ei:
  184|  34.1k|  {
  185|  34.1k|    if (!key)
  ------------------
  |  Branch (185:9): [True: 0, False: 34.1k]
  ------------------
  186|      0|      return false;
  187|       |
  188|  34.1k|    if (replace) {
  ------------------
  |  Branch (188:9): [True: 0, False: 34.1k]
  ------------------
  189|      0|      if (!data && !destroy) {
  ------------------
  |  Branch (189:11): [True: 0, False: 0]
  |  Branch (189:20): [True: 0, False: 0]
  ------------------
  190|      0|	items.remove (key, lock);
  191|      0|	return true;
  192|      0|      }
  193|      0|    }
  194|  34.1k|    hb_user_data_item_t item = {key, data, destroy};
  195|  34.1k|    bool ret = !!items.replace_or_insert (item, lock, (bool) replace);
  196|       |
  197|  34.1k|    return ret;
  198|  34.1k|  }
_ZN20hb_user_data_array_t3getEP18hb_user_data_key_t:
  201|  63.9k|  {
  202|  63.9k|    hb_user_data_item_t item = {nullptr, nullptr, nullptr};
  203|       |
  204|  63.9k|    return items.find (key, &item, lock) ? item.data : nullptr;
  ------------------
  |  Branch (204:12): [True: 63.0k, False: 938]
  ------------------
  205|  63.9k|  }
_ZNK18hb_object_header_t8is_inertEv:
  219|  6.23M|  bool is_inert () const { return !ref_count.get_relaxed (); }
_ZN17hb_lockable_set_tIN20hb_user_data_array_t19hb_user_data_item_tE10hb_mutex_tE4initEv:
   50|  33.1k|  void init () { items.init (); }
_ZN17hb_lockable_set_tIN20hb_user_data_array_t19hb_user_data_item_tE10hb_mutex_tE4finiERS2_:
  116|  33.1k|  {
  117|  33.1k|    if (!items.length)
  ------------------
  |  Branch (117:9): [True: 576, False: 32.6k]
  ------------------
  118|    576|    {
  119|       |      /* No need to lock. */
  120|    576|      items.fini ();
  121|    576|      return;
  122|    576|    }
  123|  32.6k|    l.lock ();
  124|  65.2k|    while (items.length)
  ------------------
  |  Branch (124:12): [True: 32.6k, False: 32.6k]
  ------------------
  125|  32.6k|    {
  126|  32.6k|      item_t old = items.tail ();
  127|  32.6k|      items.pop ();
  128|  32.6k|      l.unlock ();
  129|  32.6k|      old.fini ();
  130|  32.6k|      l.lock ();
  131|  32.6k|    }
  132|  32.6k|    items.fini ();
  133|  32.6k|    l.unlock ();
  134|  32.6k|  }
_ZN17hb_lockable_set_tIN20hb_user_data_array_t19hb_user_data_item_tE10hb_mutex_tE17replace_or_insertIS1_EEPS1_T_RS2_b:
   54|  34.1k|  {
   55|  34.1k|    l.lock ();
   56|  34.1k|    item_t *item = items.lsearch (v);
   57|  34.1k|    if (item) {
  ------------------
  |  Branch (57:9): [True: 0, False: 34.1k]
  ------------------
   58|      0|      if (replace) {
  ------------------
  |  Branch (58:11): [True: 0, False: 0]
  ------------------
   59|      0|	item_t old = *item;
   60|      0|	*item = v;
   61|      0|	l.unlock ();
   62|      0|	old.fini ();
   63|      0|      }
   64|      0|      else {
   65|      0|	item = nullptr;
   66|      0|	l.unlock ();
   67|      0|      }
   68|  34.1k|    } else {
   69|  34.1k|      item = items.push (v);
   70|  34.1k|      l.unlock ();
   71|  34.1k|    }
   72|  34.1k|    return items.in_error () ? nullptr : item;
  ------------------
  |  Branch (72:12): [True: 1.49k, False: 32.6k]
  ------------------
   73|  34.1k|  }
_ZN17hb_lockable_set_tIN20hb_user_data_array_t19hb_user_data_item_tE10hb_mutex_tE4findIP18hb_user_data_key_tEEbT_PS1_RS2_:
   94|  63.9k|  {
   95|  63.9k|    l.lock ();
   96|  63.9k|    item_t *item = items.lsearch (v);
   97|  63.9k|    if (item)
  ------------------
  |  Branch (97:9): [True: 63.0k, False: 938]
  ------------------
   98|  63.0k|      *i = *item;
   99|  63.9k|    l.unlock ();
  100|  63.9k|    return !!item;
  101|  63.9k|  }
hb-blob.cc:_ZL16hb_object_createI9hb_blob_tJEEPT_DpT0_:
  239|  86.7k|{
  240|  86.7k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  86.7k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  86.7k|  if (unlikely (!obj))
  ------------------
  |  |  259|  86.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 230, False: 86.5k]
  |  |  ------------------
  ------------------
  243|    230|    return obj;
  244|       |
  245|  86.5k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  86.5k|  hb_object_init (obj);
  248|  86.5k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  86.5k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  86.5k|  return obj;
  251|  86.7k|}
hb-blob.cc:_ZL14hb_object_initI9hb_blob_tEvPT_:
  254|  86.5k|{
  255|  86.5k|  obj->header.ref_count.init ();
  256|  86.5k|  obj->header.writable = true;
  257|  86.5k|  obj->header.user_data.init ();
  258|  86.5k|}
hb-blob.cc:_ZL15hb_object_traceI9hb_blob_tEvPKT_PKc:
  230|  3.98M|{
  231|  3.98M|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|  7.97M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 3.86M, False: 125k]
  |  |  ------------------
  ------------------
  232|  3.98M|	     "%s refcount=%d",
  233|  3.98M|	     function,
  234|  3.98M|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|  3.98M|}
hb-blob.cc:_ZL19hb_object_referenceI9hb_blob_tEPT_S2_:
  276|  1.49M|{
  277|  1.49M|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  1.49M|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  278|  1.49M|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  2.99M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.29M, False: 203k]
  |  |  |  Branch (259:47): [True: 0, False: 1.49M]
  |  |  |  Branch (259:47): [True: 1.29M, False: 203k]
  |  |  ------------------
  ------------------
  279|  1.29M|    return obj;
  280|   203k|  assert (hb_object_is_valid (obj));
  281|      0|  obj->header.ref_count.inc ();
  282|   203k|  return obj;
  283|  1.49M|}
hb-blob.cc:_ZL18hb_object_is_validI9hb_blob_tEbPKT_:
  261|   493k|{
  262|   493k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   493k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   493k|}
hb-blob.cc:_ZL17hb_object_destroyI9hb_blob_tEbPT_:
  286|  2.40M|{
  287|  2.40M|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  2.40M|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|  2.40M|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  4.68M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.11M, False: 289k]
  |  |  |  Branch (259:47): [True: 125k, False: 2.28M]
  |  |  |  Branch (259:47): [True: 1.99M, False: 289k]
  |  |  ------------------
  ------------------
  289|  2.11M|    return false;
  290|   289k|  assert (hb_object_is_valid (obj));
  291|   289k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 203k, False: 86.5k]
  ------------------
  292|   203k|    return false;
  293|       |
  294|  86.5k|  hb_object_fini (obj);
  295|       |
  296|  86.5k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|  86.5k|    obj->~Type ();
  298|       |
  299|  86.5k|  return true;
  300|   289k|}
hb-blob.cc:_ZL14hb_object_finiI9hb_blob_tEvPT_:
  303|  86.5k|{
  304|  86.5k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  86.5k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  86.5k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 86.5k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  86.5k|}
hb-blob.cc:_ZL22hb_object_is_immutableI9hb_blob_tEbPKT_:
  266|   152k|{
  267|   152k|  return !obj->header.writable;
  268|   152k|}
hb-blob.cc:_ZL24hb_object_make_immutableI9hb_blob_tEvPKT_:
  271|  75.9k|{
  272|  75.9k|  obj->header.writable = false;
  273|  75.9k|}
hb-buffer.cc:_ZL16hb_object_createI11hb_buffer_tJEEPT_DpT0_:
  239|   156k|{
  240|   156k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|   156k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|   156k|  if (unlikely (!obj))
  ------------------
  |  |  259|   156k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.04k, False: 154k]
  |  |  ------------------
  ------------------
  243|  2.04k|    return obj;
  244|       |
  245|   154k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|   154k|  hb_object_init (obj);
  248|   154k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   154k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|   154k|  return obj;
  251|   156k|}
hb-buffer.cc:_ZL14hb_object_initI11hb_buffer_tEvPT_:
  254|   154k|{
  255|   154k|  obj->header.ref_count.init ();
  256|   154k|  obj->header.writable = true;
  257|   154k|  obj->header.user_data.init ();
  258|   154k|}
hb-buffer.cc:_ZL15hb_object_traceI11hb_buffer_tEvPKT_PKc:
  230|   311k|{
  231|   311k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   623k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 311k, False: 0]
  |  |  ------------------
  ------------------
  232|   311k|	     "%s refcount=%d",
  233|   311k|	     function,
  234|   311k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|   311k|}
hb-buffer.cc:_ZL22hb_object_is_immutableI11hb_buffer_tEbPKT_:
  266|  2.20M|{
  267|  2.20M|  return !obj->header.writable;
  268|  2.20M|}
hb-buffer.cc:_ZL18hb_object_is_validI11hb_buffer_tEbPKT_:
  261|   154k|{
  262|   154k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   154k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   154k|}
hb-buffer.cc:_ZL17hb_object_destroyI11hb_buffer_tEbPT_:
  286|   156k|{
  287|   156k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   156k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|   156k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   313k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.04k, False: 154k]
  |  |  |  Branch (259:47): [True: 0, False: 156k]
  |  |  |  Branch (259:47): [True: 2.04k, False: 154k]
  |  |  ------------------
  ------------------
  289|  2.04k|    return false;
  290|   154k|  assert (hb_object_is_valid (obj));
  291|   154k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 154k]
  ------------------
  292|      0|    return false;
  293|       |
  294|   154k|  hb_object_fini (obj);
  295|       |
  296|   154k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|   154k|  return true;
  300|   154k|}
hb-buffer.cc:_ZL14hb_object_finiI11hb_buffer_tEvPT_:
  303|   154k|{
  304|   154k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|   154k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|   154k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 154k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|   154k|}
hb-draw.cc:_ZL22hb_object_is_immutableI15hb_draw_funcs_tEbPKT_:
  266|      5|{
  267|      5|  return !obj->header.writable;
  268|      5|}
hb-draw.cc:_ZL16hb_object_createI15hb_draw_funcs_tJEEPT_DpT0_:
  239|  33.3k|{
  240|  33.3k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  33.3k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  33.3k|  if (unlikely (!obj))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 489, False: 32.8k]
  |  |  ------------------
  ------------------
  243|    489|    return obj;
  244|       |
  245|  32.8k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  32.8k|  hb_object_init (obj);
  248|  32.8k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  32.8k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  32.8k|  return obj;
  251|  33.3k|}
hb-draw.cc:_ZL14hb_object_initI15hb_draw_funcs_tEvPT_:
  254|  32.8k|{
  255|  32.8k|  obj->header.ref_count.init ();
  256|  32.8k|  obj->header.writable = true;
  257|  32.8k|  obj->header.user_data.init ();
  258|  32.8k|}
hb-draw.cc:_ZL15hb_object_traceI15hb_draw_funcs_tEvPKT_PKc:
  230|  66.1k|{
  231|  66.1k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   132k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 66.1k, False: 0]
  |  |  ------------------
  ------------------
  232|  66.1k|	     "%s refcount=%d",
  233|  66.1k|	     function,
  234|  66.1k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|  66.1k|}
hb-draw.cc:_ZL18hb_object_is_validI15hb_draw_funcs_tEbPKT_:
  261|  32.8k|{
  262|  32.8k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|  32.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|  32.8k|}
hb-draw.cc:_ZL17hb_object_destroyI15hb_draw_funcs_tEbPT_:
  286|  33.3k|{
  287|  33.3k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|  33.3k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 489, False: 32.8k]
  |  |  |  Branch (259:47): [True: 0, False: 33.3k]
  |  |  |  Branch (259:47): [True: 489, False: 32.8k]
  |  |  ------------------
  ------------------
  289|    489|    return false;
  290|  32.8k|  assert (hb_object_is_valid (obj));
  291|  32.8k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 32.8k]
  ------------------
  292|      0|    return false;
  293|       |
  294|  32.8k|  hb_object_fini (obj);
  295|       |
  296|  32.8k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|  32.8k|  return true;
  300|  32.8k|}
hb-draw.cc:_ZL14hb_object_finiI15hb_draw_funcs_tEvPT_:
  303|  32.8k|{
  304|  32.8k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  32.8k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  32.8k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 32.8k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  32.8k|}
hb-draw.cc:_ZL24hb_object_make_immutableI15hb_draw_funcs_tEvPKT_:
  271|      1|{
  272|      1|  obj->header.writable = false;
  273|      1|}
hb-face.cc:_ZL14hb_object_initI14hb_sparseset_tI23hb_bit_set_invertible_tEEvPT_:
  254|  98.5k|{
  255|  98.5k|  obj->header.ref_count.init ();
  256|  98.5k|  obj->header.writable = true;
  257|  98.5k|  obj->header.user_data.init ();
  258|  98.5k|}
hb-face.cc:_ZL14hb_object_finiI14hb_sparseset_tI23hb_bit_set_invertible_tEEvPT_:
  303|  98.5k|{
  304|  98.5k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  98.5k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  98.5k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 98.5k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  98.5k|}
hb-face.cc:_ZL16hb_object_createI9hb_face_tJEEPT_DpT0_:
  239|  33.3k|{
  240|  33.3k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  33.3k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  33.3k|  if (unlikely (!obj))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 33.3k]
  |  |  ------------------
  ------------------
  243|      7|    return obj;
  244|       |
  245|  33.3k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  33.3k|  hb_object_init (obj);
  248|  33.3k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  33.3k|  return obj;
  251|  33.3k|}
hb-face.cc:_ZL14hb_object_initI9hb_face_tEvPT_:
  254|  33.3k|{
  255|  33.3k|  obj->header.ref_count.init ();
  256|  33.3k|  obj->header.writable = true;
  257|  33.3k|  obj->header.user_data.init ();
  258|  33.3k|}
hb-face.cc:_ZL15hb_object_traceI9hb_face_tEvPKT_PKc:
  230|   133k|{
  231|   133k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   266k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 133k, False: 0]
  |  |  ------------------
  ------------------
  232|   133k|	     "%s refcount=%d",
  233|   133k|	     function,
  234|   133k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|   133k|}
hb-face.cc:_ZL19hb_object_referenceI9hb_face_tEPT_S2_:
  276|  33.2k|{
  277|  33.2k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  278|  33.2k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  66.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 33.2k]
  |  |  |  Branch (259:47): [True: 0, False: 33.2k]
  |  |  |  Branch (259:47): [True: 10, False: 33.2k]
  |  |  ------------------
  ------------------
  279|     10|    return obj;
  280|  33.2k|  assert (hb_object_is_valid (obj));
  281|      0|  obj->header.ref_count.inc ();
  282|  33.2k|  return obj;
  283|  33.2k|}
hb-face.cc:_ZL18hb_object_is_validI9hb_face_tEbPKT_:
  261|   232k|{
  262|   232k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   232k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   232k|}
hb-face.cc:_ZL17hb_object_destroyI9hb_face_tEbPT_:
  286|  66.5k|{
  287|  66.5k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  66.5k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|  66.5k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   133k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24, False: 66.5k]
  |  |  |  Branch (259:47): [True: 0, False: 66.5k]
  |  |  |  Branch (259:47): [True: 24, False: 66.5k]
  |  |  ------------------
  ------------------
  289|     24|    return false;
  290|  66.5k|  assert (hb_object_is_valid (obj));
  291|  66.5k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 33.2k, False: 33.3k]
  ------------------
  292|  33.2k|    return false;
  293|       |
  294|  33.3k|  hb_object_fini (obj);
  295|       |
  296|  33.3k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|  33.3k|  return true;
  300|  66.5k|}
hb-face.cc:_ZL14hb_object_finiI9hb_face_tEvPT_:
  303|  33.3k|{
  304|  33.3k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  33.3k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  33.3k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 33.1k, False: 139]
  ------------------
  307|  33.1k|  {
  308|  33.1k|    user_data->fini ();
  309|  33.1k|    hb_free (user_data);
  ------------------
  |  |  236|  33.1k|#define hb_free hb_free_impl
  ------------------
  310|  33.1k|    obj->header.user_data.set_relaxed (nullptr);
  311|  33.1k|  }
  312|  33.3k|}
hb-face.cc:_ZL23hb_object_set_user_dataI9hb_face_tEbPT_P18hb_user_data_key_tPvPFvS5_Ei:
  319|  34.8k|{
  320|  34.8k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  69.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 244, False: 34.6k]
  |  |  |  Branch (259:47): [True: 0, False: 34.8k]
  |  |  |  Branch (259:47): [True: 244, False: 34.6k]
  |  |  ------------------
  ------------------
  321|    244|    return false;
  322|  34.6k|  assert (hb_object_is_valid (obj));
  323|       |
  324|  34.6k|retry:
  325|  34.6k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  326|  34.6k|  if (unlikely (!user_data))
  ------------------
  |  |  259|  34.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.7k, False: 921]
  |  |  ------------------
  ------------------
  327|  33.7k|  {
  328|  33.7k|    user_data = (hb_user_data_array_t *) hb_calloc (sizeof (hb_user_data_array_t), 1);
  ------------------
  |  |  234|  33.7k|#define hb_calloc hb_calloc_impl
  ------------------
  329|  33.7k|    if (unlikely (!user_data))
  ------------------
  |  |  259|  33.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 539, False: 33.1k]
  |  |  ------------------
  ------------------
  330|    539|      return false;
  331|  33.1k|    user_data->init ();
  332|  33.1k|    if (unlikely (!obj->header.user_data.cmpexch (nullptr, user_data)))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  333|      0|    {
  334|      0|      user_data->fini ();
  335|      0|      hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  336|      0|      goto retry;
  337|      0|    }
  338|  33.1k|  }
  339|       |
  340|  34.1k|  return user_data->set (key, data, destroy, replace);
  341|  34.6k|}
hb-face.cc:_ZL23hb_object_get_user_dataIK9hb_face_tEPvPT_P18hb_user_data_key_t:
  346|  98.6k|{
  347|  98.6k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   197k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 248, False: 98.3k]
  |  |  |  Branch (259:47): [True: 0, False: 98.6k]
  |  |  |  Branch (259:47): [True: 248, False: 98.3k]
  |  |  ------------------
  ------------------
  348|    248|    return nullptr;
  349|  98.3k|  assert (hb_object_is_valid (obj));
  350|      0|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  351|  98.3k|  if (!user_data)
  ------------------
  |  Branch (351:7): [True: 34.4k, False: 63.9k]
  ------------------
  352|  34.4k|    return nullptr;
  353|  63.9k|  return user_data->get (key);
  354|  98.3k|}
hb-face.cc:_ZL22hb_object_is_immutableI9hb_face_tEbPKT_:
  266|  82.7k|{
  267|  82.7k|  return !obj->header.writable;
  268|  82.7k|}
hb-face.cc:_ZL24hb_object_make_immutableI9hb_face_tEvPKT_:
  271|  33.2k|{
  272|  33.2k|  obj->header.writable = false;
  273|  33.2k|}
hb-font.cc:_ZL16hb_object_createI9hb_font_tJEEPT_DpT0_:
  239|  33.3k|{
  240|  33.3k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  33.3k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  33.3k|  if (unlikely (!obj))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 77, False: 33.2k]
  |  |  ------------------
  ------------------
  243|     77|    return obj;
  244|       |
  245|  33.2k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  33.2k|  hb_object_init (obj);
  248|  33.2k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  33.2k|  return obj;
  251|  33.3k|}
hb-font.cc:_ZL14hb_object_initI9hb_font_tEvPT_:
  254|  33.2k|{
  255|  33.2k|  obj->header.ref_count.init ();
  256|  33.2k|  obj->header.writable = true;
  257|  33.2k|  obj->header.user_data.init ();
  258|  33.2k|}
hb-font.cc:_ZL15hb_object_traceI9hb_font_tEvPKT_PKc:
  230|  99.8k|{
  231|  99.8k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   199k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 99.8k, False: 0]
  |  |  ------------------
  ------------------
  232|  99.8k|	     "%s refcount=%d",
  233|  99.8k|	     function,
  234|  99.8k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|  99.8k|}
hb-font.cc:_ZL16hb_object_createI15hb_font_funcs_tJEEPT_DpT0_:
  239|      1|{
  240|      1|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|      1|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|      1|  if (unlikely (!obj))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  243|      0|    return obj;
  244|       |
  245|      1|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|      1|  hb_object_init (obj);
  248|      1|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|      1|  return obj;
  251|      1|}
hb-font.cc:_ZL14hb_object_initI15hb_font_funcs_tEvPT_:
  254|      1|{
  255|      1|  obj->header.ref_count.init ();
  256|      1|  obj->header.writable = true;
  257|      1|  obj->header.user_data.init ();
  258|      1|}
hb-font.cc:_ZL15hb_object_traceI15hb_font_funcs_tEvPKT_PKc:
  230|   230k|{
  231|   230k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   460k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 230k, False: 0]
  |  |  ------------------
  ------------------
  232|   230k|	     "%s refcount=%d",
  233|   230k|	     function,
  234|   230k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|   230k|}
hb-font.cc:_ZL19hb_object_referenceI15hb_font_funcs_tEPT_S2_:
  276|  98.4k|{
  277|  98.4k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  98.4k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  278|  98.4k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   196k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 98.4k]
  |  |  |  Branch (259:47): [True: 0, False: 98.4k]
  |  |  |  Branch (259:47): [True: 0, False: 98.4k]
  |  |  ------------------
  ------------------
  279|      0|    return obj;
  280|  98.4k|  assert (hb_object_is_valid (obj));
  281|      0|  obj->header.ref_count.inc ();
  282|  98.4k|  return obj;
  283|  98.4k|}
hb-font.cc:_ZL18hb_object_is_validI15hb_font_funcs_tEbPKT_:
  261|   196k|{
  262|   196k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   196k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   196k|}
hb-font.cc:_ZL17hb_object_destroyI15hb_font_funcs_tEbPT_:
  286|   131k|{
  287|   131k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   131k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|   131k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   263k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 98.4k]
  |  |  |  Branch (259:47): [True: 0, False: 131k]
  |  |  |  Branch (259:47): [True: 33.2k, False: 98.4k]
  |  |  ------------------
  ------------------
  289|  33.2k|    return false;
  290|  98.4k|  assert (hb_object_is_valid (obj));
  291|  98.4k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 98.4k, False: 1]
  ------------------
  292|  98.4k|    return false;
  293|       |
  294|      1|  hb_object_fini (obj);
  295|       |
  296|      1|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|      1|  return true;
  300|  98.4k|}
hb-font.cc:_ZL14hb_object_finiI15hb_font_funcs_tEvPT_:
  303|      1|{
  304|      1|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|      1|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|      1|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 1]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|      1|}
hb-font.cc:_ZL22hb_object_is_immutableI15hb_font_funcs_tEbPKT_:
  266|     14|{
  267|     14|  return !obj->header.writable;
  268|     14|}
hb-font.cc:_ZL24hb_object_make_immutableI15hb_font_funcs_tEvPKT_:
  271|      1|{
  272|      1|  obj->header.writable = false;
  273|      1|}
hb-font.cc:_ZL22hb_object_is_immutableI9hb_font_tEbPKT_:
  266|   165k|{
  267|   165k|  return !obj->header.writable;
  268|   165k|}
hb-font.cc:_ZL18hb_object_is_validI9hb_font_tEbPKT_:
  261|  33.2k|{
  262|  33.2k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|  33.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|  33.2k|}
hb-font.cc:_ZL17hb_object_destroyI9hb_font_tEbPT_:
  286|  66.5k|{
  287|  66.5k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  66.5k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|  66.5k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   133k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 33.2k]
  |  |  |  Branch (259:47): [True: 0, False: 66.5k]
  |  |  |  Branch (259:47): [True: 33.3k, False: 33.2k]
  |  |  ------------------
  ------------------
  289|  33.3k|    return false;
  290|  33.2k|  assert (hb_object_is_valid (obj));
  291|  33.2k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 33.2k]
  ------------------
  292|      0|    return false;
  293|       |
  294|  33.2k|  hb_object_fini (obj);
  295|       |
  296|  33.2k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|  33.2k|  return true;
  300|  33.2k|}
hb-font.cc:_ZL14hb_object_finiI9hb_font_tEvPT_:
  303|  33.2k|{
  304|  33.2k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  33.2k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  33.2k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 33.2k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  33.2k|}
hb-map.cc:_ZL16hb_object_createI8hb_map_tJEEPT_DpT0_:
  239|  33.3k|{
  240|  33.3k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  33.3k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  33.3k|  if (unlikely (!obj))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 460, False: 32.8k]
  |  |  ------------------
  ------------------
  243|    460|    return obj;
  244|       |
  245|  32.8k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  32.8k|  hb_object_init (obj);
  248|  32.8k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  32.8k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  32.8k|  return obj;
  251|  33.3k|}
hb-map.cc:_ZL14hb_object_initI12hb_hashmap_tIjjLb1EEEvPT_:
  254|  32.8k|{
  255|  32.8k|  obj->header.ref_count.init ();
  256|  32.8k|  obj->header.writable = true;
  257|  32.8k|  obj->header.user_data.init ();
  258|  32.8k|}
hb-map.cc:_ZL14hb_object_initI8hb_map_tEvPT_:
  254|  32.8k|{
  255|  32.8k|  obj->header.ref_count.init ();
  256|  32.8k|  obj->header.writable = true;
  257|  32.8k|  obj->header.user_data.init ();
  258|  32.8k|}
hb-map.cc:_ZL15hb_object_traceI8hb_map_tEvPKT_PKc:
  230|  66.2k|{
  231|  66.2k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   132k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 66.2k, False: 0]
  |  |  ------------------
  ------------------
  232|  66.2k|	     "%s refcount=%d",
  233|  66.2k|	     function,
  234|  66.2k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|  66.2k|}
hb-map.cc:_ZL18hb_object_is_validI8hb_map_tEbPKT_:
  261|  32.8k|{
  262|  32.8k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|  32.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|  32.8k|}
hb-map.cc:_ZL17hb_object_destroyI8hb_map_tEbPT_:
  286|  33.3k|{
  287|  33.3k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|  33.3k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 460, False: 32.8k]
  |  |  |  Branch (259:47): [True: 0, False: 33.3k]
  |  |  |  Branch (259:47): [True: 460, False: 32.8k]
  |  |  ------------------
  ------------------
  289|    460|    return false;
  290|  32.8k|  assert (hb_object_is_valid (obj));
  291|  32.8k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 32.8k]
  ------------------
  292|      0|    return false;
  293|       |
  294|  32.8k|  hb_object_fini (obj);
  295|       |
  296|  32.8k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|  32.8k|    obj->~Type ();
  298|       |
  299|  32.8k|  return true;
  300|  32.8k|}
hb-map.cc:_ZL14hb_object_finiI8hb_map_tEvPT_:
  303|  32.8k|{
  304|  32.8k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  32.8k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  32.8k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 32.8k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  32.8k|}
hb-map.cc:_ZL14hb_object_finiI12hb_hashmap_tIjjLb1EEEvPT_:
  303|  32.8k|{
  304|  32.8k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  32.8k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  32.8k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 32.8k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  32.8k|}
hb-set.cc:_ZL16hb_object_createI8hb_set_tJEEPT_DpT0_:
  239|   100k|{
  240|   100k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|   100k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|   100k|  if (unlikely (!obj))
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.49k, False: 98.5k]
  |  |  ------------------
  ------------------
  243|  1.49k|    return obj;
  244|       |
  245|  98.5k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  98.5k|  hb_object_init (obj);
  248|  98.5k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  98.5k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  98.5k|  return obj;
  251|   100k|}
hb-set.cc:_ZL14hb_object_initI8hb_set_tEvPT_:
  254|  98.5k|{
  255|  98.5k|  obj->header.ref_count.init ();
  256|  98.5k|  obj->header.writable = true;
  257|  98.5k|  obj->header.user_data.init ();
  258|  98.5k|}
hb-set.cc:_ZL15hb_object_traceI8hb_set_tEvPKT_PKc:
  230|   198k|{
  231|   198k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|   397k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 198k, False: 0]
  |  |  ------------------
  ------------------
  232|   198k|	     "%s refcount=%d",
  233|   198k|	     function,
  234|   198k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|   198k|}
hb-set.cc:_ZL18hb_object_is_validI8hb_set_tEbPKT_:
  261|  98.5k|{
  262|  98.5k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|  98.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|  98.5k|}
hb-set.cc:_ZL17hb_object_destroyI8hb_set_tEbPT_:
  286|   100k|{
  287|   100k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   100k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|   100k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   200k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.49k, False: 98.5k]
  |  |  |  Branch (259:47): [True: 0, False: 100k]
  |  |  |  Branch (259:47): [True: 1.49k, False: 98.5k]
  |  |  ------------------
  ------------------
  289|  1.49k|    return false;
  290|  98.5k|  assert (hb_object_is_valid (obj));
  291|  98.5k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 98.5k]
  ------------------
  292|      0|    return false;
  293|       |
  294|  98.5k|  hb_object_fini (obj);
  295|       |
  296|  98.5k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|  98.5k|    obj->~Type ();
  298|       |
  299|  98.5k|  return true;
  300|  98.5k|}
hb-set.cc:_ZL14hb_object_finiI8hb_set_tEvPT_:
  303|  98.5k|{
  304|  98.5k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  98.5k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  98.5k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 98.5k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  98.5k|}
hb-shape-plan.cc:_ZL22hb_object_is_immutableI11hb_buffer_tEbPKT_:
  266|   565k|{
  267|   565k|  return !obj->header.writable;
  268|   565k|}
hb-shape-plan.cc:_ZL18hb_object_is_validI15hb_shape_plan_tEbPKT_:
  261|  1.74M|{
  262|  1.74M|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|  1.74M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|  1.74M|}
hb-shape-plan.cc:_ZL16hb_object_createI15hb_shape_plan_tJEEPT_DpT0_:
  239|  49.9k|{
  240|  49.9k|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|  49.9k|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|  49.9k|  if (unlikely (!obj))
  ------------------
  |  |  259|  49.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 483, False: 49.4k]
  |  |  ------------------
  ------------------
  243|    483|    return obj;
  244|       |
  245|  49.4k|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|  49.4k|  hb_object_init (obj);
  248|  49.4k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|  49.4k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|  49.4k|  return obj;
  251|  49.9k|}
hb-shape-plan.cc:_ZL14hb_object_initI15hb_shape_plan_tEvPT_:
  254|  49.4k|{
  255|  49.4k|  obj->header.ref_count.init ();
  256|  49.4k|  obj->header.writable = true;
  257|  49.4k|  obj->header.user_data.init ();
  258|  49.4k|}
hb-shape-plan.cc:_ZL15hb_object_traceI15hb_shape_plan_tEvPKT_PKc:
  230|  1.22M|{
  231|  1.22M|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|  2.45M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 1.22M, False: 0]
  |  |  ------------------
  ------------------
  232|  1.22M|	     "%s refcount=%d",
  233|  1.22M|	     function,
  234|  1.22M|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|  1.22M|}
hb-shape-plan.cc:_ZL19hb_object_referenceI15hb_shape_plan_tEPT_S2_:
  276|   564k|{
  277|   564k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   564k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  278|   564k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  1.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 492, False: 564k]
  |  |  |  Branch (259:47): [True: 0, False: 564k]
  |  |  |  Branch (259:47): [True: 492, False: 564k]
  |  |  ------------------
  ------------------
  279|    492|    return obj;
  280|   564k|  assert (hb_object_is_valid (obj));
  281|      0|  obj->header.ref_count.inc ();
  282|   564k|  return obj;
  283|   564k|}
hb-shape-plan.cc:_ZL17hb_object_destroyI15hb_shape_plan_tEbPT_:
  286|   614k|{
  287|   614k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   614k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|   614k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|  1.22M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.15k, False: 613k]
  |  |  |  Branch (259:47): [True: 0, False: 614k]
  |  |  |  Branch (259:47): [True: 1.15k, False: 613k]
  |  |  ------------------
  ------------------
  289|  1.15k|    return false;
  290|   613k|  assert (hb_object_is_valid (obj));
  291|   613k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 564k, False: 49.2k]
  ------------------
  292|   564k|    return false;
  293|       |
  294|  49.2k|  hb_object_fini (obj);
  295|       |
  296|  49.2k|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|  49.2k|    obj->~Type ();
  298|       |
  299|  49.2k|  return true;
  300|   613k|}
hb-shape-plan.cc:_ZL14hb_object_finiI15hb_shape_plan_tEvPT_:
  303|  49.2k|{
  304|  49.2k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  49.2k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  49.2k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 49.2k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  49.2k|}
hb-shape-plan.cc:_ZL18hb_object_is_validI9hb_face_tEbPKT_:
  261|   565k|{
  262|   565k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   565k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   565k|}
hb-unicode.cc:_ZL16hb_object_createI18hb_unicode_funcs_tJEEPT_DpT0_:
  239|      1|{
  240|      1|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|      1|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|      1|  if (unlikely (!obj))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  243|      0|    return obj;
  244|       |
  245|      1|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|      1|  hb_object_init (obj);
  248|      1|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|      1|  return obj;
  251|      1|}
hb-unicode.cc:_ZL14hb_object_initI18hb_unicode_funcs_tEvPT_:
  254|      1|{
  255|      1|  obj->header.ref_count.init ();
  256|      1|  obj->header.writable = true;
  257|      1|  obj->header.user_data.init ();
  258|      1|}
hb-unicode.cc:_ZL15hb_object_traceI18hb_unicode_funcs_tEvPKT_PKc:
  230|   582k|{
  231|   582k|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|  1.16M|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 427k, False: 154k]
  |  |  ------------------
  ------------------
  232|   582k|	     "%s refcount=%d",
  233|   582k|	     function,
  234|   582k|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|   582k|}
hb-unicode.cc:_ZL19hb_object_referenceI18hb_unicode_funcs_tEPT_S2_:
  276|   213k|{
  277|   213k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   213k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  278|   213k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   427k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 213k]
  |  |  |  Branch (259:47): [True: 0, False: 213k]
  |  |  |  Branch (259:47): [True: 1, False: 213k]
  |  |  ------------------
  ------------------
  279|      1|    return obj;
  280|   213k|  assert (hb_object_is_valid (obj));
  281|      0|  obj->header.ref_count.inc ();
  282|   213k|  return obj;
  283|   213k|}
hb-unicode.cc:_ZL18hb_object_is_validI18hb_unicode_funcs_tEbPKT_:
  261|   427k|{
  262|   427k|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|   427k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|   427k|}
hb-unicode.cc:_ZL17hb_object_destroyI18hb_unicode_funcs_tEbPT_:
  286|   368k|{
  287|   368k|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|   368k|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|   368k|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|   582k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 154k, False: 213k]
  |  |  |  Branch (259:47): [True: 154k, False: 213k]
  |  |  |  Branch (259:47): [True: 1, False: 213k]
  |  |  ------------------
  ------------------
  289|   154k|    return false;
  290|   213k|  assert (hb_object_is_valid (obj));
  291|   213k|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 213k, False: 0]
  ------------------
  292|   213k|    return false;
  293|       |
  294|      0|  hb_object_fini (obj);
  295|       |
  296|      0|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|      0|  return true;
  300|   213k|}
hb-unicode.cc:_ZL22hb_object_is_immutableI18hb_unicode_funcs_tEbPKT_:
  266|      8|{
  267|      8|  return !obj->header.writable;
  268|      8|}
hb-unicode.cc:_ZL24hb_object_make_immutableI18hb_unicode_funcs_tEvPKT_:
  271|      1|{
  272|      1|  obj->header.writable = false;
  273|      1|}
hb-ot-shaper-arabic.cc:_ZL14hb_object_initI12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EEEvPT_:
  254|  3.43k|{
  255|  3.43k|  obj->header.ref_count.init ();
  256|  3.43k|  obj->header.writable = true;
  257|  3.43k|  obj->header.user_data.init ();
  258|  3.43k|}
hb-ot-shaper-arabic.cc:_ZL14hb_object_finiI12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EEEvPT_:
  303|  5.15k|{
  304|  5.15k|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|  5.15k|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|  5.15k|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 5.15k]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|  5.15k|}
hb-paint.cc:_ZL22hb_object_is_immutableI16hb_paint_funcs_tEbPKT_:
  266|     13|{
  267|     13|  return !obj->header.writable;
  268|     13|}
hb-paint.cc:_ZL16hb_object_createI16hb_paint_funcs_tJEEPT_DpT0_:
  239|      1|{
  240|      1|  Type *obj = (Type *) hb_calloc (1, sizeof (Type));
  ------------------
  |  |  234|      1|#define hb_calloc hb_calloc_impl
  ------------------
  241|       |
  242|      1|  if (unlikely (!obj))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  243|      0|    return obj;
  244|       |
  245|      1|  new (obj) Type (std::forward<Ts> (ds)...);
  246|       |
  247|      1|  hb_object_init (obj);
  248|      1|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  249|       |
  250|      1|  return obj;
  251|      1|}
hb-paint.cc:_ZL14hb_object_initI16hb_paint_funcs_tEvPT_:
  254|      1|{
  255|      1|  obj->header.ref_count.init ();
  256|      1|  obj->header.writable = true;
  257|      1|  obj->header.user_data.init ();
  258|      1|}
hb-paint.cc:_ZL15hb_object_traceI16hb_paint_funcs_tEvPKT_PKc:
  230|      2|{
  231|      2|  DEBUG_MSG (OBJECT, (void *) obj,
  ------------------
  |  |  232|      4|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  232|      2|	     "%s refcount=%d",
  233|      2|	     function,
  234|      2|	     obj ? obj->header.ref_count.get_relaxed () : 0);
  235|      2|}
hb-paint.cc:_ZL18hb_object_is_validI16hb_paint_funcs_tEbPKT_:
  261|      1|{
  262|      1|  return likely (obj->header.ref_count.is_valid ());
  ------------------
  |  |  258|      1|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  263|      1|}
hb-paint.cc:_ZL17hb_object_destroyI16hb_paint_funcs_tEbPT_:
  286|      1|{
  287|      1|  hb_object_trace (obj, HB_FUNC);
  ------------------
  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  ------------------
  288|      1|  if (unlikely (!obj || obj->header.is_inert ()))
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  |  Branch (259:47): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  289|      0|    return false;
  290|      1|  assert (hb_object_is_valid (obj));
  291|      1|  if (obj->header.ref_count.dec () != 1)
  ------------------
  |  Branch (291:7): [True: 0, False: 1]
  ------------------
  292|      0|    return false;
  293|       |
  294|      1|  hb_object_fini (obj);
  295|       |
  296|      1|  if (!std::is_trivially_destructible<Type>::value)
  ------------------
  |  Branch (296:7): [Folded - Ignored]
  ------------------
  297|      0|    obj->~Type ();
  298|       |
  299|      1|  return true;
  300|      1|}
hb-paint.cc:_ZL14hb_object_finiI16hb_paint_funcs_tEvPT_:
  303|      1|{
  304|      1|  obj->header.ref_count.fini (); /* Do this before user_data */
  305|      1|  hb_user_data_array_t *user_data = obj->header.user_data.get_acquire ();
  306|      1|  if (user_data)
  ------------------
  |  Branch (306:7): [True: 0, False: 1]
  ------------------
  307|      0|  {
  308|      0|    user_data->fini ();
  309|      0|    hb_free (user_data);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  310|      0|    obj->header.user_data.set_relaxed (nullptr);
  311|      0|  }
  312|      1|}
hb-paint.cc:_ZL24hb_object_make_immutableI16hb_paint_funcs_tEvPKT_:
  271|      1|{
  272|      1|  obj->header.writable = false;
  273|      1|}

_ZNK2OT11ResourceMap14get_type_countEv:
  394|  1.41k|  unsigned int get_type_count () const { return (this+typeList).lenM1 + 1; }
_ZNK2OT11ResourceMap15get_type_recordEj:
  397|  3.20M|  { return (this+typeList)[i]; }
_ZNK2OT18ResourceTypeRecord7is_sfntEv:
  328|  3.20M|  bool is_sfnt () const { return tag == HB_TAG_sfnt; }
  ------------------
  |  |  321|  3.20M|#define HB_TAG_sfnt HB_TAG ('s','f','n','t')
  |  |  ------------------
  |  |  |  |  179|  3.20M|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
_ZNK2OT18ResourceTypeRecord18get_resource_countEv:
  326|  86.5k|  { return tag == HB_TAG_sfnt ? resCountM1 + 1 : 0; }
  ------------------
  |  |  321|  86.5k|#define HB_TAG_sfnt HB_TAG ('s','f','n','t')
  |  |  ------------------
  |  |  |  |  179|  86.5k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (326:12): [True: 1.01k, False: 85.5k]
  ------------------
_ZNK2OT19OpenTypeOffsetTable16get_table_by_tagEj:
  113|  1.28M|  {
  114|  1.28M|    unsigned int table_index;
  115|  1.28M|    find_table_index (tag, &table_index);
  116|  1.28M|    return get_table (table_index);
  117|  1.28M|  }
_ZNK2OT19OpenTypeOffsetTable16find_table_indexEjPj:
  101|  1.28M|  {
  102|  1.28M|    Tag t;
  103|  1.28M|    t = tag;
  104|       |    /* Use lfind for small fonts; there are fonts that have unsorted table entries;
  105|       |     * those tend to work in other tools, so tolerate them.
  106|       |     * https://github.com/harfbuzz/harfbuzz/issues/3065 */
  107|  1.28M|    if (tables.len < 16)
  ------------------
  |  Branch (107:9): [True: 1.25M, False: 26.5k]
  ------------------
  108|  1.25M|      return tables.lfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
  109|  26.5k|    else
  110|  26.5k|      return tables.bfind (t, table_index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
  111|  1.28M|  }
_ZNK2OT11TableRecord3cmpENS_3TagE:
   56|  5.08M|  int cmp (Tag t) const { return -t.cmp (tag); }
_ZNK2OT19OpenTypeOffsetTable9get_tableEj:
   86|  1.28M|  { return tables[i]; }
_ZNK2OT16OpenTypeFontFile8get_faceEjPj:
  478|  1.28M|  {
  479|  1.28M|    if (base_offset)
  ------------------
  |  Branch (479:9): [True: 1.28M, False: 0]
  ------------------
  480|  1.28M|      *base_offset = 0;
  481|  1.28M|    switch (u.tag) {
  482|       |    /* Note: for non-collection SFNT data we ignore index.  This is because
  483|       |     * Apple dfont container is a container of SFNT's.  So each SFNT is a
  484|       |     * non-TTC, but the index is more than zero. */
  485|   110k|    case CFFTag:	/* All the non-collection tags */
  ------------------
  |  Branch (485:5): [True: 110k, False: 1.17M]
  ------------------
  486|   110k|    case TrueTag:
  ------------------
  |  Branch (486:5): [True: 70, False: 1.28M]
  ------------------
  487|   110k|    case Typ1Tag:
  ------------------
  |  Branch (487:5): [True: 71, False: 1.28M]
  ------------------
  488|  1.12M|    case TrueTypeTag:	return u.fontFace;
  ------------------
  |  Branch (488:5): [True: 1.01M, False: 272k]
  ------------------
  489|  2.56k|    case TTCTag:	return u.ttcHeader.get_face (i);
  ------------------
  |  Branch (489:5): [True: 2.56k, False: 1.28M]
  ------------------
  490|  1.41k|    case DFontTag:	return u.rfHeader.get_face (i, base_offset);
  ------------------
  |  Branch (490:5): [True: 1.41k, False: 1.28M]
  ------------------
  491|   157k|    default:		return Null (OpenTypeFontFace);
  ------------------
  |  |  124|   157k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (491:5): [True: 157k, False: 1.12M]
  ------------------
  492|  1.28M|    }
  493|  1.28M|  }
_ZNK2OT9TTCHeader8get_faceEj:
  258|  2.56k|  {
  259|  2.56k|    switch (u.header.version.major) {
  260|      0|    case 2: /* version 2 is compatible with version 1 */
  ------------------
  |  Branch (260:5): [True: 0, False: 2.56k]
  ------------------
  261|  2.37k|    case 1: return u.version1.get_face (i);
  ------------------
  |  Branch (261:5): [True: 2.37k, False: 188]
  ------------------
  262|    188|    default:return Null (OpenTypeFontFace);
  ------------------
  |  |  124|    188|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (262:5): [True: 188, False: 2.37k]
  ------------------
  263|  2.56k|    }
  264|  2.56k|  }
_ZNK2OT17TTCHeaderVersion18get_faceEj:
  224|  2.37k|  const OpenTypeFontFace& get_face (unsigned int i) const { return this+table[i]; }
_ZNK2OT18ResourceForkHeader8get_faceEjPj:
  420|  1.41k|  {
  421|  1.41k|    const OpenTypeFontFace &face = (this+map).get_face (idx, &(this+data));
  422|  1.41k|    if (base_offset)
  ------------------
  |  Branch (422:9): [True: 1.41k, False: 0]
  ------------------
  423|  1.41k|      *base_offset = (const char *) &face - (const char *) this;
  424|  1.41k|    return face;
  425|  1.41k|  }
_ZNK2OT11ResourceMap8get_faceEjPKv:
  371|  1.41k|  {
  372|  1.41k|    unsigned int count = get_type_count ();
  373|  3.20M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (373:30): [True: 3.20M, False: 993]
  ------------------
  374|  3.20M|    {
  375|  3.20M|      const ResourceTypeRecord& type = get_type_record (i);
  376|       |      /* The check for idx < count is here because ResourceRecord is NOT null-safe.
  377|       |       * Because an offset of 0 there does NOT mean null. */
  378|  3.20M|      if (type.is_sfnt () && idx < type.get_resource_count ())
  ------------------
  |  Branch (378:11): [True: 417, False: 3.19M]
  |  Branch (378:30): [True: 417, False: 0]
  ------------------
  379|    417|	return type.get_resource_record (idx, &(this+typeList)).get_face (data_base);
  380|  3.20M|    }
  381|    993|    return Null (OpenTypeFontFace);
  ------------------
  |  |  124|    993|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  382|  1.41k|  }
_ZNK2OT18ResourceTypeRecord19get_resource_recordEjPKv:
  332|    417|  { return (type_base+resourcesZ).as_array (get_resource_count ())[i]; }
_ZNK2OT14ResourceRecord8get_faceEPKv:
  297|  1.56k|  { return * reinterpret_cast<const OpenTypeFontFace *> ((data_base+offset).arrayZ); }
_ZNK2OT16OpenTypeFontFile8sanitizeEP21hb_sanitize_context_t:
  508|  33.4k|  {
  509|  33.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  33.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  510|  33.4k|    if (unlikely (!u.tag.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 429, False: 33.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.tag.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|    429|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    429|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  511|  33.0k|    switch (u.tag) {
  512|  2.85k|    case CFFTag:	/* All the non-collection tags */
  ------------------
  |  Branch (512:5): [True: 2.85k, False: 30.1k]
  ------------------
  513|  2.86k|    case TrueTag:
  ------------------
  |  Branch (513:5): [True: 4, False: 33.0k]
  ------------------
  514|  2.86k|    case Typ1Tag:
  ------------------
  |  Branch (514:5): [True: 4, False: 33.0k]
  ------------------
  515|  29.1k|    case TrueTypeTag:	return_trace (u.fontFace.sanitize (c));
  ------------------
  |  |  349|  29.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (515:5): [True: 26.3k, False: 6.71k]
  ------------------
  516|    261|    case TTCTag:	return_trace (u.ttcHeader.sanitize (c));
  ------------------
  |  |  349|    261|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    261|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (516:5): [True: 261, False: 32.7k]
  ------------------
  517|    120|    case DFontTag:	return_trace (u.rfHeader.sanitize (c));
  ------------------
  |  |  349|    120|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    120|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (517:5): [True: 120, False: 32.8k]
  ------------------
  518|  3.46k|    default:		return_trace (true);
  ------------------
  |  |  349|  3.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (518:5): [True: 3.46k, False: 29.5k]
  ------------------
  519|  33.0k|    }
  520|  33.0k|  }
_ZNK2OT19OpenTypeOffsetTable8sanitizeEP21hb_sanitize_context_t:
  201|  32.0k|  {
  202|  32.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  32.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  203|  32.0k|    return_trace (c->check_struct (this) && tables.sanitize (c));
  ------------------
  |  |  349|  63.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 31.3k, False: 734]
  |  |  |  Branch (349:45): [True: 31.1k, False: 181]
  |  |  ------------------
  ------------------
  204|  32.0k|  }
_ZNK2OT9TTCHeader8sanitizeEP21hb_sanitize_context_t:
  267|    261|  {
  268|    261|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    261|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  269|    261|    if (unlikely (!u.header.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|    261|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 260]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.header.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  270|    260|    switch (u.header.version.major) {
  271|      0|    case 2: /* version 2 is compatible with version 1 */
  ------------------
  |  Branch (271:5): [True: 0, False: 260]
  ------------------
  272|    254|    case 1: return_trace (u.version1.sanitize (c));
  ------------------
  |  |  349|    254|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    254|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (272:5): [True: 254, False: 6]
  ------------------
  273|      6|    default:return_trace (true);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (273:5): [True: 6, False: 254]
  ------------------
  274|    260|    }
  275|    260|  }
_ZNK2OT17TTCHeaderVersion18sanitizeEP21hb_sanitize_context_t:
  227|    254|  {
  228|    254|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    254|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  229|    254|    return_trace (table.sanitize (c, this));
  ------------------
  |  |  349|    254|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    254|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  230|    254|  }
_ZNK2OT18ResourceForkHeader8sanitizeEP21hb_sanitize_context_t:
  428|    120|  {
  429|    120|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    120|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  430|    120|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    450|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    120|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 116, False: 4]
  |  |  |  Branch (349:45): [True: 94, False: 22]
  |  |  |  Branch (349:45): [True: 44, False: 50]
  |  |  ------------------
  ------------------
  431|    120|		  data.sanitize (c, this, dataLen) &&
  432|    120|		  map.sanitize (c, this, &(this+data)));
  433|    120|  }
_ZNK2OT11ResourceMap8sanitizeEP21hb_sanitize_context_tPKv:
  385|     94|  {
  386|     94|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     94|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  387|     94|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    186|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     94|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 92, False: 2]
  |  |  |  Branch (349:45): [True: 44, False: 48]
  |  |  ------------------
  ------------------
  388|     94|		  typeList.sanitize (c, this,
  389|     94|				     &(this+typeList),
  390|     94|				     data_base));
  391|     94|  }
_ZNK2OT18ResourceTypeRecord8sanitizeEP21hb_sanitize_context_tPKvS4_:
  337|  85.7k|  {
  338|  85.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  339|  85.7k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|   171k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 85.7k, False: 1]
  |  |  |  Branch (349:45): [True: 85.6k, False: 39]
  |  |  ------------------
  ------------------
  340|  85.7k|		  resourcesZ.sanitize (c, type_base,
  341|  85.7k|				       get_resource_count (),
  342|  85.7k|				       data_base));
  343|  85.7k|  }
_ZNK2OT14ResourceRecord8sanitizeEP21hb_sanitize_context_tPKv:
  301|  1.17k|  {
  302|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  303|  1.17k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  4.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.17k, False: 1]
  |  |  |  Branch (349:45): [True: 1.14k, False: 23]
  |  |  |  Branch (349:45): [True: 1.14k, False: 6]
  |  |  ------------------
  ------------------
  304|  1.17k|		  offset.sanitize (c, data_base) &&
  305|  1.17k|		  get_face (data_base).sanitize (c));
  306|  1.17k|  }

_ZNK2OT7IntTypeItLj2EEcvjEv:
   68|  2.11G|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZNK2OT12FixedVersionINS_7IntTypeItLj2EEEE6to_intEv:
  279|   687k|  uint32_t to_int () const { return (major << (sizeof (FixedType) * 8)) + minor; }
_ZNK2OT6OffsetINS_7IntTypeItLj2EEELb1EE7is_nullEv:
  235|   339M|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 168M, False: 170M]
  ------------------
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEENS2_ItLj2EEELb0EEclEPKv:
  325|   346k|  {
  326|   346k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   346k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 346k]
  |  |  ------------------
  ------------------
  327|   346k|    return StructAtOffset<const Type> (base, *this);
  328|   346k|  }
_ZNK2OT6OffsetINS_7IntTypeItLj2EEELb0EE7is_nullEv:
  235|  77.2M|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 0, False: 0]
  ------------------
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIsLj2EEEE8as_arrayEj:
  482|  79.5k|  { return hb_array (arrayZ, len); }
_ZNK2OT7IntTypeIsLj2EEcviEv:
   68|  9.37M|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZNK2OT6OffsetINS_7IntTypeIjLj4EEELb0EE7is_nullEv:
  235|   121M|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 0, False: 0]
  ------------------
_ZNK2OT7IntTypeIjLj4EEcvjEv:
   68|   275M|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZNK2OT7HBFixedINS_7IntTypeIiLj4EEELj16EE8to_floatEf:
  154|   195k|  float to_float (float offset = 0) const  { return ((int32_t) Type::v + offset) / shift; }
_ZNK2OT20SortedUnsizedArrayOfIN3AAT11FeatureNameEE8as_arrayEj:
  592|   100k|  { return hb_sorted_array (this->arrayZ, len); }
_ZNK2OT20SortedUnsizedArrayOfIN3AAT11FeatureNameEE7bsearchI28hb_aat_layout_feature_type_tEERKS2_jRKT_S7_:
  601|  66.6k|  { return *as_array (len).bsearch (x, &not_found); }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfIN3AAT11SettingNameEEERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj4EEELb0EEE:
  337|  33.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT11SettingNameEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  33.7k|  {
  326|  33.7k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.7k]
  |  |  ------------------
  ------------------
  327|  33.7k|    return StructAtOffset<const Type> (base, *this);
  328|  33.7k|  }
_ZNK2OT14UnsizedArrayOfIN3AAT11SettingNameEE8as_arrayEj:
  482|  33.3k|  { return hb_array (arrayZ, len); }
_ZNK2OT12FixedVersionINS_7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  282|  63.1k|  {
  283|  63.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  63.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  284|  63.1k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  63.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  63.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  285|  63.1k|  }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  97.7k|  {
  427|  97.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  97.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  97.7k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   457k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  97.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 32.3k, False: 64.9k]
  |  |  |  Branch (349:45): [True: 62.4k, False: 2.53k]
  |  |  |  Branch (349:45): [True: 2.10k, False: 429]
  |  |  |  Branch (349:45): [True: 97.3k, False: 405]
  |  |  ------------------
  ------------------
  429|  97.7k|		  (this->is_null () ||
  430|  97.7k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  97.7k|		   neuter (c)));
  432|  97.7k|  }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  97.7k|  {
  417|  97.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  97.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  97.7k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  97.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 405, False: 97.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    405|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    405|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  97.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  97.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.3k, False: 64.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  32.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  64.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  64.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 64.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  64.9k|    return_trace (true);
  ------------------
  |  |  349|  64.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  64.9k|  }
_ZNK2OT7IntTypeItLj2EE8sanitizeEP21hb_sanitize_context_t:
  106|  65.0M|  {
  107|  65.0M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  65.0M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|  65.0M|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  65.0M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  65.0M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|  65.0M|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEES2_E8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   828k|  {
  718|   828k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   828k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   828k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   828k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.53k, False: 822k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  6.53k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.53k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   822k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   822k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   822k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEES2_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|   828k|  {
  730|   828k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   828k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   828k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.65M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   828k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 825k, False: 3.57k]
  |  |  |  Branch (349:45): [True: 822k, False: 2.96k]
  |  |  ------------------
  ------------------
  732|   828k|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   109k|  {
  718|   109k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   109k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   109k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   109k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.10k, False: 108k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.10k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   108k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   108k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   108k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|   109k|  {
  730|   109k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   109k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   109k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   219k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   109k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 109k, False: 124]
  |  |  |  Branch (349:45): [True: 108k, False: 985]
  |  |  ------------------
  ------------------
  732|   109k|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEENS1_IjLj3EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  8.78k|  {
  718|  8.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  8.78k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  8.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 109, False: 8.67k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    109|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    109|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  8.67k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  8.67k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEENS1_IjLj3EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  8.78k|  {
  730|  8.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  8.78k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  17.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.78k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.77k, False: 3]
  |  |  |  Branch (349:45): [True: 8.67k, False: 106]
  |  |  ------------------
  ------------------
  732|  8.78k|  }
_ZNK2OT7IntTypeIjLj3EE8sanitizeEP21hb_sanitize_context_t:
  106|  52.7k|  {
  107|  52.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  52.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|  52.7k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  52.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  52.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|  52.7k|  }
_ZNK2OT7IntTypeIjLj3EEcvjEv:
   68|  55.3M|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeIjLj3EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  19.3k|  {
  718|  19.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  19.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  19.3k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  19.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 254, False: 19.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    254|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    254|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  19.1k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  19.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeIjLj3EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  19.3k|  {
  730|  19.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  19.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  19.3k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  38.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 19.3k, False: 14]
  |  |  |  Branch (349:45): [True: 19.1k, False: 240]
  |  |  ------------------
  ------------------
  732|  19.3k|  }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.53k|  {
  437|  2.53k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.53k|    return c->try_set (this, 0);
  439|  2.53k|  }
_ZN2OT8OffsetToINS_8ClassDefENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.10k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT7IntTypeItLj2EEaSEt:
   65|  1.66M|  IntType& operator = (Type i) { v = i; return *this; }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.80k|  {
  427|  3.80k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.80k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.80k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  18.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.80k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.12k, False: 2.67k]
  |  |  |  Branch (349:45): [True: 1.68k, False: 992]
  |  |  |  Branch (349:45): [True: 397, False: 595]
  |  |  |  Branch (349:45): [True: 3.80k, False: 2]
  |  |  ------------------
  ------------------
  429|  3.80k|		  (this->is_null () ||
  430|  3.80k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.80k|		   neuter (c)));
  432|  3.80k|  }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.80k|  {
  417|  3.80k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.80k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.80k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.80k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 3.80k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.80k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.80k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.12k, False: 2.67k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.67k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.67k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.67k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.67k|    return_trace (true);
  ------------------
  |  |  349|  2.67k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.67k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  4.28M|  {
  427|  4.28M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.28M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  4.28M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  17.7M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.28M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.68M, False: 605k]
  |  |  |  Branch (349:45): [True: 597k, False: 8.05k]
  |  |  |  Branch (349:45): [True: 7.09k, False: 955]
  |  |  |  Branch (349:45): [True: 4.28M, False: 2.65k]
  |  |  ------------------
  ------------------
  429|  4.28M|		  (this->is_null () ||
  430|  4.28M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  4.28M|		   neuter (c)));
  432|  4.28M|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  4.28M|  {
  417|  4.28M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.28M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  4.28M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  4.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.65k, False: 4.28M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|  2.65k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  4.28M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  4.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.68M, False: 605k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.68M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.68M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   605k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   605k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 605k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   605k|    return_trace (true);
  ------------------
  |  |  349|   605k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   605k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   605k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   209k|  {
  718|   209k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   209k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   209k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   209k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14.5k, False: 194k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  14.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   194k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   194k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   194k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|   209k|  {
  730|   209k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   209k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   209k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   407k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   209k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 198k, False: 11.0k]
  |  |  |  Branch (349:45): [True: 194k, False: 3.57k]
  |  |  ------------------
  ------------------
  732|   209k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  43.6k|  {
  718|  43.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  43.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  43.6k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  43.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.38k, False: 41.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.38k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.38k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  41.2k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  41.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  41.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  43.6k|  {
  730|  43.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  43.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  43.6k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  85.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  43.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 41.8k, False: 1.79k]
  |  |  |  Branch (349:45): [True: 41.2k, False: 587]
  |  |  ------------------
  ------------------
  732|  43.6k|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  20.3k|  {
  718|  20.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  20.3k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  20.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 335, False: 20.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    335|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    335|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  20.0k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  20.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  20.3k|  {
  730|  20.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  20.3k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  40.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 20.2k, False: 90]
  |  |  |  Branch (349:45): [True: 20.0k, False: 245]
  |  |  ------------------
  ------------------
  732|  20.3k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  8.05k|  {
  437|  8.05k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  8.05k|    return c->try_set (this, 0);
  439|  8.05k|  }
_ZN2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEaSEt:
  322|   632k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EEES4_E8sanitizeIJPKNS_10AttachListEEEEbP21hb_sanitize_context_tDpOT_:
  717|  2.13k|  {
  718|  2.13k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.13k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  2.13k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  2.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 256, False: 1.87k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    256|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    256|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.87k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.87k|    unsigned int count = len;
  722|  31.9k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 30.2k, False: 1.73k]
  ------------------
  723|  30.2k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  30.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 139, False: 30.0k]
  |  |  ------------------
  ------------------
  724|    139|	return_trace (false);
  ------------------
  |  |  349|  2.01k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    139|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.73k|    return_trace (true);
  ------------------
  |  |  349|  1.73k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.73k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.87k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  2.13k|  {
  730|  2.13k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.13k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  2.13k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  4.26k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.12k, False: 7]
  |  |  |  Branch (349:45): [True: 1.87k, False: 249]
  |  |  ------------------
  ------------------
  732|  2.13k|  }
_ZNK2OT8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  30.2k|  {
  427|  30.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  30.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  30.2k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   145k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  30.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.90k, False: 23.2k]
  |  |  |  Branch (349:45): [True: 21.4k, False: 1.81k]
  |  |  |  Branch (349:45): [True: 1.68k, False: 132]
  |  |  |  Branch (349:45): [True: 30.2k, False: 7]
  |  |  ------------------
  ------------------
  429|  30.2k|		  (this->is_null () ||
  430|  30.2k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  30.2k|		   neuter (c)));
  432|  30.2k|  }
_ZNK2OT8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  30.2k|  {
  417|  30.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  30.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  30.2k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  30.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 30.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  30.2k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  30.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.90k, False: 23.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  6.90k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.90k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  23.2k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  23.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 23.2k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  23.2k|    return_trace (true);
  ------------------
  |  |  349|  23.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  23.2k|  }
_ZNK2OT8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.81k|  {
  437|  1.81k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.81k|    return c->try_set (this, 0);
  439|  1.81k|  }
_ZN2OT8OffsetToINS_11AttachPointENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.68k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    992|  {
  437|    992|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    992|    return c->try_set (this, 0);
  439|    992|  }
_ZN2OT8OffsetToINS_10AttachListENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    397|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.20k|  {
  427|  3.20k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.20k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.20k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  15.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.58k, False: 1.61k]
  |  |  |  Branch (349:45): [True: 579, False: 1.03k]
  |  |  |  Branch (349:45): [True: 646, False: 393]
  |  |  |  Branch (349:45): [True: 3.19k, False: 7]
  |  |  ------------------
  ------------------
  429|  3.20k|		  (this->is_null () ||
  430|  3.20k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.20k|		   neuter (c)));
  432|  3.20k|  }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.20k|  {
  417|  3.20k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.20k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.20k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.20k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 3.19k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.19k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.58k, False: 1.61k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.58k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.58k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.61k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.61k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.61k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.61k|    return_trace (true);
  ------------------
  |  |  349|  1.61k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.61k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.61k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EEES4_E8sanitizeIJPKNS_12LigCaretListEEEEbP21hb_sanitize_context_tDpOT_:
  717|    913|  {
  718|    913|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    913|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    913|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    913|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 178, False: 735]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    178|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    178|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    735|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    735|    unsigned int count = len;
  722|  24.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 23.4k, False: 608]
  ------------------
  723|  23.4k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  23.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 127, False: 23.2k]
  |  |  ------------------
  ------------------
  724|    127|	return_trace (false);
  ------------------
  |  |  349|    862|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    127|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    608|    return_trace (true);
  ------------------
  |  |  349|    608|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    608|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    735|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|    913|  {
  730|    913|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    913|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    913|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    913|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 909, False: 4]
  |  |  |  Branch (349:45): [True: 735, False: 174]
  |  |  ------------------
  ------------------
  732|    913|  }
_ZNK2OT8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  23.4k|  {
  427|  23.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  23.4k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   107k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.1k, False: 12.2k]
  |  |  |  Branch (349:45): [True: 10.8k, False: 1.43k]
  |  |  |  Branch (349:45): [True: 1.32k, False: 101]
  |  |  |  Branch (349:45): [True: 23.3k, False: 26]
  |  |  ------------------
  ------------------
  429|  23.4k|		  (this->is_null () ||
  430|  23.4k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  23.4k|		   neuter (c)));
  432|  23.4k|  }
_ZNK2OT8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  23.4k|  {
  417|  23.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  23.4k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  23.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 23.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     26|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     26|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  23.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  23.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.1k, False: 12.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  11.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  12.2k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  12.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 12.2k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  12.2k|    return_trace (true);
  ------------------
  |  |  349|  12.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  12.2k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EEES4_E8sanitizeIJPKNS_8LigGlyphEEEEbP21hb_sanitize_context_tDpOT_:
  717|  12.2k|  {
  718|  12.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  12.2k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  12.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.35k, False: 10.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.35k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.35k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  10.9k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  10.9k|    unsigned int count = len;
  722|  29.2M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 29.2M, False: 10.8k]
  ------------------
  723|  29.2M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  29.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 74, False: 29.2M]
  |  |  ------------------
  ------------------
  724|     74|	return_trace (false);
  ------------------
  |  |  349|  10.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     74|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  10.8k|    return_trace (true);
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  10.9k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  12.2k|  {
  730|  12.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  12.2k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  23.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.3k, False: 959]
  |  |  |  Branch (349:45): [True: 10.9k, False: 397]
  |  |  ------------------
  ------------------
  732|  12.2k|  }
_ZNK2OT8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  29.2M|  {
  427|  29.2M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  29.2M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  29.2M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   134M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.2M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.5M, False: 17.6M]
  |  |  |  Branch (349:45): [True: 17.6M, False: 2.23k]
  |  |  |  Branch (349:45): [True: 2.17k, False: 59]
  |  |  |  Branch (349:45): [True: 29.2M, False: 15]
  |  |  ------------------
  ------------------
  429|  29.2M|		  (this->is_null () ||
  430|  29.2M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  29.2M|		   neuter (c)));
  432|  29.2M|  }
_ZNK2OT8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  29.2M|  {
  417|  29.2M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  29.2M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  29.2M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  29.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 29.2M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  29.2M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  29.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.5M, False: 17.6M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  11.5M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.5M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  17.6M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  17.6M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 17.6M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  17.6M|    return_trace (true);
  ------------------
  |  |  349|  17.6M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.6M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  17.6M|  }
_ZNK2OT8OffsetToINS_6DeviceENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  18.0M|  {
  427|  18.0M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  18.0M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  18.0M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  81.0M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.0M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.25M, False: 8.80M]
  |  |  |  Branch (349:45): [True: 8.79M, False: 9.07k]
  |  |  |  Branch (349:45): [True: 8.63k, False: 442]
  |  |  |  Branch (349:45): [True: 18.0M, False: 60]
  |  |  ------------------
  ------------------
  429|  18.0M|		  (this->is_null () ||
  430|  18.0M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  18.0M|		   neuter (c)));
  432|  18.0M|  }
_ZNK2OT8OffsetToINS_6DeviceENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  18.0M|  {
  417|  18.0M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  18.0M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  18.0M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  18.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 60, False: 18.0M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     60|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     60|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  18.0M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  18.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9.25M, False: 8.80M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  9.25M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.25M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  8.80M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  8.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.80M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  8.80M|    return_trace (true);
  ------------------
  |  |  349|  8.80M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.80M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  8.80M|  }
_ZNK2OT8OffsetToINS_6DeviceENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  9.07k|  {
  437|  9.07k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  9.07k|    return c->try_set (this, 0);
  439|  9.07k|  }
_ZN2OT8OffsetToINS_6DeviceENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  8.63k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.23k|  {
  437|  2.23k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.23k|    return c->try_set (this, 0);
  439|  2.23k|  }
_ZN2OT8OffsetToINS_10CaretValueENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.17k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.43k|  {
  437|  1.43k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.43k|    return c->try_set (this, 0);
  439|  1.43k|  }
_ZN2OT8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.32k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.03k|  {
  437|  1.03k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.03k|    return c->try_set (this, 0);
  439|  1.03k|  }
_ZN2OT8OffsetToINS_12LigCaretListENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    646|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.08k|  {
  427|  1.08k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.08k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.08k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.42k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 386, False: 698]
  |  |  |  Branch (349:45): [True: 307, False: 391]
  |  |  |  Branch (349:45): [True: 279, False: 112]
  |  |  |  Branch (349:45): [True: 1.08k, False: 4]
  |  |  ------------------
  ------------------
  429|  1.08k|		  (this->is_null () ||
  430|  1.08k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.08k|		   neuter (c)));
  432|  1.08k|  }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.08k|  {
  417|  1.08k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.08k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.08k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.08k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 1.08k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.08k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.08k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 386, False: 698]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    386|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    386|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    698|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    698|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 698]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    698|    return_trace (true);
  ------------------
  |  |  349|    698|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    698|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    698|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EEENS5_ItLj2EEEE8sanitizeIJPKNS_20MarkGlyphSetsFormat1EEEEbP21hb_sanitize_context_tDpOT_:
  717|    190|  {
  718|    190|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    190|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    190|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    190|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 177]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    177|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    177|    unsigned int count = len;
  722|  1.38k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 1.23k, False: 155]
  ------------------
  723|  1.23k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.23k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 1.21k]
  |  |  ------------------
  ------------------
  724|     22|	return_trace (false);
  ------------------
  |  |  349|    199|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    155|    return_trace (true);
  ------------------
  |  |  349|    155|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    155|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    177|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EEENS5_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    190|  {
  730|    190|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    190|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    190|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    377|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    190|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 187, False: 3]
  |  |  |  Branch (349:45): [True: 177, False: 10]
  |  |  ------------------
  ------------------
  732|    190|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.23k|  {
  427|  1.23k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.23k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.23k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  6.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.23k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 487, False: 743]
  |  |  |  Branch (349:45): [True: 343, False: 400]
  |  |  |  Branch (349:45): [True: 380, False: 20]
  |  |  |  Branch (349:45): [True: 1.23k, False: 2]
  |  |  ------------------
  ------------------
  429|  1.23k|		  (this->is_null () ||
  430|  1.23k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.23k|		   neuter (c)));
  432|  1.23k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.23k|  {
  417|  1.23k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.23k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.23k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.23k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.23k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.23k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.23k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 487, False: 743]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    487|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    487|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    743|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    743|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 743]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    743|    return_trace (true);
  ------------------
  |  |  349|    743|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    743|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    743|  }
_ZNK2OT6OffsetINS_7IntTypeIjLj4EEELb1EE7is_nullEv:
  235|  4.82M|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 2.99M, False: 1.82M]
  ------------------
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    400|  {
  437|    400|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    400|    return c->try_set (this, 0);
  439|    400|  }
_ZN2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|    380|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT7IntTypeIjLj4EEaSEj:
   65|  1.33M|  IntType& operator = (Type i) { v = i; return *this; }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    391|  {
  437|    391|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    391|    return c->try_set (this, 0);
  439|    391|  }
_ZN2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    279|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.63k|  {
  427|  7.63k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.63k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.63k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  37.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.69k, False: 3.91k]
  |  |  |  Branch (349:45): [True: 982, False: 2.93k]
  |  |  |  Branch (349:45): [True: 2.56k, False: 367]
  |  |  |  Branch (349:45): [True: 7.60k, False: 29]
  |  |  ------------------
  ------------------
  429|  7.63k|		  (this->is_null () ||
  430|  7.63k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.63k|		   neuter (c)));
  432|  7.63k|  }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.63k|  {
  417|  7.63k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.63k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.63k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29, False: 7.60k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     29|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     29|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.60k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.60k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.69k, False: 3.91k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.69k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.69k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.91k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.91k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.91k|    return_trace (true);
  ------------------
  |  |  349|  3.91k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.91k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.91k|  }
_ZNK2OT8OffsetToINS_13VarRegionListENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.55k|  {
  427|  1.55k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.55k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.55k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  7.89k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.55k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 287, False: 1.26k]
  |  |  |  Branch (349:45): [True: 834, False: 430]
  |  |  |  Branch (349:45): [True: 298, False: 132]
  |  |  |  Branch (349:45): [True: 1.55k, False: 1]
  |  |  ------------------
  ------------------
  429|  1.55k|		  (this->is_null () ||
  430|  1.55k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.55k|		   neuter (c)));
  432|  1.55k|  }
_ZNK2OT8OffsetToINS_13VarRegionListENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.55k|  {
  417|  1.55k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.55k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.55k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.55k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.55k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.55k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.55k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 287, False: 1.26k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    287|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    287|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.26k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.26k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.26k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.26k|    return_trace (true);
  ------------------
  |  |  349|  1.26k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.26k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.26k|  }
_ZNK2OT14UnsizedArrayOfINS_13VarRegionAxisEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    993|  {
  530|    993|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    993|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    993|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    993|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 159, False: 834]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|    159|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    159|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    834|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    834|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    834|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_13VarRegionAxisEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    993|  {
  541|    993|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    993|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    993|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    993|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    993|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    993|  }
_ZNK2OT8OffsetToINS_13VarRegionListENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    430|  {
  437|    430|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    430|    return c->try_set (this, 0);
  439|    430|  }
_ZN2OT8OffsetToINS_13VarRegionListENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|    298|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EEENS3_ItLj2EEEE8sanitizeIJPKNS_14VariationStoreEEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.41k|  {
  718|  1.41k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.41k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.41k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.41k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 74, False: 1.34k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     74|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     74|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.34k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.34k|    unsigned int count = len;
  722|  8.51k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 7.28k, False: 1.22k]
  ------------------
  723|  7.28k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  7.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 116, False: 7.17k]
  |  |  ------------------
  ------------------
  724|    116|	return_trace (false);
  ------------------
  |  |  349|  1.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    116|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.22k|    return_trace (true);
  ------------------
  |  |  349|  1.22k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.22k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.34k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EEENS3_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.41k|  {
  730|  1.41k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.41k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.41k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.41k, False: 2]
  |  |  |  Branch (349:45): [True: 1.34k, False: 72]
  |  |  ------------------
  ------------------
  732|  1.41k|  }
_ZNK2OT8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.28k|  {
  427|  7.28k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.28k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.28k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  36.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.63k, False: 4.64k]
  |  |  |  Branch (349:45): [True: 1.49k, False: 3.15k]
  |  |  |  Branch (349:45): [True: 3.04k, False: 111]
  |  |  |  Branch (349:45): [True: 7.28k, False: 5]
  |  |  ------------------
  ------------------
  429|  7.28k|		  (this->is_null () ||
  430|  7.28k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.28k|		   neuter (c)));
  432|  7.28k|  }
_ZNK2OT8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.28k|  {
  417|  7.28k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.28k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.28k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 7.28k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.28k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.28k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.63k, False: 4.64k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  2.63k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.64k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.64k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.64k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.64k|    return_trace (true);
  ------------------
  |  |  349|  4.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.64k|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEES2_E8get_sizeEv:
  635|  14.9M|  { return len.static_size + len * Type::static_size; }
_ZNK2OT8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  3.15k|  {
  437|  3.15k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  3.15k|    return c->try_set (this, 0);
  439|  3.15k|  }
_ZN2OT8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  3.04k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.93k|  {
  437|  2.93k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.93k|    return c->try_set (this, 0);
  439|  2.93k|  }
_ZN2OT8OffsetToINS_14VariationStoreENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  2.56k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  83.5k|  {
  427|  83.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  83.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  83.5k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   385k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  83.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 32.5k, False: 50.6k]
  |  |  |  Branch (349:45): [True: 48.9k, False: 1.74k]
  |  |  |  Branch (349:45): [True: 1.60k, False: 136]
  |  |  |  Branch (349:45): [True: 83.2k, False: 340]
  |  |  ------------------
  ------------------
  429|  83.5k|		  (this->is_null () ||
  430|  83.5k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  83.5k|		   neuter (c)));
  432|  83.5k|  }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  83.5k|  {
  417|  83.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  83.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  83.5k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  83.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 340, False: 83.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    340|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    340|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  83.2k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  83.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 50.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  32.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  50.6k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  50.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 50.6k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  50.6k|    return_trace (true);
  ------------------
  |  |  349|  50.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  50.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  50.6k|  }
_ZNK2OT6OffsetINS_7IntTypeIjLj3EEELb1EE7is_nullEv:
  235|  27.6M|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 12.8M, False: 14.8M]
  ------------------
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.74k|  {
  437|  1.74k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.74k|    return c->try_set (this, 0);
  439|  1.74k|  }
_ZN2OT8OffsetToINS_8ClassDefENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.60k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT7IntTypeIjLj3EEaSEj:
   65|  25.1k|  IntType& operator = (Type i) { v = i; return *this; }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    736|  {
  427|    736|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    736|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    736|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  3.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    736|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 298, False: 436]
  |  |  |  Branch (349:45): [True: 58, False: 378]
  |  |  |  Branch (349:45): [True: 202, False: 176]
  |  |  |  Branch (349:45): [True: 734, False: 2]
  |  |  ------------------
  ------------------
  429|    736|		  (this->is_null () ||
  430|    736|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    736|		   neuter (c)));
  432|    736|  }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    736|  {
  417|    736|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    736|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    736|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    736|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 734]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    734|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    734|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 298, False: 436]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    298|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    298|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    436|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    436|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 436]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    436|    return_trace (true);
  ------------------
  |  |  349|    436|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    436|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    436|  }
_ZNK2OT8OffsetToINS_10AttachListENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    378|  {
  437|    378|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    378|    return c->try_set (this, 0);
  439|    378|  }
_ZN2OT8OffsetToINS_10AttachListENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    202|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    558|  {
  427|    558|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    558|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    558|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    558|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 265, False: 287]
  |  |  |  Branch (349:45): [True: 29, False: 258]
  |  |  |  Branch (349:45): [True: 223, False: 35]
  |  |  |  Branch (349:45): [True: 552, False: 6]
  |  |  ------------------
  ------------------
  429|    558|		  (this->is_null () ||
  430|    558|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    558|		   neuter (c)));
  432|    558|  }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    558|  {
  417|    558|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    558|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    558|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    558|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 552]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    552|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    552|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 265, False: 287]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    265|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    265|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    287|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    287|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 287]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    287|    return_trace (true);
  ------------------
  |  |  349|    287|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    287|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    287|  }
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    258|  {
  437|    258|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    258|    return c->try_set (this, 0);
  439|    258|  }
_ZN2OT8OffsetToINS_12LigCaretListENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    223|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    500|  {
  427|    500|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    500|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    500|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    500|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 185, False: 313]
  |  |  |  Branch (349:45): [True: 132, False: 181]
  |  |  |  Branch (349:45): [True: 173, False: 8]
  |  |  |  Branch (349:45): [True: 498, False: 2]
  |  |  ------------------
  ------------------
  429|    500|		  (this->is_null () ||
  430|    500|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    500|		   neuter (c)));
  432|    500|  }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    500|  {
  417|    500|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    500|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    500|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    500|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 498]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    498|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    498|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 185, False: 313]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    185|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    185|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    313|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    313|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 313]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    313|    return_trace (true);
  ------------------
  |  |  349|    313|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    313|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    313|  }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    181|  {
  437|    181|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    181|    return c->try_set (this, 0);
  439|    181|  }
_ZN2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    173|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7IntTypeIjLj4EE8sanitizeEP21hb_sanitize_context_t:
  106|  3.46M|  {
  107|  3.46M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.46M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|  3.46M|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  3.46M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.46M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|  3.46M|  }
_ZNK2OT14UnsizedArrayOfIN3AAT7FeatureEE8as_arrayEj:
  482|  19.5k|  { return hb_array (arrayZ, len); }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeItLj2EEEEENS3_IjLj4EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.62k|  {
  427|  2.62k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.62k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.62k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  13.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.62k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 2.62k]
  |  |  |  Branch (349:45): [True: 2.55k, False: 75]
  |  |  |  Branch (349:45): [True: 0, False: 75]
  |  |  |  Branch (349:45): [True: 2.62k, False: 0]
  |  |  ------------------
  ------------------
  429|  2.62k|		  (this->is_null () ||
  430|  2.62k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.62k|		   neuter (c)));
  432|  2.62k|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeItLj2EEEEENS3_IjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.62k|  {
  417|  2.62k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.62k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.62k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.62k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.62k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.62k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.62k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.62k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.62k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.62k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.62k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.62k|    return_trace (true);
  ------------------
  |  |  349|  2.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.62k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.62k|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  2.59k|  {
  530|  2.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  2.59k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  2.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21, False: 2.57k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     21|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     21|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  2.57k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  2.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.57k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  2.59k|  {
  541|  2.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  2.59k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  2.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  2.59k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeItLj2EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|    171|  {
 1093|    171|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    171|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    171|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    171|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 166]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    166|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    166|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    166|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeItLj2EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    171|  {
 1120|    171|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    171|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    171|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    678|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    171|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 169, False: 2]
  |  |  |  Branch (349:45): [True: 167, False: 2]
  |  |  |  Branch (349:45): [True: 166, False: 1]
  |  |  ------------------
  ------------------
 1122|    171|		  Type::static_size <= header.unitSize &&
 1123|    171|		  c->check_range (bytesZ.arrayZ,
 1124|    171|				  header.nUnits,
 1125|    171|				  header.unitSize));
 1126|    171|  }
_ZNK2OT23VarSizedBinSearchHeader8sanitizeEP21hb_sanitize_context_t:
 1030|  2.73k|  {
 1031|  2.73k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.73k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1032|  2.73k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  2.73k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.73k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1033|  2.73k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEE8sanitizeIJPKNS1_13LookupFormat4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
 1092|    133|  {
 1093|    133|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    133|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    133|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    133|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 126]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    126|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|    126|    unsigned int count = get_length ();
 1097|    565|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 459, False: 106]
  ------------------
 1098|    459|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    459|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 439]
  |  |  ------------------
  ------------------
 1099|     20|	return_trace (false);
  ------------------
  |  |  349|    146|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     20|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|    106|    return_trace (true);
  ------------------
  |  |  349|    106|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    106|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|    126|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    133|  {
 1120|    133|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    133|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    133|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    529|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    133|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 132, False: 1]
  |  |  |  Branch (349:45): [True: 131, False: 1]
  |  |  |  Branch (349:45): [True: 126, False: 5]
  |  |  ------------------
  ------------------
 1122|    133|		  Type::static_size <= header.unitSize &&
 1123|    133|		  c->check_range (bytesZ.arrayZ,
 1124|    133|				  header.nUnits,
 1125|    133|				  header.unitSize));
 1126|    133|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEE10get_lengthEv:
 1086|  1.79M|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEE18last_is_terminatorEv:
 1056|  1.79M|  {
 1057|  1.79M|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  1.79M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.24M, False: 554k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   554k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   554k|    unsigned int count = Type::TerminationWordCount;
 1065|   693k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 626k, False: 67.7k]
  ------------------
 1066|   626k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 486k, False: 139k]
  ------------------
 1067|   486k|	return false;
 1068|  67.7k|    return true;
 1069|   554k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEEixEi:
 1072|    459|  {
 1073|    459|    unsigned int i = (unsigned int) i_;
 1074|    459|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    459|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 459]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    459|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    459|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    459|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    459|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEES3_Lb0EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    451|  {
  427|    451|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    451|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    451|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.26k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    451|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 451]
  |  |  |  Branch (349:45): [True: 439, False: 12]
  |  |  |  Branch (349:45): [True: 0, False: 12]
  |  |  |  Branch (349:45): [True: 451, False: 0]
  |  |  ------------------
  ------------------
  429|    451|		  (this->is_null () ||
  430|    451|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    451|		   neuter (c)));
  432|    451|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEES3_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    451|  {
  417|    451|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    451|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    451|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    451|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 451]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    451|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    451|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 451]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    451|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    451|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 451]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    451|    return_trace (true);
  ------------------
  |  |  349|    451|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    451|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    451|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEES3_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     12|  {
  437|     12|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     12|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeItLj2EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|    259|  {
 1093|    259|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    259|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    259|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    259|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 252]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    252|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    252|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    252|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeItLj2EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    259|  {
 1120|    259|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    259|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    259|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|  1.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    259|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 258, False: 1]
  |  |  |  Branch (349:45): [True: 256, False: 2]
  |  |  |  Branch (349:45): [True: 252, False: 4]
  |  |  ------------------
  ------------------
 1122|    259|		  Type::static_size <= header.unitSize &&
 1123|    259|		  c->check_range (bytesZ.arrayZ,
 1124|    259|				  header.nUnits,
 1125|    259|				  header.unitSize));
 1126|    259|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|   605k|  {
  530|   605k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   605k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|   605k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|   605k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 227, False: 605k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|    227|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    227|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|   605k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   605k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   605k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|   605k|  {
  541|   605k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   605k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|   605k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|   605k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   605k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|   605k|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeItLj2EEEEENS3_IjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     75|  {
  437|     75|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     75|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesEvEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  8.12M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEENS2_IjLj4EEELb0EEclEPKv:
  325|  43.8M|  {
  326|  43.8M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  43.8M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 43.8M]
  |  |  ------------------
  ------------------
  327|  43.8M|    return StructAtOffset<const Type> (base, *this);
  328|  43.8M|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesEvEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIvEEEERKT_RKNS_8OffsetToISB_NS_7IntTypeIjLj4EEELb0EEE:
  337|  8.12M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryIvEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  8.12M|  {
  326|  8.12M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  8.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.12M]
  |  |  ------------------
  ------------------
  327|  8.12M|    return StructAtOffset<const Type> (base, *this);
  328|  8.12M|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  10.9M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeIjLj4EEELb0EEE:
  337|  10.9M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_18ContextualSubtableINS2_13ExtendedTypesEE9EntryDataEEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  10.9M|  {
  326|  10.9M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  10.9M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.9M]
  |  |  ------------------
  ------------------
  327|  10.9M|    return StructAtOffset<const Type> (base, *this);
  328|  10.9M|  }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEES7_Lb0EE8sanitizeIJRjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    353|  {
  427|    353|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    353|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    353|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 353]
  |  |  |  Branch (349:45): [True: 278, False: 75]
  |  |  |  Branch (349:45): [True: 0, False: 75]
  |  |  |  Branch (349:45): [True: 353, False: 0]
  |  |  ------------------
  ------------------
  429|    353|		  (this->is_null () ||
  430|    353|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    353|		   neuter (c)));
  432|    353|  }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEES7_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    353|  {
  417|    353|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    353|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    353|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    353|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 353]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    353|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    353|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 353]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    353|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    353|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 353]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    353|    return_trace (true);
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    353|  }
_ZNK2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  578|    353|  {
  579|    353|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    353|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  580|    353|    return_trace ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  581|    353|		   ::sanitize (c, count, this, std::forward<Ts> (ds)...)));
  582|    353|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEEE8sanitizeIJPKNS_23UnsizedListOfOffset16ToIS5_S7_Lb0EEEEEEbP21hb_sanitize_context_tjDpOT_:
  529|    353|  {
  530|    353|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    353|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    353|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    353|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 344]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    344|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|  12.2k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 11.9k, False: 278]
  ------------------
  534|  11.9k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  11.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 66, False: 11.9k]
  |  |  ------------------
  ------------------
  535|     66|	return_trace (false);
  ------------------
  |  |  349|    410|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     66|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|    278|    return_trace (true);
  ------------------
  |  |  349|    278|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    278|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|    344|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    353|  {
  541|    353|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    353|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    353|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    353|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    353|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  11.9k|  {
  427|  11.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  11.9k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  59.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 11.9k]
  |  |  |  Branch (349:45): [True: 11.9k, False: 66]
  |  |  |  Branch (349:45): [True: 0, False: 66]
  |  |  |  Branch (349:45): [True: 11.9k, False: 0]
  |  |  ------------------
  ------------------
  429|  11.9k|		  (this->is_null () ||
  430|  11.9k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  11.9k|		   neuter (c)));
  432|  11.9k|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  11.9k|  {
  417|  11.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  11.9k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  11.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  11.9k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  11.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  11.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  11.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  11.9k|    return_trace (true);
  ------------------
  |  |  349|  11.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  11.9k|  }
_ZNK2OT14UnsizedArrayOfINS_11HBGlyphID16EE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  5.18k|  {
  530|  5.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  5.18k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  5.18k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18, False: 5.16k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     18|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     18|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  5.16k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  5.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_11HBGlyphID16EE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  5.18k|  {
  541|  5.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  5.18k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  5.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  5.18k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_11HBGlyphID16EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|    441|  {
 1093|    441|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    441|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    441|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    441|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 431]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    431|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    431|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    431|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_11HBGlyphID16EEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    441|  {
 1120|    441|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    441|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    441|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|  1.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    441|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 440, False: 1]
  |  |  |  Branch (349:45): [True: 436, False: 4]
  |  |  |  Branch (349:45): [True: 431, False: 5]
  |  |  ------------------
  ------------------
 1122|    441|		  Type::static_size <= header.unitSize &&
 1123|    441|		  c->check_range (bytesZ.arrayZ,
 1124|    441|				  header.nUnits,
 1125|    441|				  header.unitSize));
 1126|    441|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEE8sanitizeIJPKNS1_13LookupFormat4IS3_EEEEEbP21hb_sanitize_context_tDpOT_:
 1092|    230|  {
 1093|    230|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    230|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    230|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    230|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 217]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    217|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|    217|    unsigned int count = get_length ();
 1097|    506|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 314, False: 192]
  ------------------
 1098|    314|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    314|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25, False: 289]
  |  |  ------------------
  ------------------
 1099|     25|	return_trace (false);
  ------------------
  |  |  349|    242|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     25|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|    192|    return_trace (true);
  ------------------
  |  |  349|    192|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    192|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|    217|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    230|  {
 1120|    230|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    230|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    230|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    915|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    230|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 229, False: 1]
  |  |  |  Branch (349:45): [True: 226, False: 3]
  |  |  |  Branch (349:45): [True: 217, False: 9]
  |  |  ------------------
  ------------------
 1122|    230|		  Type::static_size <= header.unitSize &&
 1123|    230|		  c->check_range (bytesZ.arrayZ,
 1124|    230|				  header.nUnits,
 1125|    230|				  header.unitSize));
 1126|    230|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEE10get_lengthEv:
 1086|   506k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEE18last_is_terminatorEv:
 1056|   506k|  {
 1057|   506k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|   506k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.39k, False: 504k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   504k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   504k|    unsigned int count = Type::TerminationWordCount;
 1065|   652k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 594k, False: 57.4k]
  ------------------
 1066|   594k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 446k, False: 147k]
  ------------------
 1067|   446k|	return false;
 1068|  57.4k|    return true;
 1069|   504k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEEixEi:
 1072|    314|  {
 1073|    314|    unsigned int i = (unsigned int) i_;
 1074|    314|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    314|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 314]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    314|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    314|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    314|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    314|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    305|  {
  427|    305|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    305|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    305|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    305|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 305]
  |  |  |  Branch (349:45): [True: 289, False: 16]
  |  |  |  Branch (349:45): [True: 0, False: 16]
  |  |  |  Branch (349:45): [True: 305, False: 0]
  |  |  ------------------
  ------------------
  429|    305|		  (this->is_null () ||
  430|    305|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    305|		   neuter (c)));
  432|    305|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    305|  {
  417|    305|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    305|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    305|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    305|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 305]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    305|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    305|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 305]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    305|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    305|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 305]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    305|    return_trace (true);
  ------------------
  |  |  349|    305|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    305|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    305|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     16|  {
  437|     16|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     16|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_11HBGlyphID16EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|    888|  {
 1093|    888|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    888|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    888|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    888|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 868]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     20|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     20|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    868|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    868|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    868|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_11HBGlyphID16EEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    888|  {
 1120|    888|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    888|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    888|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|  3.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    888|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 887, False: 1]
  |  |  |  Branch (349:45): [True: 886, False: 1]
  |  |  |  Branch (349:45): [True: 868, False: 18]
  |  |  ------------------
  ------------------
 1122|    888|		  Type::static_size <= header.unitSize &&
 1123|    888|		  c->check_range (bytesZ.arrayZ,
 1124|    888|				  header.nUnits,
 1125|    888|				  header.unitSize));
 1126|    888|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     66|  {
  437|     66|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     66|  }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEES7_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     75|  {
  437|     75|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     75|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_13LigatureEntryILb1EE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  7.71M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_13LigatureEntryILb1EE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeIjLj4EEELb0EEE:
  337|  7.71M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_13LigatureEntryILb1EE9EntryDataEEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  7.71M|  {
  326|  7.71M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  7.71M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.71M]
  |  |  ------------------
  ------------------
  327|  7.71M|    return StructAtOffset<const Type> (base, *this);
  328|  7.71M|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  5.94M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeIjLj4EEELb0EEE:
  337|  5.94M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_17InsertionSubtableINS2_13ExtendedTypesEE9EntryDataEEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  5.94M|  {
  326|  5.94M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  5.94M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.94M]
  |  |  ------------------
  ------------------
  327|  5.94M|    return StructAtOffset<const Type> (base, *this);
  328|  5.94M|  }
_ZNK2OT14UnsizedArrayOfIN3AAT7FeatureEEixEj:
  466|   783k|  {
  467|   783k|    return arrayZ[i];
  468|   783k|  }
_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS1_4ltagEEEEbP21hb_sanitize_context_tDpOT_:
  717|    164|  {
  718|    164|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    164|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    164|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    164|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 147]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    147|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    147|    unsigned int count = len;
  722|  16.8k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 16.7k, False: 117]
  ------------------
  723|  16.7k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  16.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30, False: 16.6k]
  |  |  ------------------
  ------------------
  724|     30|	return_trace (false);
  ------------------
  |  |  349|    177|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     30|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    117|    return_trace (true);
  ------------------
  |  |  349|    117|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    117|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    147|  }
_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    164|  {
  730|    164|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    164|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    164|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    328|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    164|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 164, False: 0]
  |  |  |  Branch (349:45): [True: 147, False: 17]
  |  |  ------------------
  ------------------
  732|    164|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToIS7_NS5_ItLj2EEELb0EEE:
  337|  16.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_ItLj2EEELb0EEclEPKv:
  325|  27.0M|  {
  326|  27.0M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  27.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 27.0M]
  |  |  ------------------
  ------------------
  327|  27.0M|    return StructAtOffset<const Type> (base, *this);
  328|  27.0M|  }
_ZNK2OT7ArrayOfIN3AAT13FTStringRangeENS_7IntTypeIjLj4EEEEixEi:
  620|   507k|  {
  621|   507k|    unsigned int i = (unsigned int) i_;
  622|   507k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   507k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 472k, False: 35.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   472k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  35.5k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  35.5k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  35.5k|    return arrayZ[i];
  625|   507k|  }
_ZN2OTplIPKN3AAT4ltagELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToIS9_NS7_ItLj2EEELb0EEE:
  337|   507k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeIhLj1EEEEENS3_ItLj2EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.46k|  {
  427|  1.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.46k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  7.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 1.46k]
  |  |  |  Branch (349:45): [True: 1.45k, False: 5]
  |  |  |  Branch (349:45): [True: 0, False: 5]
  |  |  |  Branch (349:45): [True: 1.46k, False: 0]
  |  |  ------------------
  ------------------
  429|  1.46k|		  (this->is_null () ||
  430|  1.46k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.46k|		   neuter (c)));
  432|  1.46k|  }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeIhLj1EEEEENS3_ItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.46k|  {
  417|  1.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.46k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.46k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.46k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.46k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.46k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.46k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.46k|    return_trace (true);
  ------------------
  |  |  349|  1.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.46k|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEENS1_ItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.45k|  {
  718|  1.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.45k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.45k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.45k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.45k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEENS1_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.45k|  {
  730|  1.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.45k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.91k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.45k, False: 0]
  |  |  |  Branch (349:45): [True: 1.45k, False: 2]
  |  |  ------------------
  ------------------
  732|  1.45k|  }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeIhLj1EEEEENS3_ItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|      5|  {
  437|      5|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|      5|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesEvEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|  14.3M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesEvEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIvEEEERKT_RKNS_8OffsetToISB_NS_7IntTypeItLj2EEELb0EEE:
  337|  14.3M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryIvEEEENS_7IntTypeItLj2EEELb0EEclEPKv:
  325|  14.3M|  {
  326|  14.3M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  14.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.3M]
  |  |  ------------------
  ------------------
  327|  14.3M|    return StructAtOffset<const Type> (base, *this);
  328|  14.3M|  }
_ZNK2OT7IntTypeIhLj1EEcvjEv:
   68|  66.3M|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISE_NSC_ItLj2EEELb0EEE:
  337|  9.82M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeItLj2EEELb0EEE:
  337|  9.82M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_18ContextualSubtableINS2_13ObsoleteTypesEE9EntryDataEEEEENS_7IntTypeItLj2EEELb0EEclEPKv:
  325|  9.82M|  {
  326|  9.82M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  9.82M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 9.82M]
  |  |  ------------------
  ------------------
  327|  9.82M|    return StructAtOffset<const Type> (base, *this);
  328|  9.82M|  }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEES7_Lb0EE8sanitizeIJiEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    304|  {
  427|    304|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    304|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    304|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 304]
  |  |  |  Branch (349:45): [True: 304, False: 0]
  |  |  |  Branch (349:45): [True: 0, False: 0]
  |  |  |  Branch (349:45): [True: 304, False: 0]
  |  |  ------------------
  ------------------
  429|    304|		  (this->is_null () ||
  430|    304|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    304|		   neuter (c)));
  432|    304|  }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEES7_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    304|  {
  417|    304|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    304|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    304|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    304|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 304]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    304|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    304|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 304]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    304|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    304|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 304]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    304|    return_trace (true);
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    304|  }
_ZNK2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  578|    304|  {
  579|    304|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    304|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  580|    304|    return_trace ((UnsizedArray16OfOffsetTo<Type, OffsetType, has_null>
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  581|    304|		   ::sanitize (c, count, this, std::forward<Ts> (ds)...)));
  582|    304|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEEE8sanitizeIJPKNS_23UnsizedListOfOffset16ToIS5_S7_Lb0EEEEEEbP21hb_sanitize_context_tjDpOT_:
  529|    304|  {
  530|    304|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    304|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    304|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    304|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 304]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    304|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|    304|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 304]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|    304|    return_trace (true);
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|    304|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    304|  {
  541|    304|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    304|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    304|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    304|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISE_NSC_ItLj2EEELb0EEE:
  337|  2.32M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeItLj2EEELb0EEE:
  337|  2.32M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_17InsertionSubtableINS2_13ObsoleteTypesEE9EntryDataEEEEENS_7IntTypeItLj2EEELb0EEclEPKv:
  325|  2.32M|  {
  326|  2.32M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.32M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.32M]
  |  |  ------------------
  ------------------
  327|  2.32M|    return StructAtOffset<const Type> (base, *this);
  328|  2.32M|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesEvEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  4.58M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeItLj2EEEEENS3_IjLj4EEELb0EEclEPKv:
  325|  25.0M|  {
  326|  25.0M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  25.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 25.0M]
  |  |  ------------------
  ------------------
  327|  25.0M|    return StructAtOffset<const Type> (base, *this);
  328|  25.0M|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEEixEj:
  466|  5.00M|  {
  467|  5.00M|    return arrayZ[i];
  468|  5.00M|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeItLj2EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  2.75M|  {
 1106|  2.75M|    unsigned pos;
 1107|  2.75M|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 715k, False: 2.03M]
  ------------------
 1108|  2.75M|			    key,
 1109|  2.75M|			    (const void *) bytesZ,
 1110|  2.75M|			    get_length (),
 1111|  2.75M|			    header.unitSize,
 1112|  2.75M|			    _hb_cmp_method<T, Type>)
 1113|  2.75M|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  2.75M|	   : nullptr;
 1115|  2.75M|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEEcvPKT_IvEEv:
  478|  8.11M|  template <typename T> operator const T * () const { return arrayZ; }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeItLj2EEEEEE10get_lengthEv:
 1086|  2.75M|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeItLj2EEEEEE18last_is_terminatorEv:
 1056|  2.75M|  {
 1057|  2.75M|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  2.75M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 604k, False: 2.14M]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  2.14M|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  2.14M|    unsigned int count = Type::TerminationWordCount;
 1065|  5.63M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 3.89M, False: 1.74M]
  ------------------
 1066|  3.89M|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 404k, False: 3.48M]
  ------------------
 1067|   404k|	return false;
 1068|  1.74M|    return true;
 1069|  2.14M|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeItLj2EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  1.79M|  {
 1106|  1.79M|    unsigned pos;
 1107|  1.79M|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 129k, False: 1.66M]
  ------------------
 1108|  1.79M|			    key,
 1109|  1.79M|			    (const void *) bytesZ,
 1110|  1.79M|			    get_length (),
 1111|  1.79M|			    header.unitSize,
 1112|  1.79M|			    _hb_cmp_method<T, Type>)
 1113|  1.79M|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  1.79M|	   : nullptr;
 1115|  1.79M|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToIS7_S6_Lb0EEE:
  337|   129k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEES3_Lb0EEclEPKv:
  325|   130k|  {
  326|   130k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   130k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 130k]
  |  |  ------------------
  ------------------
  327|   130k|    return StructAtOffset<const Type> (base, *this);
  328|   130k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeItLj2EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  1.58M|  {
 1106|  1.58M|    unsigned pos;
 1107|  1.58M|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 601k, False: 981k]
  ------------------
 1108|  1.58M|			    key,
 1109|  1.58M|			    (const void *) bytesZ,
 1110|  1.58M|			    get_length (),
 1111|  1.58M|			    header.unitSize,
 1112|  1.58M|			    _hb_cmp_method<T, Type>)
 1113|  1.58M|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  1.58M|	   : nullptr;
 1115|  1.58M|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeItLj2EEEEEE10get_lengthEv:
 1086|  1.58M|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeItLj2EEEEEE18last_is_terminatorEv:
 1056|  1.58M|  {
 1057|  1.58M|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.09k, False: 1.57M]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  1.57M|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  1.57M|    unsigned int count = Type::TerminationWordCount;
 1065|  1.57M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 1.57M, False: 512]
  ------------------
 1066|  1.57M|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 1.57M, False: 512]
  ------------------
 1067|  1.57M|	return false;
 1068|    512|    return true;
 1069|  1.57M|  }
_ZNK2OT7IntTypeItLj2EE3cmpIjLPv0EEEiT_:
  101|  20.8M|  {
  102|  20.8M|    Type b = v;
  103|  20.8M|    return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (103:12): [True: 8.49M, False: 12.3M]
  |  Branch (103:25): [True: 2.77M, False: 9.61M]
  ------------------
  104|  20.8M|  }
_ZN2OTplIPKN3AAT18ContextualSubtableINS1_13ExtendedTypesEEELPv0EEERKNS_23UnsizedListOfOffset16ToINS1_6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEERKT_RKNS_8OffsetToISE_SD_Lb0EEE:
  337|  1.34k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEES7_Lb0EEclEPKv:
  325|  1.34k|  {
  326|  1.34k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.34k]
  |  |  ------------------
  ------------------
  327|  1.34k|    return StructAtOffset<const Type> (base, *this);
  328|  1.34k|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  4.84M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEixEi:
  560|  6.12M|  {
  561|  6.12M|    unsigned int i = (unsigned int) i_;
  562|  6.12M|    const OffsetTo<Type, OffsetType, has_null> *p = &this->arrayZ[i];
  563|  6.12M|    if (unlikely ((const void *) p < (const void *) this->arrayZ)) return Null (Type); /* Overflowed. */
  ------------------
  |  |  259|  6.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.12M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const void *) p < (const void *) this->arrayZ)) return Null (Type); /* Overflowed. */
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  564|  6.12M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  6.12M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  565|  6.12M|    return this+*p;
  566|  6.12M|  }
_ZN2OTplIPKNS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEELPv0EEERKS5_RKT_RKNS_8OffsetToIS5_S7_Lb0EEE:
  337|  6.12M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  6.12M|  {
  326|  6.12M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  6.12M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.12M]
  |  |  ------------------
  ------------------
  327|  6.12M|    return StructAtOffset<const Type> (base, *this);
  328|  6.12M|  }
_ZNK2OT14UnsizedArrayOfINS_11HBGlyphID16EEixEj:
  466|  20.7M|  {
  467|  20.7M|    return arrayZ[i];
  468|  20.7M|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_11HBGlyphID16EEEE7bsearchIjEEPKS4_RKT_:
 1105|   333k|  {
 1106|   333k|    unsigned pos;
 1107|   333k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 111k, False: 222k]
  ------------------
 1108|   333k|			    key,
 1109|   333k|			    (const void *) bytesZ,
 1110|   333k|			    get_length (),
 1111|   333k|			    header.unitSize,
 1112|   333k|			    _hb_cmp_method<T, Type>)
 1113|   333k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|   333k|	   : nullptr;
 1115|   333k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_11HBGlyphID16EEEE10get_lengthEv:
 1086|   333k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_11HBGlyphID16EEEE18last_is_terminatorEv:
 1056|   333k|  {
 1057|   333k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|   333k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 110k, False: 222k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   222k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   222k|    unsigned int count = Type::TerminationWordCount;
 1065|   223k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 223k, False: 305]
  ------------------
 1066|   223k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 222k, False: 942]
  ------------------
 1067|   222k|	return false;
 1068|    305|    return true;
 1069|   222k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_11HBGlyphID16EEEE7bsearchIjEEPKS4_RKT_:
 1105|   506k|  {
 1106|   506k|    unsigned pos;
 1107|   506k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 60.5k, False: 445k]
  ------------------
 1108|   506k|			    key,
 1109|   506k|			    (const void *) bytesZ,
 1110|   506k|			    get_length (),
 1111|   506k|			    header.unitSize,
 1112|   506k|			    _hb_cmp_method<T, Type>)
 1113|   506k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|   506k|	   : nullptr;
 1115|   506k|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_11HBGlyphID16EEERKT_RKNS_8OffsetToIS6_NS_7IntTypeItLj2EEELb0EEE:
  337|  60.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEclEPKv:
  325|  63.2k|  {
  326|  63.2k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  63.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 63.2k]
  |  |  ------------------
  ------------------
  327|  63.2k|    return StructAtOffset<const Type> (base, *this);
  328|  63.2k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_11HBGlyphID16EEEE7bsearchIjEEPKS4_RKT_:
 1105|   662k|  {
 1106|   662k|    unsigned pos;
 1107|   662k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 2.33k, False: 660k]
  ------------------
 1108|   662k|			    key,
 1109|   662k|			    (const void *) bytesZ,
 1110|   662k|			    get_length (),
 1111|   662k|			    header.unitSize,
 1112|   662k|			    _hb_cmp_method<T, Type>)
 1113|   662k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|   662k|	   : nullptr;
 1115|   662k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_11HBGlyphID16EEEE10get_lengthEv:
 1086|   662k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_11HBGlyphID16EEEE18last_is_terminatorEv:
 1056|   662k|  {
 1057|   662k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|   662k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 254, False: 662k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   662k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   662k|    unsigned int count = Type::TerminationWordCount;
 1065|  1.01M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 662k, False: 350k]
  ------------------
 1066|   662k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 311k, False: 350k]
  ------------------
 1067|   311k|	return false;
 1068|   350k|    return true;
 1069|   662k|  }
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   966k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.10M|  {
  326|  2.10M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.10M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 347k, False: 1.75M]
  |  |  ------------------
  ------------------
  327|  1.75M|    return StructAtOffset<const Type> (base, *this);
  328|  2.10M|  }
_ZN2OT12_hb_has_nullINS_8ClassDefELb1EE8get_nullEv:
  308|   443k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   443k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|   210k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_8ClassDefENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|   380k|  {
  326|   380k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   380k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 95.5k, False: 284k]
  |  |  ------------------
  ------------------
  327|   284k|    return StructAtOffset<const Type> (base, *this);
  328|   380k|  }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEES2_EixEi:
  620|   341k|  {
  621|   341k|    unsigned int i = (unsigned int) i_;
  622|   341k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   341k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 140k, False: 201k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   140k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   201k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   201k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   201k|    return arrayZ[i];
  625|   341k|  }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE7bsearchIjEERKS5_RKT_SB_:
  973|  19.6M|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  19.6M|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_7IntTypeItLj2EEENS1_IjLj3EEEEixEi:
  620|  6.07k|  {
  621|  6.07k|    unsigned int i = (unsigned int) i_;
  622|  6.07k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  6.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.64k, False: 423]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  5.64k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|    423|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    423|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|    423|    return arrayZ[i];
  625|  6.07k|  }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeIjLj3EEEE7bsearchIjEERKS5_RKT_SB_:
  973|  79.6k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeIjLj3EEEE8as_arrayEv:
  939|  79.6k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ExtendedTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToISB_SA_Lb0EEE:
  337|    935|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEES3_Lb0EEclEPKv:
  325|  6.65k|  {
  326|  6.65k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  6.65k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.65k]
  |  |  ------------------
  ------------------
  327|  6.65k|    return StructAtOffset<const Type> (base, *this);
  328|  6.65k|  }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ExtendedTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|    935|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ExtendedTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_11HBGlyphID16EEERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj4EEELb0EEE:
  337|    935|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11HBGlyphID16EEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  2.59k|  {
  326|  2.59k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.59k]
  |  |  ------------------
  ------------------
  327|  2.59k|    return StructAtOffset<const Type> (base, *this);
  328|  2.59k|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_13LigatureEntryILb1EE9EntryDataEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  4.87M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIjLj4EEEEixEj:
  466|  3.30M|  {
  467|  3.30M|    return arrayZ[i];
  468|  3.30M|  }
_ZN2OTplIPKN3AAT17InsertionSubtableINS1_13ExtendedTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_11HBGlyphID16EEERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj4EEELb0EEE:
  337|  1.66k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  3.19M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesEvEELPv0EEERKNS1_10ClassTableINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|  9.50M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeIhLj1EEEEENS3_ItLj2EEELb0EEclEPKv:
  325|  17.2M|  {
  326|  17.2M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  17.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 17.2M]
  |  |  ------------------
  ------------------
  327|  17.2M|    return StructAtOffset<const Type> (base, *this);
  328|  17.2M|  }
_ZN2OTplIPKN3AAT18ContextualSubtableINS1_13ObsoleteTypesEEELPv0EEERKNS_23UnsizedListOfOffset16ToINS1_6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEERKT_RKNS_8OffsetToISE_SD_Lb0EEE:
  337|  1.48k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_23UnsizedListOfOffset16ToIN3AAT6LookupINS_11HBGlyphID16EEENS_7IntTypeItLj2EEELb0EEES7_Lb0EEclEPKv:
  325|  1.48k|  {
  326|  1.48k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.48k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.48k]
  |  |  ------------------
  ------------------
  327|  1.48k|    return StructAtOffset<const Type> (base, *this);
  328|  1.48k|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_18ContextualSubtableIS3_E9EntryDataEEELPv0EEERKNS1_10ClassTableINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISE_NSC_ItLj2EEELb0EEE:
  337|  6.14M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|    654|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEENS2_ItLj2EEELb0EEclEPKv:
  325|  1.34k|  {
  326|  1.34k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.34k]
  |  |  ------------------
  ------------------
  327|  1.34k|    return StructAtOffset<const Type> (base, *this);
  328|  1.34k|  }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_SA_Lb0EEE:
  337|    654|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_11HBGlyphID16EEERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb0EEE:
  337|    654|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT17InsertionSubtableINS1_13ObsoleteTypesEEELPv0EEERKNS_14UnsizedArrayOfINS_11HBGlyphID16EEERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb0EEE:
  337|  2.02k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesENS1_17InsertionSubtableIS3_E9EntryDataEEELPv0EEERKNS1_10ClassTableINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToISE_NSC_ItLj2EEELb0EEE:
  337|  1.61M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeIjLj4EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|    151|  {
  718|    151|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    151|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    151|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    151|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 134]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    134|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    134|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    134|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeIjLj4EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    151|  {
  730|    151|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    151|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    151|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    300|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 149, False: 2]
  |  |  |  Branch (349:45): [True: 134, False: 15]
  |  |  ------------------
  ------------------
  732|    151|  }
_ZNK2OT15BinSearchHeaderINS_7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  995|    151|  {
  996|    151|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    151|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  997|    151|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    151|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  998|    151|  }
_ZNK2OT15BinSearchHeaderINS_7IntTypeIjLj4EEEEcvjEv:
  992|  73.1k|  operator uint32_t () const { return len; }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_12Format1EntryILb1EE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  4.35M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_12Format1EntryILb1EE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS6_EEEERKT_RKNS_8OffsetToISE_NS_7IntTypeIjLj4EEELb0EEE:
  337|  4.35M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_12Format1EntryILb1EE9EntryDataEEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  4.35M|  {
  326|  4.35M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  4.35M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.35M]
  |  |  ------------------
  ------------------
  327|  4.35M|    return StructAtOffset<const Type> (base, *this);
  328|  4.35M|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISF_NSD_IjLj4EEELb0EEE:
  337|  6.76M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS1_5EntryIS7_EEEERKT_RKNS_8OffsetToISF_NS_7IntTypeIjLj4EEELb0EEE:
  337|  6.76M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfIN3AAT5EntryINS2_19KerxSubTableFormat4INS2_18KerxSubTableHeaderEE9EntryDataEEEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  6.76M|  {
  326|  6.76M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  6.76M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.76M]
  |  |  ------------------
  ------------------
  327|  6.76M|    return StructAtOffset<const Type> (base, *this);
  328|  6.76M|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeIjLj4EEEEES4_Lb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    799|  {
  427|    799|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    799|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    799|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  4.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    799|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 799]
  |  |  |  Branch (349:45): [True: 738, False: 61]
  |  |  |  Branch (349:45): [True: 0, False: 61]
  |  |  |  Branch (349:45): [True: 799, False: 0]
  |  |  ------------------
  ------------------
  429|    799|		  (this->is_null () ||
  430|    799|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    799|		   neuter (c)));
  432|    799|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeIjLj4EEEEES4_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    799|  {
  417|    799|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    799|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    799|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    799|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 799]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    799|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    799|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 799]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    799|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    799|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 799]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    799|    return_trace (true);
  ------------------
  |  |  349|    799|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    799|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    799|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    950|  {
  530|    950|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    950|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    950|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    950|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 35, False: 915]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     35|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    915|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    915|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    915|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    950|  {
  541|    950|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    950|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    950|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    950|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    950|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    950|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeIjLj4EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|     89|  {
 1093|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|     89|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     89|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 75]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|     75|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|     75|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     75|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeIjLj4EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|     89|  {
 1120|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|     89|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 88, False: 1]
  |  |  |  Branch (349:45): [True: 87, False: 1]
  |  |  |  Branch (349:45): [True: 75, False: 12]
  |  |  ------------------
  ------------------
 1122|     89|		  Type::static_size <= header.unitSize &&
 1123|     89|		  c->check_range (bytesZ.arrayZ,
 1124|     89|				  header.nUnits,
 1125|     89|				  header.unitSize));
 1126|     89|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEE8sanitizeIJPKNS1_13LookupFormat4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
 1092|     89|  {
 1093|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|     89|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     89|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 80]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|     80|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|     80|    unsigned int count = get_length ();
 1097|    374|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 313, False: 61]
  ------------------
 1098|    313|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    313|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 294]
  |  |  ------------------
  ------------------
 1099|     19|	return_trace (false);
  ------------------
  |  |  349|     99|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|     61|    return_trace (true);
  ------------------
  |  |  349|     61|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     61|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|     80|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|     89|  {
 1120|     89|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     89|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|     89|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    353|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     89|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 88, False: 1]
  |  |  |  Branch (349:45): [True: 87, False: 1]
  |  |  |  Branch (349:45): [True: 80, False: 7]
  |  |  ------------------
  ------------------
 1122|     89|		  Type::static_size <= header.unitSize &&
 1123|     89|		  c->check_range (bytesZ.arrayZ,
 1124|     89|				  header.nUnits,
 1125|     89|				  header.unitSize));
 1126|     89|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEE10get_lengthEv:
 1086|  3.44k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEE18last_is_terminatorEv:
 1056|  3.44k|  {
 1057|  3.44k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  3.44k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 319, False: 3.12k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  3.12k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  3.12k|    unsigned int count = Type::TerminationWordCount;
 1065|  5.45k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 4.82k, False: 626]
  ------------------
 1066|  4.82k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 2.50k, False: 2.32k]
  ------------------
 1067|  2.50k|	return false;
 1068|    626|    return true;
 1069|  3.12k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEEixEi:
 1072|    313|  {
 1073|    313|    unsigned int i = (unsigned int) i_;
 1074|    313|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    313|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 313]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    313|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    313|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    313|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    313|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEENS2_ItLj2EEELb0EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    303|  {
  427|    303|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    303|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    303|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    303|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 303]
  |  |  |  Branch (349:45): [True: 294, False: 9]
  |  |  |  Branch (349:45): [True: 0, False: 9]
  |  |  |  Branch (349:45): [True: 303, False: 0]
  |  |  ------------------
  ------------------
  429|    303|		  (this->is_null () ||
  430|    303|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    303|		   neuter (c)));
  432|    303|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEENS2_ItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    303|  {
  417|    303|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    303|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    303|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    303|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 303]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    303|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    303|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 303]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    303|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    303|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 303]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    303|    return_trace (true);
  ------------------
  |  |  349|    303|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    303|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    303|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEENS2_ItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|      9|  {
  437|      9|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|      9|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeIjLj4EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
 1092|     78|  {
 1093|     78|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     78|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|     78|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     78|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 73]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|     73|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|     73|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     73|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|      0|    unsigned int count = get_length ();
 1097|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 0, False: 0]
  ------------------
 1098|      0|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1099|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|      0|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeIjLj4EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|     78|  {
 1120|     78|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     78|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|     78|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    309|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     78|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 77, False: 1]
  |  |  |  Branch (349:45): [True: 76, False: 1]
  |  |  |  Branch (349:45): [True: 73, False: 3]
  |  |  ------------------
  ------------------
 1122|     78|		  Type::static_size <= header.unitSize &&
 1123|     78|		  c->check_range (bytesZ.arrayZ,
 1124|     78|				  header.nUnits,
 1125|     78|				  header.unitSize));
 1126|     78|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeIjLj4EEEEES4_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     61|  {
  437|     61|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     61|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS0_INS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES6_Lb1EE8sanitizeIJPKNS5_IhLj1EEEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    622|  {
  427|    622|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    622|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    622|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  3.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    622|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 143, False: 478]
  |  |  |  Branch (349:45): [True: 149, False: 329]
  |  |  |  Branch (349:45): [True: 147, False: 182]
  |  |  |  Branch (349:45): [True: 621, False: 1]
  |  |  ------------------
  ------------------
  429|    622|		  (this->is_null () ||
  430|    622|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    622|		   neuter (c)));
  432|    622|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS0_INS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES6_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    622|  {
  417|    622|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    622|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    622|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    622|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 621]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    621|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    621|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 143, False: 478]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    143|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    143|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    478|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    478|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 478]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    478|    return_trace (true);
  ------------------
  |  |  349|    478|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    478|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    478|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tjDpOT_:
  529|    427|  {
  530|    427|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    427|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    427|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    427|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 27, False: 400]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     27|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     27|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    400|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|  1.78k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 1.44k, False: 347]
  ------------------
  534|  1.44k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.44k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 53, False: 1.38k]
  |  |  ------------------
  ------------------
  535|     53|	return_trace (false);
  ------------------
  |  |  349|    453|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     53|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|    347|    return_trace (true);
  ------------------
  |  |  349|    347|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    347|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|    400|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    427|  {
  541|    427|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    427|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    427|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    427|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    427|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    427|  }
_ZNK2OT8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS4_ItLj2EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.78k|  {
  427|  2.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.78k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  14.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.78k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 2.77k]
  |  |  |  Branch (349:45): [True: 2.60k, False: 174]
  |  |  |  Branch (349:45): [True: 0, False: 174]
  |  |  |  Branch (349:45): [True: 2.77k, False: 4]
  |  |  ------------------
  ------------------
  429|  2.78k|		  (this->is_null () ||
  430|  2.78k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.78k|		   neuter (c)));
  432|  2.78k|  }
_ZNK2OT8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS4_ItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.78k|  {
  417|  2.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.78k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 2.77k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.77k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.77k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.77k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.77k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.77k|    return_trace (true);
  ------------------
  |  |  349|  2.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.77k|  }
_ZNK2OT7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  2.77k|  {
  718|  2.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  2.77k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 174, False: 2.60k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    174|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    174|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  2.60k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  2.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  2.77k|  {
  730|  2.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  2.77k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  5.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.70k, False: 78]
  |  |  |  Branch (349:45): [True: 2.60k, False: 96]
  |  |  ------------------
  ------------------
  732|  2.77k|  }
_ZNK2OT8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS4_ItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|    174|  {
  437|    174|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|    174|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tDpOT_:
 1092|    124|  {
 1093|    124|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    124|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    124|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    124|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 107]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|    107|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|    107|    unsigned int count = get_length ();
 1097|  1.01k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 989, False: 29]
  ------------------
 1098|    989|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    989|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 78, False: 911]
  |  |  ------------------
  ------------------
 1099|     78|	return_trace (false);
  ------------------
  |  |  349|    185|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     78|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|     29|    return_trace (true);
  ------------------
  |  |  349|     29|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     29|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|    107|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    124|  {
 1120|    124|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    124|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    124|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    483|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    124|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 119, False: 5]
  |  |  |  Branch (349:45): [True: 116, False: 3]
  |  |  |  Branch (349:45): [True: 107, False: 9]
  |  |  ------------------
  ------------------
 1122|    124|		  Type::static_size <= header.unitSize &&
 1123|    124|		  c->check_range (bytesZ.arrayZ,
 1124|    124|				  header.nUnits,
 1125|    124|				  header.unitSize));
 1126|    124|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE10get_lengthEv:
 1086|   256k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE18last_is_terminatorEv:
 1056|   256k|  {
 1057|   256k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|   256k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 286, False: 256k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   256k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   256k|    unsigned int count = Type::TerminationWordCount;
 1065|   544k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 400k, False: 143k]
  ------------------
 1066|   400k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 112k, False: 288k]
  ------------------
 1067|   112k|	return false;
 1068|   143k|    return true;
 1069|   256k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEEixEi:
 1072|    989|  {
 1073|    989|    unsigned int i = (unsigned int) i_;
 1074|    989|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    989|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 989]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    989|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    989|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    989|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    989|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE8sanitizeIJPKNS1_13LookupFormat4ISA_EERPKvEEEbP21hb_sanitize_context_tDpOT_:
 1092|    114|  {
 1093|    114|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    114|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    114|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    114|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 83]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     31|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     31|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|     83|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|     83|    unsigned int count = get_length ();
 1097|    365|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 350, False: 15]
  ------------------
 1098|    350|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    350|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 68, False: 282]
  |  |  ------------------
  ------------------
 1099|     68|	return_trace (false);
  ------------------
  |  |  349|    151|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     68|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|     15|    return_trace (true);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|     83|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    114|  {
 1120|    114|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    114|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    114|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    445|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    114|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 111, False: 3]
  |  |  |  Branch (349:45): [True: 106, False: 5]
  |  |  |  Branch (349:45): [True: 83, False: 23]
  |  |  ------------------
  ------------------
 1122|    114|		  Type::static_size <= header.unitSize &&
 1123|    114|		  c->check_range (bytesZ.arrayZ,
 1124|    114|				  header.nUnits,
 1125|    114|				  header.unitSize));
 1126|    114|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE10get_lengthEv:
 1086|  39.8k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE18last_is_terminatorEv:
 1056|  39.8k|  {
 1057|  39.8k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  39.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 305, False: 39.5k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  39.5k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  39.5k|    unsigned int count = Type::TerminationWordCount;
 1065|   117k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 78.7k, False: 39.1k]
  ------------------
 1066|  78.7k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 409, False: 78.3k]
  ------------------
 1067|    409|	return false;
 1068|  39.1k|    return true;
 1069|  39.5k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEEixEi:
 1072|    350|  {
 1073|    350|    unsigned int i = (unsigned int) i_;
 1074|    350|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    350|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 350]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    350|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    350|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    350|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    350|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS0_INS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES8_Lb0EE8sanitizeIJjRPKvEEEbP21hb_sanitize_context_tSE_DpOT_:
  426|    339|  {
  427|    339|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    339|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    339|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    339|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 339]
  |  |  |  Branch (349:45): [True: 282, False: 57]
  |  |  |  Branch (349:45): [True: 0, False: 57]
  |  |  |  Branch (349:45): [True: 339, False: 0]
  |  |  ------------------
  ------------------
  429|    339|		  (this->is_null () ||
  430|    339|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    339|		   neuter (c)));
  432|    339|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS0_INS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES8_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    339|  {
  417|    339|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    339|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    339|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    339|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 339]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    339|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    339|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 339]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    339|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    339|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 339]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    339|    return_trace (true);
  ------------------
  |  |  349|    339|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    339|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    339|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS0_INS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES8_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     57|  {
  437|     57|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     57|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tDpOT_:
 1092|    118|  {
 1093|    118|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    118|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1094|    118|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    118|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47, False: 71]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     47|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     47|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1095|     71|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [Folded - Ignored]
  ------------------
 1096|     71|    unsigned int count = get_length ();
 1097|    376|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1097:30): [True: 354, False: 22]
  ------------------
 1098|    354|      if (unlikely (!(*this)[i].sanitize (c, std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    354|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 49, False: 305]
  |  |  ------------------
  ------------------
 1099|     49|	return_trace (false);
  ------------------
  |  |  349|    120|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     49|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1100|     22|    return_trace (true);
  ------------------
  |  |  349|     22|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1101|     71|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
 1119|    118|  {
 1120|    118|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    118|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1121|    118|    return_trace (header.sanitize (c) &&
  ------------------
  |  |  349|    463|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    118|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 115, False: 3]
  |  |  |  Branch (349:45): [True: 112, False: 3]
  |  |  |  Branch (349:45): [True: 71, False: 41]
  |  |  ------------------
  ------------------
 1122|    118|		  Type::static_size <= header.unitSize &&
 1123|    118|		  c->check_range (bytesZ.arrayZ,
 1124|    118|				  header.nUnits,
 1125|    118|				  header.unitSize));
 1126|    118|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE10get_lengthEv:
 1086|   144k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE18last_is_terminatorEv:
 1056|   144k|  {
 1057|   144k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|   144k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 268, False: 144k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|   144k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|   144k|    unsigned int count = Type::TerminationWordCount;
 1065|   288k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 144k, False: 143k]
  ------------------
 1066|   144k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 834, False: 143k]
  ------------------
 1067|    834|	return false;
 1068|   143k|    return true;
 1069|   144k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEEixEi:
 1072|    354|  {
 1073|    354|    unsigned int i = (unsigned int) i_;
 1074|    354|    if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  259|    354|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 354]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= get_length ())) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1075|    354|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    354|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
 1076|    354|    return StructAtOffset<Type> (&bytesZ, i * header.unitSize);
 1077|    354|  }
_ZNK2OT8OffsetToIN3AAT6LookupINS0_INS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES6_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|    329|  {
  437|    329|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    329|    return c->try_set (this, 0);
  439|    329|  }
_ZN2OT8OffsetToIN3AAT6LookupINS0_INS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES6_Lb1EEaSEj:
  322|    147|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OTplIPKN3AAT4ankrELPv0EEERKNS_7IntTypeIhLj1EEERKT_RKNS_8OffsetToIS7_NS6_IjLj4EEELb0EEE:
  337|   512k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7IntTypeIhLj1EEENS1_IjLj4EEELb0EEclEPKv:
  325|   512k|  {
  326|   512k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   512k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 512k]
  |  |  ------------------
  ------------------
  327|   512k|    return StructAtOffset<const Type> (base, *this);
  328|   512k|  }
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  15.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|   736k|  {
  326|   736k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   736k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 728k, False: 8.05k]
  |  |  ------------------
  ------------------
  327|  8.05k|    return StructAtOffset<const Type> (base, *this);
  328|   736k|  }
_ZN2OT12_hb_has_nullINS_14VariationStoreELb1EE8get_nullEv:
  308|   728k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   728k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_14VariationStoreELPv0EEERKNS_13VarRegionListERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  72.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13VarRegionListENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  72.6k|  {
  326|  72.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  72.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 49.9k, False: 22.7k]
  |  |  ------------------
  ------------------
  327|  22.7k|    return StructAtOffset<const Type> (base, *this);
  328|  72.6k|  }
_ZN2OT12_hb_has_nullINS_13VarRegionListELb1EE8get_nullEv:
  308|  49.9k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  49.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_13MarkGlyphSetsERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.68k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  1.68k|  {
  326|  1.68k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 800, False: 887]
  |  |  ------------------
  ------------------
  327|    887|    return StructAtOffset<const Type> (base, *this);
  328|  1.68k|  }
_ZN2OT12_hb_has_nullINS_13MarkGlyphSetsELb1EE8get_nullEv:
  308|  1.30k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.30k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_13MarkGlyphSetsERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  2.75k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13MarkGlyphSetsENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  2.75k|  {
  326|  2.75k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.75k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 503, False: 2.24k]
  |  |  ------------------
  ------------------
  327|  2.24k|    return StructAtOffset<const Type> (base, *this);
  328|  2.75k|  }
_ZN2OTplIPKNS_20MarkGlyphSetsFormat1ELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj4EEELb1EEE:
  337|  2.31k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  2.31k|  {
  326|  2.31k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.31k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.06k, False: 246]
  |  |  ------------------
  ------------------
  327|    246|    return StructAtOffset<const Type> (base, *this);
  328|  2.31k|  }
_ZN2OT12_hb_has_nullINS_6Layout6Common8CoverageELb1EE8get_nullEv:
  308|  1.76M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.76M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj4EEELb1EEENS5_ItLj2EEEEixEi:
  620|  2.31k|  {
  621|  2.31k|    unsigned int i = (unsigned int) i_;
  622|  2.31k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.31k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.04k, False: 1.26k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  1.04k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  1.26k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.26k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  1.26k|    return arrayZ[i];
  625|  2.31k|  }
_ZNK2OT13SortedArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|  3.19M|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT13SortedArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  3.20M|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT13SortedArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|   379k|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT13SortedArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|   382k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7IntTypeIjLj3EE3cmpIjLPv0EEEiT_:
  101|   801k|  {
  102|   801k|    Type b = v;
  103|   801k|    return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (103:12): [True: 353k, False: 448k]
  |  Branch (103:25): [True: 429k, False: 18.7k]
  ------------------
  104|   801k|  }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE7bsearchIjEERKS5_RKT_SB_:
  973|  1.69M|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  1.69M|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT13SortedArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeIjLj4EEEEEE7bsearchINS1_15hb_glyph_pair_tEEERKS2_RKT_SB_:
  973|  72.9k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeIjLj4EEEEEE8as_arrayEv:
  939|  72.9k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_12Format1EntryILb1EE9EntryDataEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|    540|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEENS2_IjLj4EEELb0EEclEPKv:
  325|   103k|  {
  326|   103k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   103k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 103k]
  |  |  ------------------
  ------------------
  327|   103k|    return StructAtOffset<const Type> (base, *this);
  328|   103k|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_12Format1EntryILb1EE9EntryDataEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISE_NSC_IjLj4EEELb0EEE:
  337|  3.22M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIsLj2EEEEixEj:
  466|  3.47M|  {
  467|  3.47M|    return arrayZ[i];
  468|  3.47M|  }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  9.71k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  4.85k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7IntTypeIsLj2EE8sanitizeEP21hb_sanitize_context_t:
  106|   388k|  {
  107|   388k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   388k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|   388k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   388k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   388k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|   388k|  }
_ZN2OTplIPKN3AAT10StateTableINS1_13ExtendedTypesENS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISF_NSD_IjLj4EEELb0EEE:
  337|  4.21M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT4ankrELPv0EEERKNS1_6LookupINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENSA_ItLj2EEELb0EEEEERKT_RKNS7_ISF_SB_Lb1EEE:
  337|  1.17M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT6LookupINS0_INS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES6_Lb1EEclEPKv:
  325|  1.17M|  {
  326|  1.17M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.17M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 588k, False: 587k]
  |  |  ------------------
  ------------------
  327|   587k|    return StructAtOffset<const Type> (base, *this);
  328|  1.17M|  }
_ZN2OT12_hb_has_nullIN3AAT6LookupINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEELb1EE8get_nullEv:
  308|   588k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   588k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEixEj:
  466|   113k|  {
  467|   113k|    return arrayZ[i];
  468|   113k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE7bsearchIjEEPKSB_RKT_:
 1105|   255k|  {
 1106|   255k|    unsigned pos;
 1107|   255k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 254k, False: 536]
  ------------------
 1108|   255k|			    key,
 1109|   255k|			    (const void *) bytesZ,
 1110|   255k|			    get_length (),
 1111|   255k|			    header.unitSize,
 1112|   255k|			    _hb_cmp_method<T, Type>)
 1113|   255k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|   255k|	   : nullptr;
 1115|   255k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE7bsearchIjEEPKSB_RKT_:
 1105|  39.3k|  {
 1106|  39.3k|    unsigned pos;
 1107|  39.3k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 39.0k, False: 298]
  ------------------
 1108|  39.3k|			    key,
 1109|  39.3k|			    (const void *) bytesZ,
 1110|  39.3k|			    get_length (),
 1111|  39.3k|			    header.unitSize,
 1112|  39.3k|			    _hb_cmp_method<T, Type>)
 1113|  39.3k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  39.3k|	   : nullptr;
 1115|  39.3k|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS9_ItLj2EEELb0EEEEERKT_RKNS5_ISE_SC_Lb0EEE:
  337|  39.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS0_INS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS5_ItLj2EEELb0EEEEES8_Lb0EEclEPKv:
  325|  39.0k|  {
  326|  39.0k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  39.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 39.0k]
  |  |  ------------------
  ------------------
  327|  39.0k|    return StructAtOffset<const Type> (base, *this);
  328|  39.0k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_8OffsetToINS_7ArrayOfINS1_6AnchorENS_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEE7bsearchIjEEPKSB_RKT_:
 1105|   144k|  {
 1106|   144k|    unsigned pos;
 1107|   144k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 143k, False: 522]
  ------------------
 1108|   144k|			    key,
 1109|   144k|			    (const void *) bytesZ,
 1110|   144k|			    get_length (),
 1111|   144k|			    header.unitSize,
 1112|   144k|			    _hb_cmp_method<T, Type>)
 1113|   144k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|   144k|	   : nullptr;
 1115|   144k|  }
_ZN2OTplIPKNS_7IntTypeIhLj1EEELPv0EEERKNS_7ArrayOfIN3AAT6AnchorENS1_IjLj4EEEEERKT_RKNS_8OffsetToISA_NS1_ItLj2EEELb0EEE:
  337|   511k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEENS4_ItLj2EEELb0EEclEPKv:
  325|   511k|  {
  326|   511k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   511k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 511k]
  |  |  ------------------
  ------------------
  327|   511k|    return StructAtOffset<const Type> (base, *this);
  328|   511k|  }
_ZNK2OT7ArrayOfIN3AAT6AnchorENS_7IntTypeIjLj4EEEEixEi:
  620|   511k|  {
  621|   511k|    unsigned int i = (unsigned int) i_;
  622|   511k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   511k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 486k, False: 25.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   486k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  25.1k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  25.1k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  25.1k|    return arrayZ[i];
  625|   511k|  }
_ZN2OTplIPKN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEELPv0EEERKNS1_6LookupINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToISB_SA_Lb0EEE:
  337|   111k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT6LookupINS_7IntTypeIjLj4EEEEES4_Lb0EEclEPKv:
  325|   111k|  {
  326|   111k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   111k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 111k]
  |  |  ------------------
  ------------------
  327|   111k|    return StructAtOffset<const Type> (base, *this);
  328|   111k|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEEixEj:
  466|  51.4k|  {
  467|  51.4k|    return arrayZ[i];
  468|  51.4k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeIjLj4EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  3.70k|  {
 1106|  3.70k|    unsigned pos;
 1107|  3.70k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 1.05k, False: 2.64k]
  ------------------
 1108|  3.70k|			    key,
 1109|  3.70k|			    (const void *) bytesZ,
 1110|  3.70k|			    get_length (),
 1111|  3.70k|			    header.unitSize,
 1112|  3.70k|			    _hb_cmp_method<T, Type>)
 1113|  3.70k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  3.70k|	   : nullptr;
 1115|  3.70k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeIjLj4EEEEEE10get_lengthEv:
 1086|  3.70k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT19LookupSegmentSingleINS_7IntTypeIjLj4EEEEEE18last_is_terminatorEv:
 1056|  3.70k|  {
 1057|  3.70k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  3.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 241, False: 3.46k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  3.46k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  3.46k|    unsigned int count = Type::TerminationWordCount;
 1065|  7.08k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 5.59k, False: 1.49k]
  ------------------
 1066|  5.59k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 1.97k, False: 3.62k]
  ------------------
 1067|  1.97k|	return false;
 1068|  1.49k|    return true;
 1069|  3.46k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT18LookupSegmentArrayINS_7IntTypeIjLj4EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  3.05k|  {
 1106|  3.05k|    unsigned pos;
 1107|  3.05k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 695, False: 2.35k]
  ------------------
 1108|  3.05k|			    key,
 1109|  3.05k|			    (const void *) bytesZ,
 1110|  3.05k|			    get_length (),
 1111|  3.05k|			    header.unitSize,
 1112|  3.05k|			    _hb_cmp_method<T, Type>)
 1113|  3.05k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  3.05k|	   : nullptr;
 1115|  3.05k|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToIS7_NS5_ItLj2EEELb0EEE:
  337|    695|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeIjLj4EEEEEE7bsearchIjEEPKS5_RKT_:
 1105|  2.57k|  {
 1106|  2.57k|    unsigned pos;
 1107|  2.57k|    return hb_bsearch_impl (&pos,
  ------------------
  |  Branch (1107:12): [True: 614, False: 1.95k]
  ------------------
 1108|  2.57k|			    key,
 1109|  2.57k|			    (const void *) bytesZ,
 1110|  2.57k|			    get_length (),
 1111|  2.57k|			    header.unitSize,
 1112|  2.57k|			    _hb_cmp_method<T, Type>)
 1113|  2.57k|	   ? (const Type *) (((const char *) &bytesZ) + (pos * header.unitSize))
 1114|  2.57k|	   : nullptr;
 1115|  2.57k|  }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeIjLj4EEEEEE10get_lengthEv:
 1086|  2.57k|  { return header.nUnits - last_is_terminator (); }
_ZNK2OT24VarSizedBinSearchArrayOfIN3AAT12LookupSingleINS_7IntTypeIjLj4EEEEEE18last_is_terminatorEv:
 1056|  2.57k|  {
 1057|  2.57k|    if (unlikely (!header.nUnits)) return false;
  ------------------
  |  |  259|  2.57k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 713, False: 1.85k]
  |  |  ------------------
  ------------------
 1058|       |
 1059|       |    /* Gah.
 1060|       |     *
 1061|       |     * "The number of termination values that need to be included is table-specific.
 1062|       |     * The value that indicates binary search termination is 0xFFFF." */
 1063|  1.85k|    const HBUINT16 *words = &StructAtOffset<HBUINT16> (&bytesZ, (header.nUnits - 1) * header.unitSize);
 1064|  1.85k|    unsigned int count = Type::TerminationWordCount;
 1065|  2.10k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1065:30): [True: 1.85k, False: 244]
  ------------------
 1066|  1.85k|      if (words[i] != 0xFFFFu)
  ------------------
  |  Branch (1066:11): [True: 1.61k, False: 244]
  ------------------
 1067|  1.61k|	return false;
 1068|    244|    return true;
 1069|  1.85k|  }
_ZN2OTplIPKN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIiLj4EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  48.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIiLj4EEEEENS2_IjLj4EEELb0EEclEPKv:
  325|  48.3k|  {
  326|  48.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  48.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 48.3k]
  |  |  ------------------
  ------------------
  327|  48.3k|    return StructAtOffset<const Type> (base, *this);
  328|  48.3k|  }
_ZNK2OT7IntTypeIiLj4EE8sanitizeEP21hb_sanitize_context_t:
  106|  48.3k|  {
  107|  48.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  48.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|  48.3k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  48.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  48.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|  48.3k|  }
_ZNK2OT7IntTypeIiLj4EEcviEv:
   68|  40.4k|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZN2OTplIPKN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  98.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEELPv0EEERKNS1_6LookupINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_NS9_IjLj4EEELb0EEE:
  337|  75.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT9TrackDataENS_7IntTypeItLj2EEELb1EE8sanitizeIJPKNS1_4trakEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    348|  {
  427|    348|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    348|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    348|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    348|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 105, False: 242]
  |  |  |  Branch (349:45): [True: 71, False: 171]
  |  |  |  Branch (349:45): [True: 103, False: 68]
  |  |  |  Branch (349:45): [True: 347, False: 1]
  |  |  ------------------
  ------------------
  429|    348|		  (this->is_null () ||
  430|    348|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    348|		   neuter (c)));
  432|    348|  }
_ZNK2OT8OffsetToIN3AAT9TrackDataENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    348|  {
  417|    348|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    348|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    348|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    348|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 347]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    347|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    347|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 105, False: 242]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    105|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    105|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    242|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    242|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 242]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    242|    return_trace (true);
  ------------------
  |  |  349|    242|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    242|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    242|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIiLj4EEELj16EEEEENS3_IjLj4EEELb0EE8sanitizeIJRKNS3_ItLj2EEEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    179|  {
  427|    179|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    179|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    179|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|    949|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    179|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 179]
  |  |  |  Branch (349:45): [True: 125, False: 54]
  |  |  |  Branch (349:45): [True: 0, False: 54]
  |  |  |  Branch (349:45): [True: 179, False: 0]
  |  |  ------------------
  ------------------
  429|    179|		  (this->is_null () ||
  430|    179|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    179|		   neuter (c)));
  432|    179|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIiLj4EEELj16EEEEENS3_IjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    179|  {
  417|    179|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    179|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    179|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    179|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 179]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    179|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    179|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 179]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    179|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    179|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 179]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    179|    return_trace (true);
  ------------------
  |  |  349|    179|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    179|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    179|  }
_ZNK2OT14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIiLj4EEELj16EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    179|  {
  530|    179|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    179|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    179|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    179|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 54, False: 125]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     54|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     54|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    125|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    125|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    125|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIiLj4EEELj16EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    179|  {
  541|    179|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    179|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    179|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    179|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    179|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    179|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIiLj4EEELj16EEEEENS3_IjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     54|  {
  437|     54|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     54|  }
_ZNK2OT14UnsizedArrayOfIN3AAT15TrackTableEntryEE8sanitizeIJRPKvRKNS_7IntTypeItLj2EEEEEEbP21hb_sanitize_context_tjDpOT_:
  529|    125|  {
  530|    125|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    125|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    125|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    125|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 108]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    108|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|  11.9k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 11.8k, False: 71]
  ------------------
  534|  11.8k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  11.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37, False: 11.8k]
  |  |  ------------------
  ------------------
  535|     37|	return_trace (false);
  ------------------
  |  |  349|    145|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     37|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|     71|    return_trace (true);
  ------------------
  |  |  349|     71|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     71|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|    108|  }
_ZNK2OT14UnsizedArrayOfIN3AAT15TrackTableEntryEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    125|  {
  541|    125|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    125|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    125|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    125|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    125|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    125|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEENS2_ItLj2EEELb0EE8sanitizeIJRjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  11.8k|  {
  427|  11.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  11.8k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  59.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 11.8k]
  |  |  |  Branch (349:45): [True: 11.8k, False: 31]
  |  |  |  Branch (349:45): [True: 0, False: 31]
  |  |  |  Branch (349:45): [True: 11.8k, False: 3]
  |  |  ------------------
  ------------------
  429|  11.8k|		  (this->is_null () ||
  430|  11.8k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  11.8k|		   neuter (c)));
  432|  11.8k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEENS2_ItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  11.8k|  {
  417|  11.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  11.8k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  11.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 11.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  11.8k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  11.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  11.8k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  11.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.8k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  11.8k|    return_trace (true);
  ------------------
  |  |  349|  11.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  11.8k|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIsLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  11.8k|  {
  530|  11.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  11.8k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  11.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31, False: 11.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     31|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     31|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  11.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  11.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIsLj2EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  11.8k|  {
  541|  11.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  11.8k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  11.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  11.8k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEENS2_ItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     31|  {
  437|     31|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     31|  }
_ZNK2OT8OffsetToIN3AAT9TrackDataENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    171|  {
  437|    171|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    171|    return c->try_set (this, 0);
  439|    171|  }
_ZN2OT8OffsetToIN3AAT9TrackDataENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    103|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT14UnsizedArrayOfIN3AAT11FeatureNameEE8sanitizeIJPKNS1_4featEEEEbP21hb_sanitize_context_tjDpOT_:
  529|     33|  {
  530|     33|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     33|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|     33|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|     33|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 28]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|     28|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|    468|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 448, False: 20]
  ------------------
  534|    448|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    448|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 440]
  |  |  ------------------
  ------------------
  535|      8|	return_trace (false);
  ------------------
  |  |  349|     36|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|     20|    return_trace (true);
  ------------------
  |  |  349|     20|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     20|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|     28|  }
_ZNK2OT14UnsizedArrayOfIN3AAT11FeatureNameEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|     33|  {
  541|     33|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     33|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|     33|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|     33|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     33|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|     33|  }
_ZNK2OT14UnsizedArrayOfIN3AAT11SettingNameEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    448|  {
  530|    448|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    448|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    448|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    448|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 440]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    440|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    440|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    440|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfIN3AAT11SettingNameEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    448|  {
  541|    448|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    448|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    448|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    448|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    448|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    448|  }
_ZN2OT3TagaSEj:
  188|  1.28M|  Tag& operator = (hb_tag_t i) { HBUINT32::operator= (i); return *this; }
_ZN2OT11HBGlyphID16aSEt:
  199|   114k|  HBGlyphID16& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; }
_ZN2OT6VarIdx3addEjt:
  219|  1.35M|  {
  220|  1.35M|    if (i == NO_VARIATION) return i;
  ------------------
  |  Branch (220:9): [True: 877k, False: 479k]
  ------------------
  221|   479k|    return i + v;
  222|  1.35M|  }
_ZNK2OT7IntTypeIhLj1EE8sanitizeEP21hb_sanitize_context_t:
  106|  4.60M|  {
  107|  4.60M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.60M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  108|  4.60M|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  4.60M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.60M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  109|  4.60M|  }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE5beginEv:
  950|  22.3k|  const Type *begin () const { return this->arrayZ; }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE3endEv:
  951|  22.3k|  const Type *end () const { return this->arrayZ + this->len; }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE5beginEv:
  950|  5.14k|  const Type *begin () const { return this->arrayZ; }
_ZNK2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_11MediumTypesEEENS_7IntTypeItLj2EEEE3endEv:
  951|  5.14k|  const Type *end () const { return this->arrayZ + this->len; }
_ZN2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeEP22hb_serialize_context_tjb:
  672|  1.97k|  {
  673|  1.97k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  1.97k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  674|  1.97k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  1.97k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.97k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  675|  1.97k|    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  676|  1.97k|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|  1.97k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.97k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  677|  1.97k|    return_trace (true);
  ------------------
  |  |  349|  1.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.97k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  678|  1.97k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE8get_sizeEv:
  635|  1.97k|  { return len.static_size + len * Type::static_size; }
_ZN2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE9serializeEP22hb_serialize_context_tj:
  954|    253|  {
  955|    253|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    253|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  956|    253|    bool ret = ArrayOf<Type, LenType>::serialize (c, items_len);
  957|    253|    return_trace (ret);
  ------------------
  |  |  349|    253|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    253|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  958|    253|  }
_ZN2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE9serializeEP22hb_serialize_context_tjb:
  672|    253|  {
  673|    253|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    253|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  674|    253|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    253|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  675|    253|    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  676|    253|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|    253|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  677|    253|    return_trace (true);
  ------------------
  |  |  349|    253|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    253|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  678|    253|  }
_ZNK2OT7ArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE8get_sizeEv:
  635|    253|  { return len.static_size + len * Type::static_size; }
_ZN2OT13SortedArrayOfINS_6Layout6Common11RangeRecordINS1_10SmallTypesEEENS_7IntTypeItLj2EEEE8as_arrayEv:
  938|     66|  hb_sorted_array_t<      Type> as_array ()       { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEEixEi:
  620|   426k|  {
  621|   426k|    unsigned int i = (unsigned int) i_;
  622|   426k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   426k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.88k, False: 422k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  3.88k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   422k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   422k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   422k|    return arrayZ[i];
  625|   426k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEEixEi:
  620|  6.27k|  {
  621|  6.27k|    unsigned int i = (unsigned int) i_;
  622|  6.27k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  6.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.27k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  6.27k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  6.27k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  6.27k|    return arrayZ[i];
  625|  6.27k|  }
_ZNK2OT7ArrayOfINS_5IndexENS_7IntTypeItLj2EEEE8as_arrayEv:
  642|   327k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE8as_arrayEv:
  642|  33.3k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   159k|  {
  718|   159k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   159k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   159k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   159k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.28k, False: 157k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   157k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   157k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   157k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|   159k|  {
  730|   159k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   159k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   159k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   318k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   159k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 158k, False: 1.42k]
  |  |  |  Branch (349:45): [True: 157k, False: 860]
  |  |  ------------------
  ------------------
  732|   159k|  }
_ZNK2OT7ArrayOfINS_5IndexENS_7IntTypeItLj2EEEEixEi:
  620|  9.38M|  {
  621|  9.38M|    unsigned int i = (unsigned int) i_;
  622|  9.38M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  9.38M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 9.38M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  9.38M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  9.38M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  9.38M|    return arrayZ[i];
  625|  9.38M|  }
_ZN2OTplIPKNS_7FeatureELPv0EEERKNS_13FeatureParamsERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  67.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13FeatureParamsENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  67.0k|  {
  326|  67.0k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  67.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 66.9k, False: 19]
  |  |  ------------------
  ------------------
  327|     19|    return StructAtOffset<const Type> (base, *this);
  328|  67.0k|  }
_ZN2OT12_hb_has_nullINS_13FeatureParamsELb1EE8get_nullEv:
  308|  66.9k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  66.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_5IndexENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.01M|  {
  718|  1.01M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.01M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.01M|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.01M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.45k, False: 1.00M]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  6.45k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.00M|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.00M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.00M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_5IndexENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.01M|  {
  730|  1.01M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.01M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.01M|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.02M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.01M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.01M, False: 26]
  |  |  |  Branch (349:45): [True: 1.00M, False: 6.42k]
  |  |  ------------------
  ------------------
  732|  1.01M|  }
_ZNK2OT8OffsetToINS_13FeatureParamsENS_7IntTypeItLj2EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   194k|  {
  427|   194k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   194k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   194k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   972k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   194k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 22, False: 194k]
  |  |  |  Branch (349:45): [True: 193k, False: 1.08k]
  |  |  |  Branch (349:45): [True: 1.01k, False: 72]
  |  |  |  Branch (349:45): [True: 194k, False: 11]
  |  |  ------------------
  ------------------
  429|   194k|		  (this->is_null () ||
  430|   194k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   194k|		   neuter (c)));
  432|   194k|  }
_ZNK2OT8OffsetToINS_13FeatureParamsENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   194k|  {
  417|   194k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   194k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   194k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   194k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 194k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   194k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   194k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 194k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     22|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   194k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   194k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 194k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   194k|    return_trace (true);
  ------------------
  |  |  349|   194k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   194k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   194k|  }
_ZNK2OT8OffsetToINS_13FeatureParamsENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.08k|  {
  437|  1.08k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.08k|    return c->try_set (this, 0);
  439|  1.08k|  }
_ZN2OT8OffsetToINS_13FeatureParamsENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.82k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   326k|  {
  326|   326k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   326k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 269k, False: 56.8k]
  |  |  ------------------
  ------------------
  327|  56.8k|    return StructAtOffset<const Type> (base, *this);
  328|   326k|  }
_ZN2OT12_hb_has_nullINS_7FeatureELb1EE8get_nullEv:
  308|   269k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   269k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_7FeatureENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  8.05k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT13SortedArrayOfINS_6RecordINS_7LangSysEEENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  98.6k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_6RecordINS_7LangSysEEENS_7IntTypeItLj2EEEEixEi:
  620|  34.6k|  {
  621|  34.6k|    unsigned int i = (unsigned int) i_;
  622|  34.6k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  34.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.6k, False: 2.99k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  31.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  2.99k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  2.99k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  2.99k|    return arrayZ[i];
  625|  34.6k|  }
_ZN2OTplIPKNS_6ScriptELPv0EEERKNS_7LangSysERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.86M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.86M|  {
  326|  2.86M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.86M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.47M, False: 390k]
  |  |  ------------------
  ------------------
  327|   390k|    return StructAtOffset<const Type> (base, *this);
  328|  2.86M|  }
_ZN2OT12_hb_has_nullINS_7LangSysELb1EE8get_nullEv:
  308|  2.47M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  2.47M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_6RecordINS_7LangSysEEENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|  98.6k|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT7IntTypeIjLj4EE3cmpIjLPv0EEEiT_:
  101|  60.7k|  {
  102|  60.7k|    Type b = v;
  103|  60.7k|    return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (103:12): [True: 16.5k, False: 44.1k]
  |  Branch (103:25): [True: 13.5k, False: 30.5k]
  ------------------
  104|  60.7k|  }
_ZN2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  8.79k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  67.0k|  {
  427|  67.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  67.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  67.0k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   292k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  67.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 35.1k, False: 29.7k]
  |  |  |  Branch (349:45): [True: 28.6k, False: 1.11k]
  |  |  |  Branch (349:45): [True: 774, False: 339]
  |  |  |  Branch (349:45): [True: 64.8k, False: 2.15k]
  |  |  ------------------
  ------------------
  429|  67.0k|		  (this->is_null () ||
  430|  67.0k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  67.0k|		   neuter (c)));
  432|  67.0k|  }
_ZNK2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  17.5M|  {
  417|  17.5M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.5M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  17.5M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  17.5M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.16k, False: 17.5M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|  2.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  17.5M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  17.5M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.8M, False: 715k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  16.8M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.8M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   715k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   715k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 715k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   715k|    return_trace (true);
  ------------------
  |  |  349|   715k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   715k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   715k|  }
_ZNK2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  10.5k|  {
  437|  10.5k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  10.5k|    return c->try_set (this, 0);
  439|  10.5k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_7LangSysEEENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_6ScriptEEEEbP21hb_sanitize_context_tDpOT_:
  717|  64.5k|  {
  718|  64.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  64.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  64.5k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  64.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 942, False: 63.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    942|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    942|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  63.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  63.6k|    unsigned int count = len;
  722|  17.5M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 17.4M, False: 62.1k]
  ------------------
  723|  17.4M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  17.4M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.41k, False: 17.4M]
  |  |  ------------------
  ------------------
  724|  1.41k|	return_trace (false);
  ------------------
  |  |  349|  65.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  62.1k|    return_trace (true);
  ------------------
  |  |  349|  62.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  62.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  63.6k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_7LangSysEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  64.5k|  {
  730|  64.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  64.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  64.5k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   129k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64.4k, False: 100]
  |  |  |  Branch (349:45): [True: 63.6k, False: 842]
  |  |  ------------------
  ------------------
  732|  64.5k|  }
_ZNK2OT8OffsetToINS_7LangSysENS_7IntTypeItLj2EEELb1EE8sanitizeIJPKNS_25Record_sanitize_closure_tEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  17.4M|  {
  427|  17.4M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.4M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  17.4M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  70.5M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.4M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 16.7M, False: 685k]
  |  |  |  Branch (349:45): [True: 675k, False: 9.39k]
  |  |  |  Branch (349:45): [True: 8.01k, False: 1.37k]
  |  |  |  Branch (349:45): [True: 17.4M, False: 10]
  |  |  ------------------
  ------------------
  429|  17.4M|		  (this->is_null () ||
  430|  17.4M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  17.4M|		   neuter (c)));
  432|  17.4M|  }
_ZNK2OT13SortedArrayOfINS_6RecordINS_6ScriptEEENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|   385k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT8OffsetToINS_6ScriptENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.96M|  {
  326|  2.96M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.54M, False: 413k]
  |  |  ------------------
  ------------------
  327|   413k|    return StructAtOffset<const Type> (base, *this);
  328|  2.96M|  }
_ZN2OT12_hb_has_nullINS_6ScriptELb1EE8get_nullEv:
  308|  2.54M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  2.54M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_6ScriptENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.77k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEES3_E8get_sizeEv:
  635|   202k|  { return len.static_size + len * Type::static_size; }
_ZN2OT7ArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEES3_E9serializeEP22hb_serialize_context_tjb:
  672|  1.63k|  {
  673|  1.63k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  1.63k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  674|  1.63k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  675|  1.63k|    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  676|  1.63k|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  677|  1.63k|    return_trace (true);
  ------------------
  |  |  349|  1.63k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  678|  1.63k|  }
_ZNK2OT7HBFixedINS_7IntTypeIsLj2EEELj14EE6to_intEv:
  152|  10.6M|  typename Type::type to_int () const { return Type::v; }
_ZNK2OT7IntTypeIaLj1EEcviEv:
   68|   304k|  operator typename std::conditional<std::is_signed<Type>::value, signed, unsigned>::type () const { return v; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EEENS3_ItLj2EEEEixEi:
  620|  72.3k|  {
  621|  72.3k|    unsigned int i = (unsigned int) i_;
  622|  72.3k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  72.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.47k, False: 70.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  1.47k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  70.8k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  70.8k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  70.8k|    return arrayZ[i];
  625|  72.3k|  }
_ZN2OTplIPKNS_14VariationStoreELPv0EEERKNS_7VarDataERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  72.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7VarDataENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  72.3k|  {
  326|  72.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  72.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 46.3k, False: 26.0k]
  |  |  ------------------
  ------------------
  327|  26.0k|    return StructAtOffset<const Type> (base, *this);
  328|  72.3k|  }
_ZN2OT12_hb_has_nullINS_7VarDataELb1EE8get_nullEv:
  308|  46.3k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  46.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_12ConditionSetELPv0EEERKNS_9ConditionERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  2.46k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  2.46k|  {
  326|  2.46k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 329, False: 2.14k]
  |  |  ------------------
  ------------------
  327|  2.14k|    return StructAtOffset<const Type> (base, *this);
  328|  2.46k|  }
_ZN2OT12_hb_has_nullINS_9ConditionELb1EE8get_nullEv:
  308|    329|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|    329|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.28k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EEENS3_ItLj2EEEE8sanitizeIJPKNS_12ConditionSetEEEEbP21hb_sanitize_context_tDpOT_:
  717|  3.15k|  {
  718|  3.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  3.15k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  3.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.04k, False: 1.10k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.10k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.10k|    unsigned int count = len;
  722|  8.93k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 7.87k, False: 1.06k]
  ------------------
  723|  7.87k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  7.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40, False: 7.83k]
  |  |  ------------------
  ------------------
  724|     40|	return_trace (false);
  ------------------
  |  |  349|  1.14k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     40|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.06k|    return_trace (true);
  ------------------
  |  |  349|  1.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.10k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EEENS3_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  3.15k|  {
  730|  3.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  3.15k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  4.43k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.28k, False: 1.86k]
  |  |  |  Branch (349:45): [True: 1.10k, False: 178]
  |  |  ------------------
  ------------------
  732|  3.15k|  }
_ZNK2OT8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.87k|  {
  427|  7.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.87k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  36.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.98k, False: 3.88k]
  |  |  |  Branch (349:45): [True: 2.56k, False: 1.32k]
  |  |  |  Branch (349:45): [True: 1.28k, False: 37]
  |  |  |  Branch (349:45): [True: 7.87k, False: 3]
  |  |  ------------------
  ------------------
  429|  7.87k|		  (this->is_null () ||
  430|  7.87k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.87k|		   neuter (c)));
  432|  7.87k|  }
_ZNK2OT8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.87k|  {
  417|  7.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.87k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 7.87k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.87k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.98k, False: 3.88k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.88k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.88k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.88k|    return_trace (true);
  ------------------
  |  |  349|  3.88k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.88k|  }
_ZNK2OT8OffsetToINS_9ConditionENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.32k|  {
  437|  1.32k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.32k|    return c->try_set (this, 0);
  439|  1.32k|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  34.0k|  {
  326|  34.0k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  34.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 55, False: 34.0k]
  |  |  ------------------
  ------------------
  327|  34.0k|    return StructAtOffset<const Type> (base, *this);
  328|  34.0k|  }
_ZN2OT8OffsetToINS_7FeatureENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.82k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  8.45k|  {
  427|  8.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  8.45k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  39.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.28k, False: 4.17k]
  |  |  |  Branch (349:45): [True: 2.32k, False: 1.84k]
  |  |  |  Branch (349:45): [True: 1.82k, False: 22]
  |  |  |  Branch (349:45): [True: 8.45k, False: 4]
  |  |  ------------------
  ------------------
  429|  8.45k|		  (this->is_null () ||
  430|  8.45k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  8.45k|		   neuter (c)));
  432|  8.45k|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  8.45k|  {
  417|  8.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  8.45k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  8.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 8.45k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  8.45k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  8.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.28k, False: 4.17k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.17k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.17k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.17k|    return_trace (true);
  ------------------
  |  |  349|  4.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.17k|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.84k|  {
  437|  1.84k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.84k|    return c->try_set (this, 0);
  439|  1.84k|  }
_ZN2OTplIPKNS_24FeatureTableSubstitutionELPv0EEERKNS_7FeatureERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  34.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_30FeatureTableSubstitutionRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_24FeatureTableSubstitutionEEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.17k|  {
  718|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.17k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 86, False: 1.09k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     86|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     86|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.09k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.09k|    unsigned int count = len;
  722|  9.52k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 8.47k, False: 1.05k]
  ------------------
  723|  8.47k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  8.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37, False: 8.43k]
  |  |  ------------------
  ------------------
  724|     37|	return_trace (false);
  ------------------
  |  |  349|  1.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     37|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.05k|    return_trace (true);
  ------------------
  |  |  349|  1.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.09k|  }
_ZNK2OT7ArrayOfINS_30FeatureTableSubstitutionRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.17k|  {
  730|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.17k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.15k, False: 21]
  |  |  |  Branch (349:45): [True: 1.09k, False: 65]
  |  |  ------------------
  ------------------
  732|  1.17k|  }
_ZNK2OT8OffsetToINS_24FeatureTableSubstitutionENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  35.0k|  {
  326|  35.0k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  35.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 792, False: 34.2k]
  |  |  ------------------
  ------------------
  327|  34.2k|    return StructAtOffset<const Type> (base, *this);
  328|  35.0k|  }
_ZN2OT12_hb_has_nullINS_24FeatureTableSubstitutionELb1EE8get_nullEv:
  308|    792|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|    792|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  14.4k|  {
  326|  14.4k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  14.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.2k, False: 3.17k]
  |  |  ------------------
  ------------------
  327|  3.17k|    return StructAtOffset<const Type> (base, *this);
  328|  14.4k|  }
_ZN2OT12_hb_has_nullINS_12ConditionSetELb1EE8get_nullEv:
  308|  11.2k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  11.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.98k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_24FeatureTableSubstitutionENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.89k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.37k|  {
  427|  6.37k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.37k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.37k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  30.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.19k, False: 3.15k]
  |  |  |  Branch (349:45): [True: 1.06k, False: 2.08k]
  |  |  |  Branch (349:45): [True: 1.98k, False: 102]
  |  |  |  Branch (349:45): [True: 6.34k, False: 28]
  |  |  ------------------
  ------------------
  429|  6.37k|		  (this->is_null () ||
  430|  6.37k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.37k|		   neuter (c)));
  432|  6.37k|  }
_ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.37k|  {
  417|  6.37k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.37k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.37k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 6.34k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     28|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.34k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.19k, False: 3.15k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.15k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.15k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.15k|    return_trace (true);
  ------------------
  |  |  349|  3.15k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.15k|  }
_ZNK2OT8OffsetToINS_12ConditionSetENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.08k|  {
  437|  2.08k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.08k|    return c->try_set (this, 0);
  439|  2.08k|  }
_ZNK2OT8OffsetToINS_24FeatureTableSubstitutionENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.24k|  {
  427|  6.24k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.24k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.24k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  29.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.18k, False: 3.04k]
  |  |  |  Branch (349:45): [True: 1.05k, False: 1.99k]
  |  |  |  Branch (349:45): [True: 1.89k, False: 95]
  |  |  |  Branch (349:45): [True: 6.23k, False: 9]
  |  |  ------------------
  ------------------
  429|  6.24k|		  (this->is_null () ||
  430|  6.24k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.24k|		   neuter (c)));
  432|  6.24k|  }
_ZNK2OT8OffsetToINS_24FeatureTableSubstitutionENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.24k|  {
  417|  6.24k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.24k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.24k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 6.23k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.23k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.23k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.18k, False: 3.04k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.04k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.04k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.04k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.04k|    return_trace (true);
  ------------------
  |  |  349|  3.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.04k|  }
_ZNK2OT8OffsetToINS_24FeatureTableSubstitutionENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.99k|  {
  437|  1.99k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.99k|    return c->try_set (this, 0);
  439|  1.99k|  }
_ZN2OTplIPKNS_17FeatureVariationsELPv0EEERKNS_12ConditionSetERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  14.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_22FeatureVariationRecordENS_7IntTypeIjLj4EEEEixEi:
  620|  35.0k|  {
  621|  35.0k|    unsigned int i = (unsigned int) i_;
  622|  35.0k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  35.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 35.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  35.0k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  35.0k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  35.0k|    return arrayZ[i];
  625|  35.0k|  }
_ZN2OTplIPKNS_17FeatureVariationsELPv0EEERKNS_24FeatureTableSubstitutionERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  35.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_22FeatureVariationRecordENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_17FeatureVariationsEEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.65k|  {
  718|  1.65k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.65k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.65k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.65k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 76, False: 1.57k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     76|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     76|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.57k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.57k|    unsigned int count = len;
  722|  7.71k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.37k, False: 1.34k]
  ------------------
  723|  6.37k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 234, False: 6.13k]
  |  |  ------------------
  ------------------
  724|    234|	return_trace (false);
  ------------------
  |  |  349|  1.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    234|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.34k|    return_trace (true);
  ------------------
  |  |  349|  1.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.57k|  }
_ZNK2OT7ArrayOfINS_22FeatureVariationRecordENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.65k|  {
  730|  1.65k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.65k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.65k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  3.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.63k, False: 12]
  |  |  |  Branch (349:45): [True: 1.57k, False: 64]
  |  |  ------------------
  ------------------
  732|  1.65k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  23.8M|  {
  326|  23.8M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  23.8M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.19M, False: 22.6M]
  |  |  ------------------
  ------------------
  327|  22.6M|    return StructAtOffset<const Type> (base, *this);
  328|  23.8M|  }
_ZNK2OT8OffsetToINS_6DeviceENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  1.80M|  {
  326|  1.80M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.80M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.79M, False: 3.79k]
  |  |  ------------------
  ------------------
  327|  3.79k|    return StructAtOffset<const Type> (base, *this);
  328|  1.80M|  }
_ZN2OT12_hb_has_nullINS_6DeviceELb1EE8get_nullEv:
  308|  1.79M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.79M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_12LigCaretListELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EEES4_EixEi:
  620|      9|  {
  621|      9|    unsigned int i = (unsigned int) i_;
  622|      9|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|      9|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 4]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      5|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|      4|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|      4|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|      4|    return arrayZ[i];
  625|      9|  }
_ZN2OTplIPKNS_12LigCaretListELPv0EEERKNS_8LigGlyphERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|      9|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_8LigGlyphENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|      9|  {
  326|      9|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|      9|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 3]
  |  |  ------------------
  ------------------
  327|      3|    return StructAtOffset<const Type> (base, *this);
  328|      9|  }
_ZN2OT12_hb_has_nullINS_8LigGlyphELb1EE8get_nullEv:
  308|      6|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|      6|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  1.32k|  {
  326|  1.32k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.32k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.06k, False: 260]
  |  |  ------------------
  ------------------
  327|    260|    return StructAtOffset<const Type> (base, *this);
  328|  1.32k|  }
_ZN2OT12_hb_has_nullINS_12LigCaretListELb1EE8get_nullEv:
  308|  1.28k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.28k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_12LigCaretListENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|    238|  {
  326|    238|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    238|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 228, False: 10]
  |  |  ------------------
  ------------------
  327|     10|    return StructAtOffset<const Type> (base, *this);
  328|    238|  }
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_12LigCaretListERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.32k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4GDEFELPv0EEERKNS_12LigCaretListERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|    238|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKvLPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS6_NS_7IntTypeItLj2EEELb1EEE:
  337|   623k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEEEixEj:
  466|   473k|  {
  467|   473k|    return arrayZ[i];
  468|   473k|  }
_ZN2OTplIPKNS_14ContextFormat3ELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   200k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEEE8as_arrayEj:
  482|   200k|  { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEES6_E8get_sizeEv:
  635|  3.78M|  { return len.static_size + len * Type::static_size; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEES6_EixEi:
  620|  47.0k|  {
  621|  47.0k|    unsigned int i = (unsigned int) i_;
  622|  47.0k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  47.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 47.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  47.0k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  47.0k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  47.0k|    return arrayZ[i];
  625|  47.0k|  }
_ZN2OTplIPKNS_19ChainContextFormat3ELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  47.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_19ChainContextFormat3EEEEbP21hb_sanitize_context_tDpOT_:
  717|  14.0k|  {
  718|  14.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  14.0k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  14.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 422, False: 13.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    422|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    422|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  13.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  13.6k|    unsigned int count = len;
  722|   415k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 402k, False: 13.5k]
  ------------------
  723|   402k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   402k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 112, False: 402k]
  |  |  ------------------
  ------------------
  724|    112|	return_trace (false);
  ------------------
  |  |  349|  13.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    112|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  13.5k|    return_trace (true);
  ------------------
  |  |  349|  13.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  13.6k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  35.0k|  {
  730|  35.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  35.0k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  69.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 34.8k, False: 210]
  |  |  |  Branch (349:45): [True: 34.3k, False: 562]
  |  |  ------------------
  ------------------
  732|  35.0k|  }
_ZNK2OT7ArrayOfINS_12LookupRecordENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   475k|  {
  718|   475k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   475k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   475k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   475k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.12k, False: 474k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   474k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   474k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   474k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_12LookupRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|   475k|  {
  730|   475k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   475k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   475k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   950k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   475k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 475k, False: 227]
  |  |  |  Branch (349:45): [True: 474k, False: 901]
  |  |  ------------------
  ------------------
  732|   475k|  }
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_18RecordListOfScriptERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   618k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   618k|  {
  326|   618k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   618k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 56.0k, False: 562k]
  |  |  ------------------
  ------------------
  327|   562k|    return StructAtOffset<const Type> (base, *this);
  328|   618k|  }
_ZN2OT12_hb_has_nullINS_18RecordListOfScriptELb1EE8get_nullEv:
  308|  63.7k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  63.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_18RecordListOfScriptERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  14.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  14.5k|  {
  326|  14.5k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.67k, False: 6.84k]
  |  |  ------------------
  ------------------
  327|  6.84k|    return StructAtOffset<const Type> (base, *this);
  328|  14.5k|  }
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_12RecordListOfINS_7FeatureEEERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  10.0M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  10.0M|  {
  326|  10.0M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  10.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 277k, False: 9.79M]
  |  |  ------------------
  ------------------
  327|  9.79M|    return StructAtOffset<const Type> (base, *this);
  328|  10.0M|  }
_ZN2OT12_hb_has_nullINS_12RecordListOfINS_7FeatureEEELb1EE8get_nullEv:
  308|   280k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   280k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_12RecordListOfINS_7FeatureEEERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj3EEELb1EEE:
  337|  83.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  83.5k|  {
  326|  83.5k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  83.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.01k, False: 80.5k]
  |  |  ------------------
  ------------------
  327|  80.5k|    return StructAtOffset<const Type> (base, *this);
  328|  83.5k|  }
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_16List16OfOffsetToINS_6LookupENS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToIS9_S8_Lb1EEE:
  337|  7.88M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6LookupENS_7IntTypeItLj2EEEEES4_Lb1EEclEPKv:
  325|  7.88M|  {
  326|  7.88M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  7.88M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.67k, False: 7.88M]
  |  |  ------------------
  ------------------
  327|  7.88M|    return StructAtOffset<const Type> (base, *this);
  328|  7.88M|  }
_ZN2OT12_hb_has_nullINS_16List16OfOffsetToINS_6LookupENS_7IntTypeItLj2EEEEELb1EE8get_nullEv:
  308|  3.67k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  3.67k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_16List16OfOffsetToINS_6LookupENS_7IntTypeIjLj3EEEEERKT_RKNS_8OffsetToIS9_S8_Lb1EEE:
  337|  69.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6LookupENS_7IntTypeIjLj3EEEEES4_Lb1EEclEPKv:
  325|  69.8k|  {
  326|  69.8k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  69.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 637, False: 69.2k]
  |  |  ------------------
  ------------------
  327|  69.2k|    return StructAtOffset<const Type> (base, *this);
  328|  69.8k|  }
_ZN2OT12_hb_has_nullINS_16List16OfOffsetToINS_6LookupENS_7IntTypeIjLj3EEEEELb1EE8get_nullEv:
  308|    637|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|    637|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT16List16OfOffsetToINS_6LookupENS_7IntTypeItLj2EEEEixEi:
  755|  7.82M|  {
  756|  7.82M|    unsigned int i = (unsigned int) i_;
  757|  7.82M|    if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  259|  7.82M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.14M, False: 5.67M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  124|  2.14M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  758|  5.67M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  5.67M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  759|  5.67M|    return this+this->arrayZ[i];
  760|  7.82M|  }
_ZN2OTplIPKNS_16List16OfOffsetToINS_6LookupENS_7IntTypeItLj2EEEEELPv0EEERKS2_RKT_RKNS_8OffsetToIS2_S4_Lb1EEE:
  337|  5.67M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6LookupENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  5.67M|  {
  326|  5.67M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  5.67M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.05M, False: 4.62M]
  |  |  ------------------
  ------------------
  327|  4.62M|    return StructAtOffset<const Type> (base, *this);
  328|  5.67M|  }
_ZN2OT12_hb_has_nullINS_6LookupELb1EE8get_nullEv:
  308|  1.06M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.06M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT16List16OfOffsetToINS_6LookupENS_7IntTypeIjLj3EEEEixEi:
  755|  68.5k|  {
  756|  68.5k|    unsigned int i = (unsigned int) i_;
  757|  68.5k|    if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  259|  68.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.8k, False: 50.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  124|  17.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  758|  50.6k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  50.6k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  759|  50.6k|    return this+this->arrayZ[i];
  760|  68.5k|  }
_ZN2OTplIPKNS_16List16OfOffsetToINS_6LookupENS_7IntTypeIjLj3EEEEELPv0EEERKS2_RKT_RKNS_8OffsetToIS2_S4_Lb1EEE:
  337|  50.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6LookupENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  50.6k|  {
  326|  50.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  50.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.0k, False: 39.6k]
  |  |  ------------------
  ------------------
  327|  39.6k|    return StructAtOffset<const Type> (base, *this);
  328|  50.6k|  }
_ZN2OTplIPKNS_8GSUBGPOSELPv0EEERKNS_17FeatureVariationsERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  59.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_17FeatureVariationsENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  59.4k|  {
  326|  59.4k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  59.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.2k, False: 48.2k]
  |  |  ------------------
  ------------------
  327|  48.2k|    return StructAtOffset<const Type> (base, *this);
  328|  59.4k|  }
_ZN2OT12_hb_has_nullINS_17FeatureVariationsELb1EE8get_nullEv:
  308|  11.2k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  11.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_6RecordINS_6ScriptEEENS_7IntTypeItLj2EEEEixEi:
  620|  2.96M|  {
  621|  2.96M|    unsigned int i = (unsigned int) i_;
  622|  2.96M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.54M, False: 416k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  2.54M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   416k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   416k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   416k|    return arrayZ[i];
  625|  2.96M|  }
_ZN2OTplIPKNS_12RecordListOfINS_6ScriptEEELPv0EEERKS2_RKT_RKNS_8OffsetToIS2_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.96M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT13SortedArrayOfINS_6RecordINS_6ScriptEEENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|   385k|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT7ArrayOfINS_6RecordINS_7FeatureEEENS_7IntTypeItLj2EEEEixEi:
  620|  10.3M|  {
  621|  10.3M|    unsigned int i = (unsigned int) i_;
  622|  10.3M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  10.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.31M, False: 4.05M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  6.31M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  4.05M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  4.05M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  4.05M|    return arrayZ[i];
  625|  10.3M|  }
_ZN2OTplIPKNS_12RecordListOfINS_7FeatureEEELPv0EEERKS2_RKT_RKNS_8OffsetToIS2_NS_7IntTypeItLj2EEELb1EEE:
  337|   326k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKvLPv0EEERKNS_6DeviceERKT_RKNS_8OffsetToIS4_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.80M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16SinglePosFormat1ELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|  9.57k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEEcvPKT_IS2_EEv:
  478|  13.8k|  template <typename T> operator const T * () const { return arrayZ; }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEE8as_arrayEj:
  482|  1.88M|  { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16SinglePosFormat2ELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|  48.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  24.3M|  {
  427|  24.3M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.3M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  24.3M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   110M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.3M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.6M, False: 13.6M]
  |  |  |  Branch (349:45): [True: 13.6M, False: 5.26k]
  |  |  |  Branch (349:45): [True: 5.03k, False: 226]
  |  |  |  Branch (349:45): [True: 24.3M, False: 22]
  |  |  ------------------
  ------------------
  429|  24.3M|		  (this->is_null () ||
  430|  24.3M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  24.3M|		   neuter (c)));
  432|  24.3M|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  24.3M|  {
  417|  24.3M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.3M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  24.3M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  24.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 24.3M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     22|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  24.3M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  24.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.6M, False: 13.6M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  10.6M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.6M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  13.6M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  13.6M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 13.6M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  13.6M|    return_trace (true);
  ------------------
  |  |  349|  13.6M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.6M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  13.6M|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  5.26k|  {
  437|  5.26k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  5.26k|    return c->try_set (this, 0);
  439|  5.26k|  }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  5.03k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   684k|  {
  326|   684k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   684k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 149k, False: 534k]
  |  |  ------------------
  ------------------
  327|   534k|    return StructAtOffset<const Type> (base, *this);
  328|   684k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl6AnchorELb1EE8get_nullEv:
  308|   149k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   149k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl15EntryExitRecordENS_7IntTypeItLj2EEEEixEi:
  620|  1.96M|  {
  621|  1.96M|    unsigned int i = (unsigned int) i_;
  622|  1.96M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  1.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.37M, False: 596k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  1.37M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   596k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   596k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   596k|    return arrayZ[i];
  625|  1.96M|  }
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl15EntryExitRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS2_17CursivePosFormat1EEEEbP21hb_sanitize_context_tDpOT_:
  717|  8.25k|  {
  718|  8.25k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.25k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  8.25k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  8.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 159, False: 8.10k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    159|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    159|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  8.10k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  8.10k|    unsigned int count = len;
  722|   616k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 608k, False: 8.03k]
  ------------------
  723|   608k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   608k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 68, False: 608k]
  |  |  ------------------
  ------------------
  724|     68|	return_trace (false);
  ------------------
  |  |  349|  8.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     68|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  8.03k|    return_trace (true);
  ------------------
  |  |  349|  8.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  8.10k|  }
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl15EntryExitRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  8.25k|  {
  730|  8.25k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.25k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  8.25k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  16.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.25k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.21k, False: 43]
  |  |  |  Branch (349:45): [True: 8.10k, False: 116]
  |  |  ------------------
  ------------------
  732|  8.25k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl17CursivePosFormat1ELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.96M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl17CursivePosFormat1ELPv0EEERKNS2_6AnchorERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   447k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_6Layout9GPOS_impl6AnchorENS_7IntTypeItLj2EEELb1EEEEixEj:
  466|  12.1M|  {
  467|  12.1M|    return arrayZ[i];
  468|  12.1M|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl12AnchorMatrixELPv0EEERKNS2_6AnchorERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  70.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl10MarkRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS2_9MarkArrayEEEEbP21hb_sanitize_context_tDpOT_:
  717|  16.7k|  {
  718|  16.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  16.7k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  16.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.48k, False: 15.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  15.2k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  15.2k|    unsigned int count = len;
  722|  11.0M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 11.0M, False: 15.0k]
  ------------------
  723|  11.0M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  11.0M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 131, False: 11.0M]
  |  |  ------------------
  ------------------
  724|    131|	return_trace (false);
  ------------------
  |  |  349|  15.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    131|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  15.0k|    return_trace (true);
  ------------------
  |  |  349|  15.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  15.2k|  }
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl10MarkRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  16.7k|  {
  730|  16.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  16.7k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  32.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.6k, False: 1.05k]
  |  |  |  Branch (349:45): [True: 15.2k, False: 431]
  |  |  ------------------
  ------------------
  732|  16.7k|  }
_ZNK2OT7ArrayOfINS_6Layout9GPOS_impl10MarkRecordENS_7IntTypeItLj2EEEEixEi:
  620|   166k|  {
  621|   166k|    unsigned int i = (unsigned int) i_;
  622|   166k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   166k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 127k, False: 38.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   127k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  38.6k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  38.6k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  38.6k|    return arrayZ[i];
  625|   166k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl9MarkArrayELPv0EEERKNS2_6AnchorERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   166k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat1_3INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  4.32M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  620|  2.41M|  {
  621|  2.41M|    unsigned int i = (unsigned int) i_;
  622|  2.41M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.41M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 939k, False: 1.47M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   939k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  1.47M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.47M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  1.47M|    return arrayZ[i];
  625|  2.41M|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat1_3INS1_10SmallTypesEEELPv0EEERKNS2_7PairSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.41M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.41M|  {
  326|  2.41M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.41M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.80M, False: 612k]
  |  |  ------------------
  ------------------
  327|   612k|    return StructAtOffset<const Type> (base, *this);
  328|  2.41M|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEELb1EE8get_nullEv:
  308|  1.80M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.80M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat2_4INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  42.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat2_4INS1_10SmallTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  43.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat1_3INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   221k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  2.96M|  {
  326|  2.96M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.96M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 574k, False: 2.38M]
  |  |  ------------------
  ------------------
  327|  2.38M|    return StructAtOffset<const Type> (base, *this);
  328|  2.96M|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEEixEi:
  620|   186k|  {
  621|   186k|    unsigned int i = (unsigned int) i_;
  622|   186k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   186k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40.6k, False: 145k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  40.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   145k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   145k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   145k|    return arrayZ[i];
  625|   186k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat1_3INS1_11MediumTypesEEELPv0EEERKNS2_7PairSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   186k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|   186k|  {
  326|   186k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   186k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44.3k, False: 142k]
  |  |  ------------------
  ------------------
  327|   142k|    return StructAtOffset<const Type> (base, *this);
  328|   186k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEELb1EE8get_nullEv:
  308|  44.3k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  44.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat2_4INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   102k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl16PairPosFormat2_4INS1_11MediumTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  46.1k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  3.43M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  1.50M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   314k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   236k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   205k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  70.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_16ContextFormat1_4INS_6Layout10SmallTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   608k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E4iterEv:
  647|   990k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8as_arrayEv:
  642|   990k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_7RuleSetINS_6Layout10SmallTypesEEELPv0EEERKNS_4RuleIS3_EERKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|  1.88M|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  1.88M|  {
  326|  1.88M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.88M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99.0k, False: 1.78M]
  |  |  ------------------
  ------------------
  327|  1.78M|    return StructAtOffset<const Type> (base, *this);
  328|  1.88M|  }
_ZN2OT12_hb_has_nullINS_4RuleINS_6Layout10SmallTypesEEELb1EE8get_nullEv:
  308|  99.0k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  99.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   969k|  {
  326|   969k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   969k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 167k, False: 801k]
  |  |  ------------------
  ------------------
  327|   801k|    return StructAtOffset<const Type> (base, *this);
  328|   969k|  }
_ZN2OT12_hb_has_nullINS_7RuleSetINS_6Layout10SmallTypesEEELb1EE8get_nullEv:
  308|   178k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   178k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   623k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|   430k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_16ContextFormat1_4INS_6Layout11MediumTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  33.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E4iterEv:
  647|  32.3k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8as_arrayEv:
  642|  32.3k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_7RuleSetINS_6Layout11MediumTypesEEELPv0EEERKNS_4RuleIS3_EERKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|  29.6k|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  29.6k|  {
  326|  29.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.63k, False: 27.9k]
  |  |  ------------------
  ------------------
  327|  27.9k|    return StructAtOffset<const Type> (base, *this);
  328|  29.6k|  }
_ZN2OT12_hb_has_nullINS_4RuleINS_6Layout11MediumTypesEEELb1EE8get_nullEv:
  308|  1.63k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.63k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  32.3k|  {
  326|  32.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  32.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.95k, False: 27.4k]
  |  |  ------------------
  ------------------
  327|  27.4k|    return StructAtOffset<const Type> (base, *this);
  328|  32.3k|  }
_ZN2OT12_hb_has_nullINS_7RuleSetINS_6Layout11MediumTypesEEELb1EE8get_nullEv:
  308|  4.95k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  4.95k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  13.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  24.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  21.4k|  {
  326|  21.4k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  21.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.3k, False: 10.0k]
  |  |  ------------------
  ------------------
  327|  10.0k|    return StructAtOffset<const Type> (base, *this);
  328|  21.4k|  }
_ZN2OTplIPKNS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   649k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E4iterEv:
  647|   852k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8as_arrayEv:
  642|   852k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeItLj2EEES2_E8get_sizeEv:
  814|  7.46M|  { return lenP1.static_size + get_length () * Type::static_size; }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeItLj2EEES2_E10get_lengthEv:
  816|  7.46M|  unsigned get_length () const { return lenP1 ? lenP1 - 1 : 0; }
  ------------------
  |  Branch (816:41): [True: 619k, False: 6.84M]
  ------------------
_ZN2OTplIPKNS_12ChainRuleSetINS_6Layout10SmallTypesEEELPv0EEERKNS_9ChainRuleIS3_EERKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|  7.07M|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  7.07M|  {
  326|  7.07M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  7.07M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.04M, False: 2.02M]
  |  |  ------------------
  ------------------
  327|  2.02M|    return StructAtOffset<const Type> (base, *this);
  328|  7.07M|  }
_ZN2OT12_hb_has_nullINS_9ChainRuleINS_6Layout10SmallTypesEEELb1EE8get_nullEv:
  308|  5.04M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  5.04M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   820k|  {
  326|   820k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   820k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 352k, False: 468k]
  |  |  ------------------
  ------------------
  327|   468k|    return StructAtOffset<const Type> (base, *this);
  328|   820k|  }
_ZN2OT12_hb_has_nullINS_12ChainRuleSetINS_6Layout10SmallTypesEEELb1EE8get_nullEv:
  308|   373k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   373k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   314k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|   665k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|   438k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E4iterEv:
  647|   435k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8as_arrayEv:
  642|   435k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE8get_sizeEv:
  635|  1.14M|  { return len.static_size + len * Type::static_size; }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE8get_sizeEv:
  814|   571k|  { return lenP1.static_size + get_length () * Type::static_size; }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE10get_lengthEv:
  816|   571k|  unsigned get_length () const { return lenP1 ? lenP1 - 1 : 0; }
  ------------------
  |  Branch (816:41): [True: 324k, False: 247k]
  ------------------
_ZN2OTplIPKNS_12ChainRuleSetINS_6Layout11MediumTypesEEELPv0EEERKNS_9ChainRuleIS3_EERKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|   493k|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   493k|  {
  326|   493k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   493k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99.4k, False: 394k]
  |  |  ------------------
  ------------------
  327|   394k|    return StructAtOffset<const Type> (base, *this);
  328|   493k|  }
_ZN2OT12_hb_has_nullINS_9ChainRuleINS_6Layout11MediumTypesEEELb1EE8get_nullEv:
  308|  99.4k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  99.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|   435k|  {
  326|   435k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   435k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18.8k, False: 416k]
  |  |  ------------------
  ------------------
  327|   416k|    return StructAtOffset<const Type> (base, *this);
  328|   435k|  }
_ZN2OT12_hb_has_nullINS_12ChainRuleSetINS_6Layout11MediumTypesEEELb1EE8get_nullEv:
  308|  18.8k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  18.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS2_6Common8CoverageERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  11.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS_8ClassDefERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  98.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  31.8k|  {
  326|  31.8k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  31.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.1k, False: 10.6k]
  |  |  ------------------
  ------------------
  327|  10.6k|    return StructAtOffset<const Type> (base, *this);
  328|  31.8k|  }
_ZN2OTplIPKNS_16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEEELPv0EEERKNS3_17PosLookupSubTableERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj4EEELb1EEE:
  337|  3.78k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  3.78k|  {
  326|  3.78k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  3.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.50k, False: 2.27k]
  |  |  ------------------
  ------------------
  327|  2.27k|    return StructAtOffset<const Type> (base, *this);
  328|  3.78k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl17PosLookupSubTableELb1EE8get_nullEv:
  308|   137k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   137k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_EixEi:
  620|   475k|  {
  621|   475k|    unsigned int i = (unsigned int) i_;
  622|   475k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   475k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 475k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|    153|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   475k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   475k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   475k|    return arrayZ[i];
  625|   475k|  }
_ZN2OTplIPKNS_6LookupELPv0EEERKNS_6Layout9GPOS_impl17PosLookupSubTableERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   475k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   475k|  {
  326|   475k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   475k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 136k, False: 339k]
  |  |  ------------------
  ------------------
  327|   339k|    return StructAtOffset<const Type> (base, *this);
  328|   475k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  64.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  73.2k|  {
  326|  73.2k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  73.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.9k, False: 55.2k]
  |  |  ------------------
  ------------------
  327|  55.2k|    return StructAtOffset<const Type> (base, *this);
  328|  73.2k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl9MarkArrayELb1EE8get_nullEv:
  308|  73.1k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  73.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_12AnchorMatrixERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  64.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   124k|  {
  326|   124k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   124k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22.3k, False: 102k]
  |  |  ------------------
  ------------------
  327|   102k|    return StructAtOffset<const Type> (base, *this);
  328|   124k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl12AnchorMatrixELb1EE8get_nullEv:
  308|  46.4k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  46.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  41.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  93.2k|  {
  326|  93.2k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  93.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 55.2k, False: 38.0k]
  |  |  ------------------
  ------------------
  327|  38.0k|    return StructAtOffset<const Type> (base, *this);
  328|  93.2k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_12AnchorMatrixERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  41.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  44.5k|  {
  326|  44.5k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  44.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24.1k, False: 20.3k]
  |  |  ------------------
  ------------------
  327|  20.3k|    return StructAtOffset<const Type> (base, *this);
  328|  44.5k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_13LigatureArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  30.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  30.6k|  {
  326|  30.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  30.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25.4k, False: 5.19k]
  |  |  ------------------
  ------------------
  327|  5.19k|    return StructAtOffset<const Type> (base, *this);
  328|  30.6k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GPOS_impl13LigatureArrayELb1EE8get_nullEv:
  308|  26.5k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  26.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT16List16OfOffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEEEixEi:
  755|  91.9k|  {
  756|  91.9k|    unsigned int i = (unsigned int) i_;
  757|  91.9k|    if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  259|  91.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37.7k, False: 54.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= this->len)) return Null (Type);
  ------------------
  |  |  124|  37.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  758|  54.1k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  54.1k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  759|  54.1k|    return this+this->arrayZ[i];
  760|  91.9k|  }
_ZN2OTplIPKNS_16List16OfOffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEEEELPv0EEERKS4_RKT_RKNS_8OffsetToIS4_S6_Lb1EEE:
  337|  54.1k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.74k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_13LigatureArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  61.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  61.2k|  {
  326|  61.2k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  61.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.04k, False: 60.1k]
  |  |  ------------------
  ------------------
  327|  60.1k|    return StructAtOffset<const Type> (base, *this);
  328|  61.2k|  }
_ZN2OTplIPKNS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  48.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  5.51k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_12AnchorMatrixERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|  5.51k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_9MarkArrayERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  2.99k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_12AnchorMatrixERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  2.99k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_EixEi:
  620|   969k|  {
  621|   969k|    unsigned int i = (unsigned int) i_;
  622|   969k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   969k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 86.5k, False: 882k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  86.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   882k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   882k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   882k|    return arrayZ[i];
  625|   969k|  }
_ZN2OTplIPKNS_16ContextFormat1_4INS_6Layout10SmallTypesEEELPv0EEERKNS_7RuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   542k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS_7RuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   426k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEEixEi:
  620|  32.3k|  {
  621|  32.3k|    unsigned int i = (unsigned int) i_;
  622|  32.3k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  32.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.22k, False: 28.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  4.22k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  28.1k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  28.1k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  28.1k|    return arrayZ[i];
  625|  32.3k|  }
_ZN2OTplIPKNS_16ContextFormat1_4INS_6Layout11MediumTypesEEELPv0EEERKNS_7RuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|  32.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIjLj3EEEE8as_arrayEj:
  482|  29.6k|  { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEEixEi:
  620|  21.4k|  {
  621|  21.4k|    unsigned int i = (unsigned int) i_;
  622|  21.4k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  21.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.85k, False: 18.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  2.85k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  18.5k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  18.5k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  18.5k|    return arrayZ[i];
  625|  21.4k|  }
_ZN2OTplIPKNS_16ContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS_7RuleSetINS2_10SmallTypesEEERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  21.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_EixEi:
  620|   820k|  {
  621|   820k|    unsigned int i = (unsigned int) i_;
  622|   820k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   820k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 219k, False: 601k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   219k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   601k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   601k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   601k|    return arrayZ[i];
  625|   820k|  }
_ZN2OTplIPKNS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEELPv0EEERKNS_12ChainRuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   599k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEELPv0EEERKNS_12ChainRuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeItLj2EEELb1EEE:
  337|   220k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEEixEi:
  620|   435k|  {
  621|   435k|    unsigned int i = (unsigned int) i_;
  622|   435k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   435k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.42k, False: 427k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  7.42k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   427k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   427k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   427k|    return arrayZ[i];
  625|   435k|  }
_ZN2OTplIPKNS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEELPv0EEERKNS_12ChainRuleSetIS3_EERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj3EEELb1EEE:
  337|   435k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEEixEi:
  620|  31.8k|  {
  621|  31.8k|    unsigned int i = (unsigned int) i_;
  622|  31.8k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  31.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18.8k, False: 13.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  18.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  13.0k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  13.0k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  13.0k|    return arrayZ[i];
  625|  31.8k|  }
_ZN2OTplIPKNS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEELPv0EEERKNS_12ChainRuleSetINS2_10SmallTypesEEERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  31.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  38.5k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  3.11k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.54k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  3.54k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    651|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.50k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    773|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    591|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    206|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    249|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.59k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  4.09k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    939|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.14k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    596|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.92k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  5.39k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.42k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.75k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    998|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEES3_E8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|   201k|  {
  718|   201k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   201k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   201k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   201k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.7k, False: 189k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  11.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   189k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   189k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   189k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEES3_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|   201k|  {
  730|   201k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   201k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   201k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   402k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   201k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 201k, False: 7]
  |  |  |  Branch (349:45): [True: 189k, False: 11.7k]
  |  |  ------------------
  ------------------
  732|   201k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_6LookupEjEEEbP21hb_sanitize_context_tDpOT_:
  717|  78.8k|  {
  718|  78.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  78.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  78.8k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  78.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 78.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  78.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  78.8k|    unsigned int count = len;
  722|  3.26M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.18M, False: 75.1k]
  ------------------
  723|  3.18M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.18M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.73k, False: 3.18M]
  |  |  ------------------
  ------------------
  724|  3.73k|	return_trace (false);
  ------------------
  |  |  349|  82.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.73k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  75.1k|    return_trace (true);
  ------------------
  |  |  349|  75.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  75.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  78.8k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  78.8k|  {
  730|  78.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  78.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  78.8k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   157k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 78.8k, False: 3]
  |  |  |  Branch (349:45): [True: 78.8k, False: 11]
  |  |  ------------------
  ------------------
  732|  78.8k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.18M|  {
  427|  3.18M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.18M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.18M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  14.9M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.18M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.01M, False: 2.17M]
  |  |  |  Branch (349:45): [True: 2.13M, False: 41.8k]
  |  |  |  Branch (349:45): [True: 38.5k, False: 3.36k]
  |  |  |  Branch (349:45): [True: 3.18M, False: 378]
  |  |  ------------------
  ------------------
  429|  3.18M|		  (this->is_null () ||
  430|  3.18M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.18M|		   neuter (c)));
  432|  3.18M|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.18M|  {
  417|  3.18M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.18M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.18M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.18M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 378, False: 3.18M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    378|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    378|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.18M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.18M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.01M, False: 2.17M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.01M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.01M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.17M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.17M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.17M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.17M|    return_trace (true);
  ------------------
  |  |  349|  2.17M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.17M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.17M|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_16PairPosFormat1_3IS5_EEPNS6_18sanitize_closure_tEEEEbP21hb_sanitize_context_tDpOT_:
  717|  14.3k|  {
  718|  14.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  14.3k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  14.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 204, False: 14.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    204|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    204|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  14.1k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  14.1k|    unsigned int count = len;
  722|   134k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 120k, False: 13.7k]
  ------------------
  723|   120k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   120k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 379, False: 120k]
  |  |  ------------------
  ------------------
  724|    379|	return_trace (false);
  ------------------
  |  |  349|  14.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    379|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  13.7k|    return_trace (true);
  ------------------
  |  |  349|  13.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  14.1k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  14.3k|  {
  730|  14.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  14.3k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  28.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 14.3k, False: 3]
  |  |  |  Branch (349:45): [True: 14.1k, False: 201]
  |  |  ------------------
  ------------------
  732|  14.3k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJPNS5_18sanitize_closure_tEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   120k|  {
  427|   120k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   120k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   120k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   535k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   120k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 71.4k, False: 49.3k]
  |  |  |  Branch (349:45): [True: 45.8k, False: 3.45k]
  |  |  |  Branch (349:45): [True: 3.11k, False: 347]
  |  |  |  Branch (349:45): [True: 120k, False: 32]
  |  |  ------------------
  ------------------
  429|   120k|		  (this->is_null () ||
  430|   120k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   120k|		   neuter (c)));
  432|   120k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   120k|  {
  417|   120k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   120k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   120k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   120k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32, False: 120k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     32|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     32|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   120k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   120k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 71.4k, False: 49.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  71.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  71.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  49.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  49.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  49.3k|    return_trace (true);
  ------------------
  |  |  349|  49.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  49.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  49.3k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  3.45k|  {
  437|  3.45k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  3.45k|    return c->try_set (this, 0);
  439|  3.45k|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeItLj2EEEEcvPKT_IvEEv:
  478|  16.2k|  template <typename T> operator const T * () const { return arrayZ; }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   135k|  {
  427|   135k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   135k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   135k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   588k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   135k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 89.9k, False: 44.9k]
  |  |  |  Branch (349:45): [True: 41.0k, False: 3.92k]
  |  |  |  Branch (349:45): [True: 3.54k, False: 382]
  |  |  |  Branch (349:45): [True: 134k, False: 680]
  |  |  ------------------
  ------------------
  429|   135k|		  (this->is_null () ||
  430|   135k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   135k|		   neuter (c)));
  432|   135k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   135k|  {
  417|   135k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   135k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   135k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   135k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 680, False: 134k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    680|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    680|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   134k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   134k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 89.9k, False: 44.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  89.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  89.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  44.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  44.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 44.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  44.9k|    return_trace (true);
  ------------------
  |  |  349|  44.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  44.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  44.9k|  }
_ZNK2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  3.92k|  {
  437|  3.92k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  3.92k|    return c->try_set (this, 0);
  439|  3.92k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE8sanitizeIJPKNS3_16PairPosFormat1_3IS5_EEPNS6_18sanitize_closure_tEEEEbP21hb_sanitize_context_tDpOT_:
  717|  3.95k|  {
  718|  3.95k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.95k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  3.95k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  3.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 220, False: 3.73k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    220|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    220|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  3.73k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  3.73k|    unsigned int count = len;
  722|  71.7k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 68.0k, False: 3.64k]
  ------------------
  723|  68.0k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  68.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 86, False: 67.9k]
  |  |  ------------------
  ------------------
  724|     86|	return_trace (false);
  ------------------
  |  |  349|  3.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     86|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  3.64k|    return_trace (true);
  ------------------
  |  |  349|  3.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  3.73k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  3.95k|  {
  730|  3.95k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.95k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  3.95k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  7.90k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.95k, False: 1]
  |  |  |  Branch (349:45): [True: 3.73k, False: 219]
  |  |  ------------------
  ------------------
  732|  3.95k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJPNS5_18sanitize_closure_tEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  68.0k|  {
  427|  68.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  68.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  68.0k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   277k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  68.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64.1k, False: 3.87k]
  |  |  |  Branch (349:45): [True: 2.24k, False: 1.63k]
  |  |  |  Branch (349:45): [True: 1.54k, False: 82]
  |  |  |  Branch (349:45): [True: 68.0k, False: 4]
  |  |  ------------------
  ------------------
  429|  68.0k|		  (this->is_null () ||
  430|  68.0k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  68.0k|		   neuter (c)));
  432|  68.0k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  68.0k|  {
  417|  68.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  68.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  68.0k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  68.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 68.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  68.0k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  68.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 64.1k, False: 3.87k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  64.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  64.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.87k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.87k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.87k|    return_trace (true);
  ------------------
  |  |  349|  3.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.87k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl7PairSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.63k|  {
  437|  1.63k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.63k|    return c->try_set (this, 0);
  439|  1.63k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  23.6k|  {
  427|  23.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  23.6k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   106k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 12.7k, False: 10.8k]
  |  |  |  Branch (349:45): [True: 10.0k, False: 809]
  |  |  |  Branch (349:45): [True: 651, False: 158]
  |  |  |  Branch (349:45): [True: 23.6k, False: 10]
  |  |  ------------------
  ------------------
  429|  23.6k|		  (this->is_null () ||
  430|  23.6k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  23.6k|		   neuter (c)));
  432|  23.6k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  23.6k|  {
  417|  23.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  23.6k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  23.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 23.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  23.6k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  23.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12.7k, False: 10.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  12.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  10.8k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  10.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.8k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  10.8k|    return_trace (true);
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  10.8k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    809|  {
  437|    809|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    809|    return c->try_set (this, 0);
  439|    809|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.27M|  {
  427|  2.27M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.27M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.27M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  10.7M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.27M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 682k, False: 1.59M]
  |  |  |  Branch (349:45): [True: 1.59M, False: 1.61k]
  |  |  |  Branch (349:45): [True: 1.50k, False: 112]
  |  |  |  Branch (349:45): [True: 2.27M, False: 23]
  |  |  ------------------
  ------------------
  429|  2.27M|		  (this->is_null () ||
  430|  2.27M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.27M|		   neuter (c)));
  432|  2.27M|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.27M|  {
  417|  2.27M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.27M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.27M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 23, False: 2.27M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     23|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     23|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.27M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 682k, False: 1.59M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   682k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   682k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.59M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.59M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.59M|    return_trace (true);
  ------------------
  |  |  349|  1.59M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.59M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.59M|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.61k|  {
  437|  1.61k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.61k|    return c->try_set (this, 0);
  439|  1.61k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  22.3k|  {
  427|  22.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  22.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  22.3k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  95.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  22.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 16.4k, False: 5.84k]
  |  |  |  Branch (349:45): [True: 5.03k, False: 806]
  |  |  |  Branch (349:45): [True: 773, False: 33]
  |  |  |  Branch (349:45): [True: 22.3k, False: 9]
  |  |  ------------------
  ------------------
  429|  22.3k|		  (this->is_null () ||
  430|  22.3k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  22.3k|		   neuter (c)));
  432|  22.3k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  22.3k|  {
  417|  22.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  22.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  22.3k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  22.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 22.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  22.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  22.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.4k, False: 5.84k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  16.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  5.84k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  5.84k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.84k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  5.84k|    return_trace (true);
  ------------------
  |  |  349|  5.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  5.84k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9MarkArrayENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    806|  {
  437|    806|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    806|    return c->try_set (this, 0);
  439|    806|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeIjLj3EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  15.8k|  {
  427|  15.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  15.8k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  66.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 13.1k, False: 2.68k]
  |  |  |  Branch (349:45): [True: 2.06k, False: 611]
  |  |  |  Branch (349:45): [True: 591, False: 20]
  |  |  |  Branch (349:45): [True: 15.8k, False: 7]
  |  |  ------------------
  ------------------
  429|  15.8k|		  (this->is_null () ||
  430|  15.8k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  15.8k|		   neuter (c)));
  432|  15.8k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  15.8k|  {
  417|  15.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  15.8k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  15.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 15.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  15.8k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  15.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.1k, False: 2.68k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  13.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.68k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.68k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.68k|    return_trace (true);
  ------------------
  |  |  349|  2.68k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.68k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.68k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    611|  {
  437|    611|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    611|    return c->try_set (this, 0);
  439|    611|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeItLj2EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.96k|  {
  427|  6.96k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.96k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.96k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  30.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.96k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.12k, False: 2.83k]
  |  |  |  Branch (349:45): [True: 2.57k, False: 261]
  |  |  |  Branch (349:45): [True: 206, False: 55]
  |  |  |  Branch (349:45): [True: 6.95k, False: 3]
  |  |  ------------------
  ------------------
  429|  6.96k|		  (this->is_null () ||
  430|  6.96k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.96k|		   neuter (c)));
  432|  6.96k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.96k|  {
  417|  6.96k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.96k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.96k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.96k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 6.95k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.95k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.12k, False: 2.83k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.83k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.83k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.83k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.83k|    return_trace (true);
  ------------------
  |  |  349|  2.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.83k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.83k|  }
_ZNK2OT16List16OfOffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEEE8sanitizeIJjEEEbP21hb_sanitize_context_tDpOT_:
  782|  4.72k|  {
  783|  4.72k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.72k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  784|  4.72k|    return_trace ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|  4.72k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  785|  4.72k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_16List16OfOffsetToIS4_S6_EEjEEEbP21hb_sanitize_context_tDpOT_:
  717|  4.72k|  {
  718|  4.72k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.72k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  4.72k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  4.72k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 466, False: 4.25k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    466|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    466|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  4.25k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  4.25k|    unsigned int count = len;
  722|  2.26M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 2.26M, False: 4.19k]
  ------------------
  723|  2.26M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  2.26M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 57, False: 2.26M]
  |  |  ------------------
  ------------------
  724|     57|	return_trace (false);
  ------------------
  |  |  349|  4.31k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     57|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  4.19k|    return_trace (true);
  ------------------
  |  |  349|  4.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  4.25k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl12AnchorMatrixENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  4.72k|  {
  730|  4.72k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.72k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  4.72k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  9.11k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.39k, False: 326]
  |  |  |  Branch (349:45): [True: 4.25k, False: 140]
  |  |  ------------------
  ------------------
  732|  4.72k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    261|  {
  437|    261|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    261|    return c->try_set (this, 0);
  439|    261|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeIjLj3EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.40k|  {
  427|  6.40k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.40k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.40k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  27.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.40k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.51k, False: 1.88k]
  |  |  |  Branch (349:45): [True: 1.62k, False: 262]
  |  |  |  Branch (349:45): [True: 249, False: 13]
  |  |  |  Branch (349:45): [True: 6.39k, False: 5]
  |  |  ------------------
  ------------------
  429|  6.40k|		  (this->is_null () ||
  430|  6.40k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.40k|		   neuter (c)));
  432|  6.40k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.40k|  {
  417|  6.40k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.40k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.40k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 6.39k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.39k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.39k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.51k, False: 1.88k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.51k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.51k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.88k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.88k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.88k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.88k|    return_trace (true);
  ------------------
  |  |  349|  1.88k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.88k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl13LigatureArrayENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    262|  {
  437|    262|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    262|    return c->try_set (this, 0);
  439|    262|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_16ContextFormat1_4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  15.2k|  {
  718|  15.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  15.2k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  15.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 429, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    429|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    429|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  14.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  14.8k|    unsigned int count = len;
  722|  62.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 47.8k, False: 14.7k]
  ------------------
  723|  47.8k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  47.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 104, False: 47.7k]
  |  |  ------------------
  ------------------
  724|    104|	return_trace (false);
  ------------------
  |  |  349|  14.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    104|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  14.7k|    return_trace (true);
  ------------------
  |  |  349|  14.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  14.8k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  34.0k|  {
  730|  34.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  34.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  34.0k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  67.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 33.9k, False: 181]
  |  |  |  Branch (349:45): [True: 33.2k, False: 678]
  |  |  ------------------
  ------------------
  732|  34.0k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  76.4k|  {
  427|  76.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  76.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  76.4k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   341k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  76.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 42.3k, False: 33.9k]
  |  |  |  Branch (349:45): [True: 32.2k, False: 1.75k]
  |  |  |  Branch (349:45): [True: 1.59k, False: 159]
  |  |  |  Branch (349:45): [True: 76.3k, False: 32]
  |  |  ------------------
  ------------------
  429|  76.4k|		  (this->is_null () ||
  430|  76.4k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  76.4k|		   neuter (c)));
  432|  76.4k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  76.4k|  {
  417|  76.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  76.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  76.4k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  76.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32, False: 76.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     32|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     32|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  76.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  76.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 42.3k, False: 33.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  42.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  42.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  33.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  33.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  33.9k|    return_trace (true);
  ------------------
  |  |  349|  33.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  33.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  33.9k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_7RuleSetIS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  45.3k|  {
  718|  45.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  45.3k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  45.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.21k, False: 43.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.21k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.21k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  43.1k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  43.1k|    unsigned int count = len;
  722|   262k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 219k, False: 42.9k]
  ------------------
  723|   219k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   219k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 219k]
  |  |  ------------------
  ------------------
  724|    151|	return_trace (false);
  ------------------
  |  |  349|  43.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  42.9k|    return_trace (true);
  ------------------
  |  |  349|  42.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  42.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  43.1k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  45.3k|  {
  730|  45.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  45.3k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  88.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 43.6k, False: 1.68k]
  |  |  |  Branch (349:45): [True: 43.1k, False: 528]
  |  |  ------------------
  ------------------
  732|  45.3k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   219k|  {
  427|   219k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   219k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   219k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.00M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   219k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 100k, False: 119k]
  |  |  |  Branch (349:45): [True: 115k, False: 4.20k]
  |  |  |  Branch (349:45): [True: 4.09k, False: 116]
  |  |  |  Branch (349:45): [True: 219k, False: 35]
  |  |  ------------------
  ------------------
  429|   219k|		  (this->is_null () ||
  430|   219k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   219k|		   neuter (c)));
  432|   219k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   219k|  {
  417|   219k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   219k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   219k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   219k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 35, False: 219k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     35|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   219k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   219k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 100k, False: 119k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   100k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   100k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   119k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   119k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 119k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   119k|    return_trace (true);
  ------------------
  |  |  349|   119k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   119k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   119k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  4.20k|  {
  437|  4.20k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  4.20k|    return c->try_set (this, 0);
  439|  4.20k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.75k|  {
  437|  1.75k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.75k|    return c->try_set (this, 0);
  439|  1.75k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_16ContextFormat2_5IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  18.7k|  {
  718|  18.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  18.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  18.7k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  18.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 430, False: 18.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    430|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    430|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  18.3k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  18.3k|    unsigned int count = len;
  722|  46.8k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 28.5k, False: 18.2k]
  ------------------
  723|  28.5k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  28.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 87, False: 28.4k]
  |  |  ------------------
  ------------------
  724|     87|	return_trace (false);
  ------------------
  |  |  349|  18.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     87|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  18.2k|    return_trace (true);
  ------------------
  |  |  349|  18.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  18.3k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE8sanitizeIJPKNS_16ContextFormat1_4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  9.19k|  {
  718|  9.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  9.19k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  9.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 326, False: 8.86k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    326|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    326|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  8.86k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  8.86k|    unsigned int count = len;
  722|  15.2k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.40k, False: 8.80k]
  ------------------
  723|  6.40k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 65, False: 6.33k]
  |  |  ------------------
  ------------------
  724|     65|	return_trace (false);
  ------------------
  |  |  349|  8.93k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  8.80k|    return_trace (true);
  ------------------
  |  |  349|  8.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.80k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  8.86k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  9.19k|  {
  730|  9.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  9.19k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  18.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.11k, False: 82]
  |  |  |  Branch (349:45): [True: 8.86k, False: 244]
  |  |  ------------------
  ------------------
  732|  9.19k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.40k|  {
  427|  6.40k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.40k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.40k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  29.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.40k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.43k, False: 2.95k]
  |  |  |  Branch (349:45): [True: 1.95k, False: 999]
  |  |  |  Branch (349:45): [True: 939, False: 60]
  |  |  |  Branch (349:45): [True: 6.39k, False: 5]
  |  |  ------------------
  ------------------
  429|  6.40k|		  (this->is_null () ||
  430|  6.40k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.40k|		   neuter (c)));
  432|  6.40k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.40k|  {
  417|  6.40k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.40k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.40k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 6.39k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.39k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.39k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.43k, False: 2.95k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.43k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.43k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.95k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.95k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.95k|    return_trace (true);
  ------------------
  |  |  349|  2.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.95k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_7RuleSetIS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  2.95k|  {
  718|  2.95k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.95k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  2.95k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  2.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 966, False: 1.99k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    966|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    966|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.99k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.99k|    unsigned int count = len;
  722|  15.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 13.1k, False: 1.95k]
  ------------------
  723|  13.1k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33, False: 13.0k]
  |  |  ------------------
  ------------------
  724|     33|	return_trace (false);
  ------------------
  |  |  349|  2.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     33|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  1.95k|    return_trace (true);
  ------------------
  |  |  349|  1.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.99k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  2.95k|  {
  730|  2.95k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.95k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  2.95k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  5.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.12k, False: 831]
  |  |  |  Branch (349:45): [True: 1.99k, False: 135]
  |  |  ------------------
  ------------------
  732|  2.95k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  13.1k|  {
  427|  13.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  13.1k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  58.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.63k, False: 4.46k]
  |  |  |  Branch (349:45): [True: 3.29k, False: 1.17k]
  |  |  |  Branch (349:45): [True: 1.14k, False: 28]
  |  |  |  Branch (349:45): [True: 13.1k, False: 5]
  |  |  ------------------
  ------------------
  429|  13.1k|		  (this->is_null () ||
  430|  13.1k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  13.1k|		   neuter (c)));
  432|  13.1k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  13.1k|  {
  417|  13.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  13.1k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 13.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  13.1k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8.63k, False: 4.46k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  8.63k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.46k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.46k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.46k|    return_trace (true);
  ------------------
  |  |  349|  4.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.46k|  }
_ZNK2OT8OffsetToINS_4RuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.17k|  {
  437|  1.17k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.17k|    return c->try_set (this, 0);
  439|  1.17k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    999|  {
  437|    999|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    999|    return c->try_set (this, 0);
  439|    999|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE8sanitizeIJPKNS_16ContextFormat2_5INS3_11MediumTypesEEEEEEbP21hb_sanitize_context_tDpOT_:
  717|  31.8k|  {
  718|  31.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  31.8k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  31.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 234, False: 31.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    234|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    234|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  31.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  31.6k|    unsigned int count = len;
  722|  88.2k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 56.7k, False: 31.5k]
  ------------------
  723|  56.7k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  56.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25, False: 56.6k]
  |  |  ------------------
  ------------------
  724|     25|	return_trace (false);
  ------------------
  |  |  349|  31.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     25|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  31.5k|    return_trace (true);
  ------------------
  |  |  349|  31.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  31.6k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  31.8k|  {
  730|  31.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  31.8k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  63.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 31.7k, False: 83]
  |  |  |  Branch (349:45): [True: 31.6k, False: 151]
  |  |  ------------------
  ------------------
  732|  31.8k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  56.7k|  {
  427|  56.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  56.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  56.7k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   238k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  56.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 45.3k, False: 11.3k]
  |  |  |  Branch (349:45): [True: 10.7k, False: 613]
  |  |  |  Branch (349:45): [True: 596, False: 17]
  |  |  |  Branch (349:45): [True: 56.6k, False: 8]
  |  |  ------------------
  ------------------
  429|  56.7k|		  (this->is_null () ||
  430|  56.7k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  56.7k|		   neuter (c)));
  432|  56.7k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  56.7k|  {
  417|  56.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  56.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  56.7k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  56.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 56.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  56.6k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  56.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 45.3k, False: 11.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  45.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  11.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  11.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  11.3k|    return_trace (true);
  ------------------
  |  |  349|  11.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  11.3k|  }
_ZNK2OT8OffsetToINS_7RuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    613|  {
  437|    613|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    613|    return c->try_set (this, 0);
  439|    613|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_21ChainContextFormat1_4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  12.4k|  {
  718|  12.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  12.4k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  12.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 407, False: 12.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    407|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    407|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  12.0k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  12.0k|    unsigned int count = len;
  722|   535k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 523k, False: 11.8k]
  ------------------
  723|   523k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   523k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 147, False: 523k]
  |  |  ------------------
  ------------------
  724|    147|	return_trace (false);
  ------------------
  |  |  349|  12.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    147|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  11.8k|    return_trace (true);
  ------------------
  |  |  349|  11.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  12.0k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  28.9k|  {
  730|  28.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  28.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  28.9k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  57.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  28.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 28.7k, False: 167]
  |  |  |  Branch (349:45): [True: 27.7k, False: 1.04k]
  |  |  ------------------
  ------------------
  732|  28.9k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   560k|  {
  427|   560k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   560k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   560k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.27M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   560k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 529k, False: 31.4k]
  |  |  |  Branch (349:45): [True: 29.3k, False: 2.12k]
  |  |  |  Branch (349:45): [True: 1.92k, False: 201]
  |  |  |  Branch (349:45): [True: 560k, False: 38]
  |  |  ------------------
  ------------------
  429|   560k|		  (this->is_null () ||
  430|   560k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   560k|		   neuter (c)));
  432|   560k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   560k|  {
  417|   560k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   560k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   560k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   560k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 38, False: 560k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     38|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     38|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   560k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   560k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 529k, False: 31.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   529k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   529k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  31.4k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  31.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 31.4k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  31.4k|    return_trace (true);
  ------------------
  |  |  349|  31.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  31.4k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_12ChainRuleSetIS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  35.5k|  {
  718|  35.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  35.5k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  35.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.96k, False: 32.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.96k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.96k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  32.5k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  32.5k|    unsigned int count = len;
  722|  1.95M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 1.92M, False: 32.3k]
  ------------------
  723|  1.92M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 190, False: 1.92M]
  |  |  ------------------
  ------------------
  724|    190|	return_trace (false);
  ------------------
  |  |  349|  32.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    190|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  32.3k|    return_trace (true);
  ------------------
  |  |  349|  32.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  32.5k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  35.5k|  {
  730|  35.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  35.5k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  68.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 33.1k, False: 2.37k]
  |  |  |  Branch (349:45): [True: 32.5k, False: 584]
  |  |  ------------------
  ------------------
  732|  35.5k|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.92M|  {
  427|  1.92M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.92M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.92M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  8.11M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.92M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.52M, False: 398k]
  |  |  |  Branch (349:45): [True: 392k, False: 5.53k]
  |  |  |  Branch (349:45): [True: 5.39k, False: 147]
  |  |  |  Branch (349:45): [True: 1.92M, False: 43]
  |  |  ------------------
  ------------------
  429|  1.92M|		  (this->is_null () ||
  430|  1.92M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.92M|		   neuter (c)));
  432|  1.92M|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.92M|  {
  417|  1.92M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.92M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.92M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 43, False: 1.92M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     43|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     43|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.92M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.52M, False: 398k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.52M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.52M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   398k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   398k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 398k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   398k|    return_trace (true);
  ------------------
  |  |  349|   398k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   398k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   398k|  }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeItLj2EEES2_E8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  857|   394k|  {
  858|   394k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   394k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  859|   394k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   394k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 665, False: 393k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    665|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    665|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  860|   393k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   393k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   393k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (860:9): [Folded - Ignored]
  ------------------
  861|      0|    unsigned int count = get_length ();
  862|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (862:30): [True: 0, False: 0]
  ------------------
  863|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  864|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  865|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  866|      0|  }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeItLj2EEES2_E16sanitize_shallowEP21hb_sanitize_context_t:
  870|   394k|  {
  871|   394k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   394k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  872|   394k|    return_trace (lenP1.sanitize (c) &&
  ------------------
  |  |  349|  1.34M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   394k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 234k, False: 159k]
  |  |  |  Branch (349:45): [True: 159k, False: 556]
  |  |  |  Branch (349:45): [True: 394k, False: 109]
  |  |  ------------------
  ------------------
  873|   394k|		  (!lenP1 || c->check_array (arrayZ, lenP1 - 1)));
  874|   394k|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  5.53k|  {
  437|  5.53k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  5.53k|    return c->try_set (this, 0);
  439|  5.53k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.12k|  {
  437|  2.12k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.12k|    return c->try_set (this, 0);
  439|  2.12k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_21ChainContextFormat2_5IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  16.5k|  {
  718|  16.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  16.5k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  16.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 807, False: 15.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    807|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    807|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  15.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  15.7k|    unsigned int count = len;
  722|  53.1k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 37.4k, False: 15.6k]
  ------------------
  723|  37.4k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  37.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 92, False: 37.4k]
  |  |  ------------------
  ------------------
  724|     92|	return_trace (false);
  ------------------
  |  |  349|  15.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  15.6k|    return_trace (true);
  ------------------
  |  |  349|  15.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  15.7k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE8sanitizeIJPKNS_21ChainContextFormat1_4IS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  6.48k|  {
  718|  6.48k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.48k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  6.48k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  6.48k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 372, False: 6.10k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    372|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    372|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.10k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  6.10k|    unsigned int count = len;
  722|  12.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.47k, False: 5.95k]
  ------------------
  723|  6.47k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 6.32k]
  |  |  ------------------
  ------------------
  724|    151|	return_trace (false);
  ------------------
  |  |  349|  6.25k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  5.95k|    return_trace (true);
  ------------------
  |  |  349|  5.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  6.10k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  6.48k|  {
  730|  6.48k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.48k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  6.48k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  12.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.39k, False: 86]
  |  |  |  Branch (349:45): [True: 6.10k, False: 286]
  |  |  ------------------
  ------------------
  732|  6.48k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.47k|  {
  427|  6.47k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.47k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.47k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  31.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.47k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.84k, False: 4.59k]
  |  |  |  Branch (349:45): [True: 3.05k, False: 1.54k]
  |  |  |  Branch (349:45): [True: 1.42k, False: 119]
  |  |  |  Branch (349:45): [True: 6.44k, False: 32]
  |  |  ------------------
  ------------------
  429|  6.47k|		  (this->is_null () ||
  430|  6.47k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.47k|		   neuter (c)));
  432|  6.47k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.47k|  {
  417|  6.47k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.47k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.47k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32, False: 6.44k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     32|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     32|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.44k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.44k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.84k, False: 4.59k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.59k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.59k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.59k|    return_trace (true);
  ------------------
  |  |  349|  4.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.59k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E8sanitizeIJPKNS_12ChainRuleSetIS4_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  4.59k|  {
  718|  4.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  4.59k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  4.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.43k, False: 3.16k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.43k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.43k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  3.16k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  3.16k|    unsigned int count = len;
  722|   304k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 301k, False: 3.05k]
  ------------------
  723|   301k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   301k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 110, False: 301k]
  |  |  ------------------
  ------------------
  724|    110|	return_trace (false);
  ------------------
  |  |  349|  3.27k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    110|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  3.05k|    return_trace (true);
  ------------------
  |  |  349|  3.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  3.16k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES7_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  4.59k|  {
  730|  4.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  4.59k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  7.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.27k, False: 1.31k]
  |  |  |  Branch (349:45): [True: 3.16k, False: 117]
  |  |  ------------------
  ------------------
  732|  4.59k|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   301k|  {
  427|   301k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   301k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   301k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.28M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   301k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 220k, False: 80.5k]
  |  |  |  Branch (349:45): [True: 77.7k, False: 2.82k]
  |  |  |  Branch (349:45): [True: 2.75k, False: 71]
  |  |  |  Branch (349:45): [True: 301k, False: 39]
  |  |  ------------------
  ------------------
  429|   301k|		  (this->is_null () ||
  430|   301k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   301k|		   neuter (c)));
  432|   301k|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   301k|  {
  417|   301k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   301k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   301k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   301k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39, False: 301k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     39|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     39|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   301k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   301k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 220k, False: 80.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   220k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   220k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  80.5k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  80.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 80.5k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  80.5k|    return_trace (true);
  ------------------
  |  |  349|  80.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  80.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  80.5k|  }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  857|  78.7k|  {
  858|  78.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  78.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  859|  78.7k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  78.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 354, False: 78.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    354|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    354|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  860|  78.3k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  78.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (860:9): [Folded - Ignored]
  ------------------
  861|      0|    unsigned int count = get_length ();
  862|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (862:30): [True: 0, False: 0]
  ------------------
  863|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  864|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  865|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  866|      0|  }
_ZNK2OT15HeadlessArrayOfINS_7IntTypeIjLj3EEENS1_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  870|  78.7k|  {
  871|  78.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  78.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  872|  78.7k|    return_trace (lenP1.sanitize (c) &&
  ------------------
  |  |  349|   251k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 62.9k, False: 15.6k]
  |  |  |  Branch (349:45): [True: 15.3k, False: 261]
  |  |  |  Branch (349:45): [True: 78.6k, False: 93]
  |  |  ------------------
  ------------------
  873|  78.7k|		  (!lenP1 || c->check_array (arrayZ, lenP1 - 1)));
  874|  78.7k|  }
_ZNK2OT8OffsetToINS_9ChainRuleINS_6Layout11MediumTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.82k|  {
  437|  2.82k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.82k|    return c->try_set (this, 0);
  439|  2.82k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.54k|  {
  437|  1.54k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.54k|    return c->try_set (this, 0);
  439|  1.54k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE8sanitizeIJPKNS_21ChainContextFormat2_5INS3_11MediumTypesEEEEEEbP21hb_sanitize_context_tDpOT_:
  717|  12.9k|  {
  718|  12.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  12.9k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  12.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 229, False: 12.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    229|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    229|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  12.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  12.7k|    unsigned int count = len;
  722|  41.8k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 29.1k, False: 12.7k]
  ------------------
  723|  29.1k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  29.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 34, False: 29.1k]
  |  |  ------------------
  ------------------
  724|     34|	return_trace (false);
  ------------------
  |  |  349|  12.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     34|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  12.7k|    return_trace (true);
  ------------------
  |  |  349|  12.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  12.7k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EEENS6_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  12.9k|  {
  730|  12.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  12.9k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  25.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 12.9k, False: 75]
  |  |  |  Branch (349:45): [True: 12.7k, False: 154]
  |  |  ------------------
  ------------------
  732|  12.9k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  29.1k|  {
  427|  29.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  29.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  29.1k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   121k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 25.0k, False: 4.11k]
  |  |  |  Branch (349:45): [True: 3.08k, False: 1.02k]
  |  |  |  Branch (349:45): [True: 998, False: 28]
  |  |  |  Branch (349:45): [True: 29.1k, False: 6]
  |  |  ------------------
  ------------------
  429|  29.1k|		  (this->is_null () ||
  430|  29.1k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  29.1k|		   neuter (c)));
  432|  29.1k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  29.1k|  {
  417|  29.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  29.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  29.1k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  29.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 29.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  29.1k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  29.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25.0k, False: 4.11k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  25.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  25.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.11k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.11k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.11k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.11k|    return_trace (true);
  ------------------
  |  |  349|  4.11k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.11k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.11k|  }
_ZNK2OT8OffsetToINS_12ChainRuleSetINS_6Layout10SmallTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.02k|  {
  437|  1.02k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.02k|    return c->try_set (this, 0);
  439|  1.02k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl17PosLookupSubTableENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  41.8k|  {
  437|  41.8k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  41.8k|    return c->try_set (this, 0);
  439|  41.8k|  }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  14.9k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.25k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_17FeatureVariationsENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|    557|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    884|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    134|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  40.3k|  {
  427|  40.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  40.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  40.3k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   204k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.88k, False: 38.5k]
  |  |  |  Branch (349:45): [True: 34.0k, False: 4.43k]
  |  |  |  Branch (349:45): [True: 1.25k, False: 3.18k]
  |  |  |  Branch (349:45): [True: 40.3k, False: 2]
  |  |  ------------------
  ------------------
  429|  40.3k|		  (this->is_null () ||
  430|  40.3k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  40.3k|		   neuter (c)));
  432|  40.3k|  }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  40.3k|  {
  417|  40.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  40.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  40.3k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  40.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 40.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  40.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  40.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.88k, False: 38.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.88k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  38.5k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  38.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 38.5k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  38.5k|    return_trace (true);
  ------------------
  |  |  349|  38.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  38.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  38.5k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_6ScriptEEENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_12RecordListOfIS2_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  39.2k|  {
  718|  39.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  39.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  39.2k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  39.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.67k, False: 36.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.67k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  36.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  36.6k|    unsigned int count = len;
  722|  1.50M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 1.46M, False: 34.4k]
  ------------------
  723|  1.46M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.46M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.14k, False: 1.46M]
  |  |  ------------------
  ------------------
  724|  2.14k|	return_trace (false);
  ------------------
  |  |  349|  38.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  34.4k|    return_trace (true);
  ------------------
  |  |  349|  34.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  36.6k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_6ScriptEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  39.2k|  {
  730|  39.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  39.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  39.2k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  76.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  39.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 37.5k, False: 1.67k]
  |  |  |  Branch (349:45): [True: 36.6k, False: 997]
  |  |  ------------------
  ------------------
  732|  39.2k|  }
_ZNK2OT8OffsetToINS_6ScriptENS_7IntTypeItLj2EEELb1EE8sanitizeIJPKNS_25Record_sanitize_closure_tEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.46M|  {
  427|  1.46M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.46M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.94M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.46M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.40M, False: 67.0k]
  |  |  |  Branch (349:45): [True: 62.1k, False: 4.85k]
  |  |  |  Branch (349:45): [True: 2.77k, False: 2.07k]
  |  |  |  Branch (349:45): [True: 1.46M, False: 10]
  |  |  ------------------
  ------------------
  429|  1.46M|		  (this->is_null () ||
  430|  1.46M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.46M|		   neuter (c)));
  432|  1.46M|  }
_ZNK2OT8OffsetToINS_6ScriptENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.46M|  {
  417|  1.46M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.46M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.46M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 1.46M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.46M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.46M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.40M, False: 67.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.40M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.40M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  67.0k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  67.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 67.0k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  67.0k|    return_trace (true);
  ------------------
  |  |  349|  67.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  67.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  67.0k|  }
_ZNK2OT8OffsetToINS_6ScriptENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  4.85k|  {
  437|  4.85k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  4.85k|    return c->try_set (this, 0);
  439|  4.85k|  }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  4.43k|  {
  437|  4.43k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  4.43k|    return c->try_set (this, 0);
  439|  4.43k|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  37.2k|  {
  427|  37.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  37.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  37.2k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   185k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  37.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.62k, False: 32.5k]
  |  |  |  Branch (349:45): [True: 28.0k, False: 4.48k]
  |  |  |  Branch (349:45): [True: 2.07k, False: 2.40k]
  |  |  |  Branch (349:45): [True: 37.1k, False: 64]
  |  |  ------------------
  ------------------
  429|  37.2k|		  (this->is_null () ||
  430|  37.2k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  37.2k|		   neuter (c)));
  432|  37.2k|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  37.2k|  {
  417|  37.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  37.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  37.2k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  37.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 64, False: 37.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     64|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     64|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  37.1k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  37.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.62k, False: 32.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.62k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  32.5k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  32.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.5k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  32.5k|    return_trace (true);
  ------------------
  |  |  349|  32.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  32.5k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_7FeatureEEENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_12RecordListOfIS2_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  33.0k|  {
  718|  33.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  33.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  33.0k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  33.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.26k, False: 29.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  3.26k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.26k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  29.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  29.7k|    unsigned int count = len;
  722|  1.60M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 1.58M, False: 28.3k]
  ------------------
  723|  1.58M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.40k, False: 1.57M]
  |  |  ------------------
  ------------------
  724|  1.40k|	return_trace (false);
  ------------------
  |  |  349|  31.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.40k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  28.3k|    return_trace (true);
  ------------------
  |  |  349|  28.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  28.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  29.7k|  }
_ZNK2OT7ArrayOfINS_6RecordINS_7FeatureEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  33.0k|  {
  730|  33.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  33.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  33.0k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  63.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  33.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 30.7k, False: 2.26k]
  |  |  |  Branch (349:45): [True: 29.7k, False: 1.00k]
  |  |  ------------------
  ------------------
  732|  33.0k|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeItLj2EEELb1EE8sanitizeIJPKNS_25Record_sanitize_closure_tEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.58M|  {
  427|  1.58M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.58M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.58M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  6.63M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.58M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.27M, False: 308k]
  |  |  |  Branch (349:45): [True: 298k, False: 9.40k]
  |  |  |  Branch (349:45): [True: 8.05k, False: 1.34k]
  |  |  |  Branch (349:45): [True: 1.58M, False: 10]
  |  |  ------------------
  ------------------
  429|  1.58M|		  (this->is_null () ||
  430|  1.58M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.58M|		   neuter (c)));
  432|  1.58M|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.58M|  {
  417|  1.58M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.58M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.58M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 1.58M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.58M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.27M, False: 308k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.27M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.27M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   308k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   308k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 308k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   308k|    return_trace (true);
  ------------------
  |  |  349|   308k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   308k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   308k|  }
_ZNK2OT8OffsetToINS_7FeatureENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  9.40k|  {
  437|  9.40k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  9.40k|    return c->try_set (this, 0);
  439|  9.40k|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  4.48k|  {
  437|  4.48k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  4.48k|    return c->try_set (this, 0);
  439|  4.48k|  }
_ZN2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.07k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEEEES6_Lb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  14.0k|  {
  427|  14.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  14.0k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  74.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 489, False: 13.4k]
  |  |  |  Branch (349:45): [True: 8.49k, False: 4.99k]
  |  |  |  Branch (349:45): [True: 717, False: 4.28k]
  |  |  |  Branch (349:45): [True: 13.9k, False: 28]
  |  |  ------------------
  ------------------
  429|  14.0k|		  (this->is_null () ||
  430|  14.0k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  14.0k|		   neuter (c)));
  432|  14.0k|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEEEES6_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  14.0k|  {
  417|  14.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  14.0k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  14.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 13.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     28|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  13.9k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  13.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 489, False: 13.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    489|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    489|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  13.4k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  13.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 13.4k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  13.4k|    return_trace (true);
  ------------------
  |  |  349|  13.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  13.4k|  }
_ZNK2OT16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  782|  13.4k|  {
  783|  13.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  784|  13.4k|    return_trace ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|  13.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  785|  13.4k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_16List16OfOffsetToIS4_S6_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  13.4k|  {
  718|  13.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  13.4k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  13.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 343, False: 13.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    343|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    343|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  13.1k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  13.1k|    unsigned int count = len;
  722|   179k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 171k, False: 8.49k]
  ------------------
  723|   171k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   171k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.65k, False: 166k]
  |  |  ------------------
  ------------------
  724|  4.65k|	return_trace (false);
  ------------------
  |  |  349|  17.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  8.49k|    return_trace (true);
  ------------------
  |  |  349|  8.49k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.49k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  13.1k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  13.4k|  {
  730|  13.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  13.4k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  26.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 13.3k, False: 154]
  |  |  |  Branch (349:45): [True: 13.1k, False: 189]
  |  |  ------------------
  ------------------
  732|  13.4k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   171k|  {
  427|   171k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   171k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   171k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   796k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   171k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 77.1k, False: 93.6k]
  |  |  |  Branch (349:45): [True: 74.4k, False: 19.2k]
  |  |  |  Branch (349:45): [True: 14.9k, False: 4.24k]
  |  |  |  Branch (349:45): [True: 170k, False: 408]
  |  |  ------------------
  ------------------
  429|   171k|		  (this->is_null () ||
  430|   171k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   171k|		   neuter (c)));
  432|   171k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   171k|  {
  417|   171k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   171k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   171k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   171k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 408, False: 170k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    408|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    408|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   170k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   170k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 77.1k, False: 93.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  77.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  77.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  93.6k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  93.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 93.6k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  93.6k|    return_trace (true);
  ------------------
  |  |  349|  93.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  93.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  93.6k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  19.2k|  {
  437|  19.2k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  19.2k|    return c->try_set (this, 0);
  439|  19.2k|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEEEES6_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|  4.99k|  {
  437|  4.99k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  4.99k|    return c->try_set (this, 0);
  439|  4.99k|  }
_ZN2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeItLj2EEEEES6_Lb1EEaSEt:
  322|    717|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_17FeatureVariationsENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.87k|  {
  427|  2.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.87k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 606, False: 2.17k]
  |  |  |  Branch (349:45): [True: 1.34k, False: 836]
  |  |  |  Branch (349:45): [True: 557, False: 279]
  |  |  |  Branch (349:45): [True: 2.78k, False: 92]
  |  |  ------------------
  ------------------
  429|  2.87k|		  (this->is_null () ||
  430|  2.87k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.87k|		   neuter (c)));
  432|  2.87k|  }
_ZNK2OT8OffsetToINS_17FeatureVariationsENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.87k|  {
  417|  2.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.87k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 92, False: 2.78k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     92|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.78k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 606, False: 2.17k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    606|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    606|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.17k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.17k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.17k|    return_trace (true);
  ------------------
  |  |  349|  2.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.17k|  }
_ZNK2OT8OffsetToINS_17FeatureVariationsENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    836|  {
  437|    836|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    836|    return c->try_set (this, 0);
  439|    836|  }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.03k|  {
  427|  1.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.03k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.27k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 266, False: 765]
  |  |  |  Branch (349:45): [True: 383, False: 382]
  |  |  |  Branch (349:45): [True: 134, False: 248]
  |  |  |  Branch (349:45): [True: 1.03k, False: 2]
  |  |  ------------------
  ------------------
  429|  1.03k|		  (this->is_null () ||
  430|  1.03k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.03k|		   neuter (c)));
  432|  1.03k|  }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.03k|  {
  417|  1.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.03k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.03k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.03k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 266, False: 765]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    266|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    266|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    765|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    765|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 765]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    765|    return_trace (true);
  ------------------
  |  |  349|    765|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    765|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    765|  }
_ZNK2OT8OffsetToINS_18RecordListOfScriptENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    382|  {
  437|    382|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    382|    return c->try_set (this, 0);
  439|    382|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    783|  {
  427|    783|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    783|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    783|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  3.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    783|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 261, False: 513]
  |  |  |  Branch (349:45): [True: 323, False: 190]
  |  |  |  Branch (349:45): [True: 139, False: 51]
  |  |  |  Branch (349:45): [True: 774, False: 9]
  |  |  ------------------
  ------------------
  429|    783|		  (this->is_null () ||
  430|    783|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    783|		   neuter (c)));
  432|    783|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    783|  {
  417|    783|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    783|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    783|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    783|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 774]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    774|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    774|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 261, False: 513]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    261|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    261|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    513|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    513|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 513]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    513|    return_trace (true);
  ------------------
  |  |  349|    513|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    513|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    513|  }
_ZNK2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    190|  {
  437|    190|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    190|    return c->try_set (this, 0);
  439|    190|  }
_ZN2OT8OffsetToINS_12RecordListOfINS_7FeatureEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    139|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    387|  {
  427|    387|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    387|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    387|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.94k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    387|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 99, False: 284]
  |  |  |  Branch (349:45): [True: 159, False: 125]
  |  |  |  Branch (349:45): [True: 81, False: 44]
  |  |  |  Branch (349:45): [True: 383, False: 4]
  |  |  ------------------
  ------------------
  429|    387|		  (this->is_null () ||
  430|    387|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    387|		   neuter (c)));
  432|    387|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    387|  {
  417|    387|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    387|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    387|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    387|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 383]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    383|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    383|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99, False: 284]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     99|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     99|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    284|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    284|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 284]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    284|    return_trace (true);
  ------------------
  |  |  349|    284|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    284|  }
_ZNK2OT16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  782|    284|  {
  783|    284|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    284|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  784|    284|    return_trace ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|    284|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  785|    284|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EEENS5_ItLj2EEEE8sanitizeIJPKNS_16List16OfOffsetToIS4_S6_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|    284|  {
  718|    284|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    284|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    284|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    284|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 90, False: 194]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     90|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     90|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    194|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    194|    unsigned int count = len;
  722|  2.93k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 2.77k, False: 159]
  ------------------
  723|  2.77k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 35, False: 2.74k]
  |  |  ------------------
  ------------------
  724|     35|	return_trace (false);
  ------------------
  |  |  349|    229|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    159|    return_trace (true);
  ------------------
  |  |  349|    159|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    159|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    194|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EEENS5_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    284|  {
  730|    284|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    284|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    284|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    499|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 215, False: 69]
  |  |  |  Branch (349:45): [True: 194, False: 21]
  |  |  ------------------
  ------------------
  732|    284|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.77k|  {
  427|  2.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.77k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  13.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.22k, False: 1.54k]
  |  |  |  Branch (349:45): [True: 634, False: 911]
  |  |  |  Branch (349:45): [True: 884, False: 27]
  |  |  |  Branch (349:45): [True: 2.77k, False: 8]
  |  |  ------------------
  ------------------
  429|  2.77k|		  (this->is_null () ||
  430|  2.77k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.77k|		   neuter (c)));
  432|  2.77k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.77k|  {
  417|  2.77k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.77k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.77k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 2.77k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.77k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.22k, False: 1.54k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.22k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.22k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.54k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.54k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.54k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.54k|    return_trace (true);
  ------------------
  |  |  349|  1.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.54k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.54k|  }
_ZNK2OT8OffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    911|  {
  437|    911|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    911|    return c->try_set (this, 0);
  439|    911|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|    125|  {
  437|    125|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    125|    return c->try_set (this, 0);
  439|    125|  }
_ZN2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GPOS_impl9PosLookupENS_7IntTypeIjLj3EEEEES6_Lb1EEaSEj:
  322|     81|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7HBFixedINS_7IntTypeIsLj2EEELj12EE6to_intEv:
  152|   332k|  typename Type::type to_int () const { return Type::v; }
_ZNK2OT7HBFixedINS_7IntTypeIsLj2EEELj10EE6to_intEv:
  152|   104k|  typename Type::type to_int () const { return Type::v; }
_ZNK2OT14UnsizedArrayOfINS_10LongMetricEEixEj:
  466|   424k|  {
  467|   424k|    return arrayZ[i];
  468|   424k|  }
_ZN2OTplIPKvLPv0EEERKNS_7IntTypeIhLj1EEERKT_RKNS_8OffsetToIS5_NS4_ItLj2EEELb1EEE:
  337|  15.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7IntTypeIhLj1EEENS1_ItLj2EEELb1EEclEPKv:
  325|  15.9k|  {
  326|  15.9k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  15.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 642, False: 15.3k]
  |  |  ------------------
  ------------------
  327|  15.3k|    return StructAtOffset<const Type> (base, *this);
  328|  15.9k|  }
_ZN2OT12_hb_has_nullINS_7IntTypeIhLj1EEELb1EE8get_nullEv:
  308|    642|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|    642|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplI13hb_blob_ptr_tINS_4gvarEELPv0EEERKNS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEERKT_RKNS_8OffsetToISA_NS7_IjLj4EEELb0EEE:
  337|  44.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEENS3_IjLj4EEELb0EEclEPKv:
  325|  44.3k|  {
  326|  44.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  44.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 44.3k]
  |  |  ------------------
  ------------------
  327|  44.3k|    return StructAtOffset<const Type> (base, *this);
  328|  44.3k|  }
_ZNK2OT14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEE8as_arrayEj:
  482|   246k|  { return hb_array (arrayZ, len); }
_ZNK2OT7HBFixedINS_7IntTypeIsLj2EEELj14EE8to_floatEf:
  154|   573k|  float to_float (float offset = 0) const  { return ((int32_t) Type::v + offset) / shift; }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEENS3_IjLj4EEELb0EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    585|  {
  427|    585|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    585|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    585|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.96k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    585|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 585]
  |  |  |  Branch (349:45): [True: 548, False: 37]
  |  |  |  Branch (349:45): [True: 0, False: 37]
  |  |  |  Branch (349:45): [True: 585, False: 0]
  |  |  ------------------
  ------------------
  429|    585|		  (this->is_null () ||
  430|    585|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    585|		   neuter (c)));
  432|    585|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEENS3_IjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    585|  {
  417|    585|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    585|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    585|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    585|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 585]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    585|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    585|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 585]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    585|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    585|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 585]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    585|    return_trace (true);
  ------------------
  |  |  349|    585|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    585|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    585|  }
_ZNK2OT14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    585|  {
  530|    585|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    585|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    585|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    585|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37, False: 548]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     37|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     37|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    548|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    548|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    548|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    585|  {
  541|    585|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    585|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    585|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    585|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    585|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    585|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEENS3_IjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     37|  {
  437|     37|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     37|  }
_ZNK2OT8OffsetToINS_16DeltaSetIndexMapENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.61k|  {
  427|  7.61k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.61k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.61k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  34.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.61k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.64k, False: 2.92k]
  |  |  |  Branch (349:45): [True: 1.46k, False: 1.45k]
  |  |  |  Branch (349:45): [True: 1.29k, False: 162]
  |  |  |  Branch (349:45): [True: 7.56k, False: 54]
  |  |  ------------------
  ------------------
  429|  7.61k|		  (this->is_null () ||
  430|  7.61k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.61k|		   neuter (c)));
  432|  7.61k|  }
_ZNK2OT8OffsetToINS_16DeltaSetIndexMapENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.61k|  {
  417|  7.61k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.61k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.61k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.61k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 54, False: 7.56k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     54|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     54|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.56k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.56k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.64k, False: 2.92k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.92k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.92k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.92k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.92k|    return_trace (true);
  ------------------
  |  |  349|  2.92k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.92k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.92k|  }
_ZNK2OT8OffsetToINS_16DeltaSetIndexMapENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.45k|  {
  437|  1.45k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.45k|    return c->try_set (this, 0);
  439|  1.45k|  }
_ZN2OT8OffsetToINS_16DeltaSetIndexMapENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.29k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    386|  {
  427|    386|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    386|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    386|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    386|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 28, False: 358]
  |  |  |  Branch (349:45): [True: 192, False: 166]
  |  |  |  Branch (349:45): [True: 56, False: 110]
  |  |  |  Branch (349:45): [True: 386, False: 0]
  |  |  ------------------
  ------------------
  429|    386|		  (this->is_null () ||
  430|    386|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    386|		   neuter (c)));
  432|    386|  }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    386|  {
  417|    386|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    386|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    386|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    386|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 386]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    386|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    386|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 358]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     28|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    358|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    358|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 358]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    358|    return_trace (true);
  ------------------
  |  |  349|    358|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    358|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    358|  }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    166|  {
  437|    166|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    166|    return c->try_set (this, 0);
  439|    166|  }
_ZN2OT8OffsetToINS_14VariationStoreENS_7IntTypeItLj2EEELb1EEaSEt:
  322|     56|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEEcvPKT_IS2_EEv:
  478|   107k|  template <typename T> operator const T * () const { return arrayZ; }
_ZN2OTplIPKNS_4MVARELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|    128|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14VariationStoreENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|    128|  {
  326|    128|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    128|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 124]
  |  |  ------------------
  ------------------
  327|    124|    return StructAtOffset<const Type> (base, *this);
  328|    128|  }
_ZNK2OT13SortedArrayOfINS_17UnicodeValueRangeENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|  34.3k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT13SortedArrayOfINS_10UVSMappingENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|  67.6k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKvLPv0EEERKNS_10DefaultUVSERKT_RKNS_8OffsetToIS4_NS_7IntTypeIjLj4EEELb1EEE:
  337|  67.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_10DefaultUVSENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  67.7k|  {
  326|  67.7k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  67.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67.5k, False: 207]
  |  |  ------------------
  ------------------
  327|    207|    return StructAtOffset<const Type> (base, *this);
  328|  67.7k|  }
_ZN2OT12_hb_has_nullINS_10DefaultUVSELb1EE8get_nullEv:
  308|  67.5k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  67.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_17UnicodeValueRangeENS_7IntTypeIjLj4EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|  34.3k|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZN2OTplIPKvLPv0EEERKNS_13NonDefaultUVSERKT_RKNS_8OffsetToIS4_NS_7IntTypeIjLj4EEELb1EEE:
  337|  67.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13NonDefaultUVSENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  67.6k|  {
  326|  67.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  67.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67.5k, False: 82]
  |  |  ------------------
  ------------------
  327|     82|    return StructAtOffset<const Type> (base, *this);
  328|  67.6k|  }
_ZN2OT12_hb_has_nullINS_13NonDefaultUVSELb1EE8get_nullEv:
  308|  67.5k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  67.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_10UVSMappingENS_7IntTypeIjLj4EEEE7bsearchIjEERKS1_RKT_S7_:
  973|  34.3k|  { return *as_array ().bsearch (x, &not_found); }
_ZN2OT8OffsetToINS_10DefaultUVSENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.26k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_13NonDefaultUVSENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.20k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_10DefaultUVSENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  14.6k|  {
  427|  14.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  14.6k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  63.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.4k, False: 3.16k]
  |  |  |  Branch (349:45): [True: 1.82k, False: 1.33k]
  |  |  |  Branch (349:45): [True: 1.26k, False: 69]
  |  |  |  Branch (349:45): [True: 14.6k, False: 1]
  |  |  ------------------
  ------------------
  429|  14.6k|		  (this->is_null () ||
  430|  14.6k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  14.6k|		   neuter (c)));
  432|  14.6k|  }
_ZNK2OT8OffsetToINS_10DefaultUVSENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  14.6k|  {
  417|  14.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  14.6k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  14.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 14.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  14.6k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  14.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.4k, False: 3.16k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  11.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.16k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.16k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.16k|    return_trace (true);
  ------------------
  |  |  349|  3.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.16k|  }
_ZNK2OT7ArrayOfINS_17UnicodeValueRangeENS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  3.16k|  {
  718|  3.16k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.16k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  3.16k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  3.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.33k, False: 1.82k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.82k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_17UnicodeValueRangeENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  3.16k|  {
  730|  3.16k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.16k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  3.16k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  5.12k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.96k, False: 1.20k]
  |  |  |  Branch (349:45): [True: 1.82k, False: 135]
  |  |  ------------------
  ------------------
  732|  3.16k|  }
_ZNK2OT8OffsetToINS_10DefaultUVSENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.33k|  {
  437|  1.33k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.33k|    return c->try_set (this, 0);
  439|  1.33k|  }
_ZNK2OT8OffsetToINS_13NonDefaultUVSENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  14.5k|  {
  427|  14.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  14.5k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  62.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.5k, False: 3.06k]
  |  |  |  Branch (349:45): [True: 1.83k, False: 1.23k]
  |  |  |  Branch (349:45): [True: 1.20k, False: 30]
  |  |  |  Branch (349:45): [True: 14.5k, False: 1]
  |  |  ------------------
  ------------------
  429|  14.5k|		  (this->is_null () ||
  430|  14.5k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  14.5k|		   neuter (c)));
  432|  14.5k|  }
_ZNK2OT8OffsetToINS_13NonDefaultUVSENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  14.5k|  {
  417|  14.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  14.5k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 14.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  14.5k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.5k, False: 3.06k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  11.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.06k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.06k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.06k|    return_trace (true);
  ------------------
  |  |  349|  3.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.06k|  }
_ZNK2OT7ArrayOfINS_10UVSMappingENS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  3.06k|  {
  718|  3.06k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.06k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  3.06k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  3.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.23k, False: 1.83k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.23k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.23k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.83k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.83k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_10UVSMappingENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  3.06k|  {
  730|  3.06k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.06k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  3.06k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  5.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.96k, False: 1.10k]
  |  |  |  Branch (349:45): [True: 1.83k, False: 123]
  |  |  ------------------
  ------------------
  732|  3.06k|  }
_ZNK2OT8OffsetToINS_13NonDefaultUVSENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.23k|  {
  437|  1.23k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.23k|    return c->try_set (this, 0);
  439|  1.23k|  }
_ZNK2OT13SortedArrayOfINS_23VariationSelectorRecordENS_7IntTypeIjLj4EEEE7bsearchIjEERKS1_RKT_S7_:
  973|  67.7k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_23VariationSelectorRecordENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|   101k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_23VariationSelectorRecordENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_20CmapSubtableFormat14EEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.15k|  {
  718|  1.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.15k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 189, False: 966]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    189|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    189|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    966|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    966|    unsigned int count = len;
  722|  15.5k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 14.6k, False: 863]
  ------------------
  723|  14.6k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  14.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 103, False: 14.5k]
  |  |  ------------------
  ------------------
  724|    103|	return_trace (false);
  ------------------
  |  |  349|  1.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    103|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    863|    return_trace (true);
  ------------------
  |  |  349|    863|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    863|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    966|  }
_ZNK2OT7ArrayOfINS_23VariationSelectorRecordENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.15k|  {
  730|  1.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.15k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.15k, False: 1]
  |  |  |  Branch (349:45): [True: 966, False: 188]
  |  |  ------------------
  ------------------
  732|  1.15k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeIjLj4EEEEixEi:
  620|  6.69k|  {
  621|  6.69k|    unsigned int i = (unsigned int) i_;
  622|  6.69k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  6.69k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.14k, False: 3.55k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  3.14k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  3.55k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  3.55k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  3.55k|    return arrayZ[i];
  625|  6.69k|  }
_ZNK2OT13SortedArrayOfINS_21CmapSubtableLongGroupENS_7IntTypeIjLj4EEEE7bsearchIjEERKS1_RKT_S7_:
  973|   199k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_21CmapSubtableLongGroupENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|   199k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_21CmapSubtableLongGroupENS_7IntTypeIjLj4EEEEixEi:
  620|   398k|  {
  621|   398k|    unsigned int i = (unsigned int) i_;
  622|   398k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   398k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 398k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   398k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   398k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   398k|    return arrayZ[i];
  625|   398k|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|    613|  {
  718|    613|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    613|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    613|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    613|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 139, False: 474]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    139|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    139|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    474|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    474|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    474|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    613|  {
  730|    613|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    613|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    613|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.22k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    613|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 613, False: 0]
  |  |  |  Branch (349:45): [True: 474, False: 139]
  |  |  ------------------
  ------------------
  732|    613|  }
_ZNK2OT7ArrayOfINS_21CmapSubtableLongGroupENS_7IntTypeIjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  2.35k|  {
  718|  2.35k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.35k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  2.35k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  2.35k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 482, False: 1.87k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    482|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    482|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.87k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_21CmapSubtableLongGroupENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  2.35k|  {
  730|  2.35k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.35k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  2.35k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  4.71k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.35k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.35k, False: 0]
  |  |  |  Branch (349:45): [True: 1.87k, False: 482]
  |  |  ------------------
  ------------------
  732|  2.35k|  }
_ZNK2OT7IntTypeItLj2EE3cmpIS1_LPv0EEEiT_:
  101|   125k|  {
  102|   125k|    Type b = v;
  103|   125k|    return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (103:12): [True: 42.9k, False: 82.6k]
  |  Branch (103:25): [True: 24.8k, False: 57.8k]
  ------------------
  104|   125k|  }
_ZNK2OT8OffsetToINS_12CmapSubtableENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  36.3k|  {
  427|  36.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  36.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  36.3k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   179k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  36.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 11.6k, False: 24.6k]
  |  |  |  Branch (349:45): [True: 14.5k, False: 10.0k]
  |  |  |  Branch (349:45): [True: 8.26k, False: 1.81k]
  |  |  |  Branch (349:45): [True: 36.3k, False: 1]
  |  |  ------------------
  ------------------
  429|  36.3k|		  (this->is_null () ||
  430|  36.3k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  36.3k|		   neuter (c)));
  432|  36.3k|  }
_ZNK2OT8OffsetToINS_12CmapSubtableENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  36.3k|  {
  417|  36.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  36.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  36.3k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  36.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 36.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  36.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  36.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.6k, False: 24.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  11.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  24.6k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  24.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 24.6k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  24.6k|    return_trace (true);
  ------------------
  |  |  349|  24.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  24.6k|  }
_ZNK2OT8OffsetToINS_12CmapSubtableENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  10.0k|  {
  437|  10.0k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  10.0k|    return c->try_set (this, 0);
  439|  10.0k|  }
_ZN2OT8OffsetToINS_12CmapSubtableENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  8.26k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12CmapSubtableENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  2.68k|  {
  326|  2.68k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.68k]
  |  |  ------------------
  ------------------
  327|  2.68k|    return StructAtOffset<const Type> (base, *this);
  328|  2.68k|  }
_ZN2OTplIPKNS_4cmapELPv0EEERKNS_12CmapSubtableERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  2.68k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT13SortedArrayOfINS_14EncodingRecordENS_7IntTypeItLj2EEEE7bsearchIS1_EERKS1_RKT_S7_:
  973|   316k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_14EncodingRecordENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|   316k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_14EncodingRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_4cmapEEEEbP21hb_sanitize_context_tDpOT_:
  717|  6.61k|  {
  718|  6.61k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.61k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  6.61k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  6.61k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 66, False: 6.54k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     66|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     66|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.54k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  6.54k|    unsigned int count = len;
  722|  41.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 36.3k, False: 4.72k]
  ------------------
  723|  36.3k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  36.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.82k, False: 34.4k]
  |  |  ------------------
  ------------------
  724|  1.82k|	return_trace (false);
  ------------------
  |  |  349|  8.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  4.72k|    return_trace (true);
  ------------------
  |  |  349|  4.72k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  6.54k|  }
_ZNK2OT7ArrayOfINS_14EncodingRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  6.61k|  {
  730|  6.61k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.61k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  6.61k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  13.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.61k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.61k, False: 0]
  |  |  |  Branch (349:45): [True: 6.54k, False: 66]
  |  |  ------------------
  ------------------
  732|  6.61k|  }
_ZN2OT8OffsetToINS_5PaintENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  3.60k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  1.31M|  {
  326|  1.31M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.31M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 106k, False: 1.20M]
  |  |  ------------------
  ------------------
  327|  1.20M|    return StructAtOffset<const Type> (base, *this);
  328|  1.31M|  }
_ZN2OT12_hb_has_nullINS_5PaintELb1EE8get_nullEv:
  308|  1.03M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.03M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_9ColorLineINS_10NoVariableEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    679|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_9ColorLineINS_10NoVariableEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|   157k|  {
  326|   157k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   157k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 118k, False: 38.6k]
  |  |  ------------------
  ------------------
  327|  38.6k|    return StructAtOffset<const Type> (base, *this);
  328|   157k|  }
_ZN2OT12_hb_has_nullINS_9ColorLineINS_10NoVariableEEELb1EE8get_nullEv:
  308|   118k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   118k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_9ColorLineINS_8VariableEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    588|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_9ColorLineINS_8VariableEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  79.6k|  {
  326|  79.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  79.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67.6k, False: 12.0k]
  |  |  ------------------
  ------------------
  327|  12.0k|    return StructAtOffset<const Type> (base, *this);
  328|  79.6k|  }
_ZN2OT12_hb_has_nullINS_9ColorLineINS_8VariableEEELb1EE8get_nullEv:
  308|  67.6k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  67.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_10NoVariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    372|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_10NoVariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  17.1k|  {
  326|  17.1k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  17.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15.7k, False: 1.40k]
  |  |  ------------------
  ------------------
  327|  1.40k|    return StructAtOffset<const Type> (base, *this);
  328|  17.1k|  }
_ZN2OT12_hb_has_nullINS_10NoVariableINS_9Affine2x3EEELb1EE8get_nullEv:
  308|  15.7k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  15.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_8VariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    235|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_8VariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  12.6k|  {
  326|  12.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  12.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.6k, False: 1.98k]
  |  |  ------------------
  ------------------
  327|  1.98k|    return StructAtOffset<const Type> (base, *this);
  328|  12.6k|  }
_ZN2OT12_hb_has_nullINS_8VariableINS_9Affine2x3EEELb1EE8get_nullEv:
  308|  10.6k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  10.6k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  5.13M|  {
  427|  5.13M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.13M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  5.13M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  25.0M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.13M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 590k, False: 4.54M]
  |  |  |  Branch (349:45): [True: 4.53M, False: 7.74k]
  |  |  |  Branch (349:45): [True: 3.60k, False: 4.14k]
  |  |  |  Branch (349:45): [True: 5.13M, False: 1.21k]
  |  |  ------------------
  ------------------
  429|  5.13M|		  (this->is_null () ||
  430|  5.13M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  5.13M|		   neuter (c)));
  432|  5.13M|  }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  5.13M|  {
  417|  5.13M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.13M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  5.13M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  5.13M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.21k, False: 5.13M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|  1.21k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.21k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  5.13M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  5.13M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 590k, False: 4.54M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   590k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   590k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.54M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.54M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.54M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.54M|    return_trace (true);
  ------------------
  |  |  349|  4.54M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.54M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.54M|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_10NoVariableEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   238k|  {
  427|   238k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   238k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   238k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   970k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   238k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 221k, False: 16.5k]
  |  |  |  Branch (349:45): [True: 15.7k, False: 759]
  |  |  |  Branch (349:45): [True: 679, False: 80]
  |  |  |  Branch (349:45): [True: 238k, False: 4]
  |  |  ------------------
  ------------------
  429|   238k|		  (this->is_null () ||
  430|   238k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   238k|		   neuter (c)));
  432|   238k|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_10NoVariableEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   238k|  {
  417|   238k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   238k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   238k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   238k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 238k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   238k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   238k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 221k, False: 16.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   221k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   221k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  16.5k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  16.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 16.5k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  16.5k|    return_trace (true);
  ------------------
  |  |  349|  16.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  16.5k|  }
_ZNK2OT7ArrayOfINS_10NoVariableINS_9ColorStopEEENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  15.8k|  {
  718|  15.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  15.8k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  15.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 106, False: 15.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    106|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    106|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  15.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  15.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_10NoVariableINS_9ColorStopEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  15.8k|  {
  730|  15.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  15.8k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  31.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.8k, False: 3]
  |  |  |  Branch (349:45): [True: 15.7k, False: 103]
  |  |  ------------------
  ------------------
  732|  15.8k|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_10NoVariableEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    759|  {
  437|    759|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    759|    return c->try_set (this, 0);
  439|    759|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_8VariableEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   146k|  {
  427|   146k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   146k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   146k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   673k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   146k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 57.8k, False: 88.3k]
  |  |  |  Branch (349:45): [True: 87.5k, False: 781]
  |  |  |  Branch (349:45): [True: 588, False: 193]
  |  |  |  Branch (349:45): [True: 146k, False: 3]
  |  |  ------------------
  ------------------
  429|   146k|		  (this->is_null () ||
  430|   146k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   146k|		   neuter (c)));
  432|   146k|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_8VariableEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   146k|  {
  417|   146k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   146k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   146k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   146k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 146k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   146k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   146k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 57.8k, False: 88.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  57.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  57.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  88.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  88.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 88.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  88.3k|    return_trace (true);
  ------------------
  |  |  349|  88.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  88.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  88.3k|  }
_ZNK2OT7ArrayOfINS_8VariableINS_9ColorStopEEENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  87.6k|  {
  718|  87.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  87.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  87.6k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  87.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 119, False: 87.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    119|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    119|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  87.5k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  87.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  87.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_8VariableINS_9ColorStopEEENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  87.6k|  {
  730|  87.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  87.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  87.6k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   175k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  87.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 87.6k, False: 3]
  |  |  |  Branch (349:45): [True: 87.5k, False: 116]
  |  |  ------------------
  ------------------
  732|  87.6k|  }
_ZNK2OT8OffsetToINS_9ColorLineINS_8VariableEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    781|  {
  437|    781|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    781|    return c->try_set (this, 0);
  439|    781|  }
_ZNK2OT8OffsetToINS_10NoVariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  83.9k|  {
  427|  83.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  83.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  83.9k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   413k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  83.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.95k, False: 76.9k]
  |  |  |  Branch (349:45): [True: 76.5k, False: 431]
  |  |  |  Branch (349:45): [True: 372, False: 59]
  |  |  |  Branch (349:45): [True: 83.9k, False: 35]
  |  |  ------------------
  ------------------
  429|  83.9k|		  (this->is_null () ||
  430|  83.9k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  83.9k|		   neuter (c)));
  432|  83.9k|  }
_ZNK2OT8OffsetToINS_10NoVariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  83.9k|  {
  417|  83.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  83.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  83.9k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  83.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 35, False: 83.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     35|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     35|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  83.9k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  83.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.95k, False: 76.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  6.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  76.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  76.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 76.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  76.9k|    return_trace (true);
  ------------------
  |  |  349|  76.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  76.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  76.9k|  }
_ZNK2OT8OffsetToINS_10NoVariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    431|  {
  437|    431|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    431|    return c->try_set (this, 0);
  439|    431|  }
_ZNK2OT8OffsetToINS_8VariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   126k|  {
  427|   126k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   126k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   126k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   584k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   126k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 47.9k, False: 78.3k]
  |  |  |  Branch (349:45): [True: 78.0k, False: 276]
  |  |  |  Branch (349:45): [True: 235, False: 41]
  |  |  |  Branch (349:45): [True: 126k, False: 77]
  |  |  ------------------
  ------------------
  429|   126k|		  (this->is_null () ||
  430|   126k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   126k|		   neuter (c)));
  432|   126k|  }
_ZNK2OT8OffsetToINS_8VariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   126k|  {
  417|   126k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   126k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   126k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   126k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 77, False: 126k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     77|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     77|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   126k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   126k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47.9k, False: 78.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  47.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  78.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  78.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 78.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  78.3k|    return_trace (true);
  ------------------
  |  |  349|  78.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  78.3k|  }
_ZNK2OT8OffsetToINS_8VariableINS_9Affine2x3EEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    276|  {
  437|    276|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    276|    return c->try_set (this, 0);
  439|    276|  }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  7.74k|  {
  437|  7.74k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  7.74k|    return c->try_set (this, 0);
  439|  7.74k|  }
_ZN2OTplIPKNS_10PaintGlyphELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|   105k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintTranslateELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  84.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_10PaintScaleELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  16.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_22PaintScaleAroundCenterELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  13.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_17PaintScaleUniformELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  13.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_29PaintScaleUniformAroundCenterELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  15.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_11PaintRotateELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  14.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_23PaintRotateAroundCenterELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  19.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_9PaintSkewELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  55.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_21PaintSkewAroundCenterELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|  51.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintCompositeELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj3EEELb1EEE:
  337|   892k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7ClipBoxENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   240k|  {
  427|   240k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   240k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   240k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   968k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   240k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 238k, False: 2.82k]
  |  |  |  Branch (349:45): [True: 1.25k, False: 1.56k]
  |  |  |  Branch (349:45): [True: 1.53k, False: 29]
  |  |  |  Branch (349:45): [True: 240k, False: 3]
  |  |  ------------------
  ------------------
  429|   240k|		  (this->is_null () ||
  430|   240k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   240k|		   neuter (c)));
  432|   240k|  }
_ZNK2OT8OffsetToINS_7ClipBoxENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   240k|  {
  417|   240k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   240k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   240k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   240k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 240k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   240k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   240k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 238k, False: 2.82k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   238k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   238k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.82k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.82k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.82k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.82k|    return_trace (true);
  ------------------
  |  |  349|  2.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.82k|  }
_ZNK2OT8OffsetToINS_7ClipBoxENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.56k|  {
  437|  1.56k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.56k|    return c->try_set (this, 0);
  439|  1.56k|  }
_ZN2OTplIPKvLPv0EEERKNS_7ClipBoxERKT_RKNS_8OffsetToIS4_NS_7IntTypeIjLj3EEELb1EEE:
  337|  1.15k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7ClipBoxENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  1.15k|  {
  326|  1.15k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 551, False: 599]
  |  |  ------------------
  ------------------
  327|    599|    return StructAtOffset<const Type> (base, *this);
  328|  1.15k|  }
_ZN2OT12_hb_has_nullINS_7ClipBoxELb1EE8get_nullEv:
  308|    551|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|    551|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OT8OffsetToINS_7ClipBoxENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.53k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_10ClipRecordENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_8ClipListEEEEbP21hb_sanitize_context_tDpOT_:
  717|    603|  {
  718|    603|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    603|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    603|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    603|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 141, False: 462]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    141|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    141|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    462|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    462|    unsigned int count = len;
  722|   241k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 240k, False: 426]
  ------------------
  723|   240k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   240k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36, False: 240k]
  |  |  ------------------
  ------------------
  724|     36|	return_trace (false);
  ------------------
  |  |  349|    498|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    426|    return_trace (true);
  ------------------
  |  |  349|    426|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    426|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    462|  }
_ZNK2OT7ArrayOfINS_10ClipRecordENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    603|  {
  730|    603|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    603|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    603|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    603|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 600, False: 3]
  |  |  |  Branch (349:45): [True: 462, False: 138]
  |  |  ------------------
  ------------------
  732|    603|  }
_ZNK2OT13SortedArrayOfINS_10ClipRecordENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|   138k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OT8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  18.8k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  1.29M|  {
  326|  1.29M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.29M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 928k, False: 368k]
  |  |  ------------------
  ------------------
  327|   368k|    return StructAtOffset<const Type> (base, *this);
  328|  1.29M|  }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  75.8k|  {
  427|  75.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  75.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  75.8k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   378k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  75.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 21.9k, False: 53.9k]
  |  |  |  Branch (349:45): [True: 32.6k, False: 21.3k]
  |  |  |  Branch (349:45): [True: 18.8k, False: 2.50k]
  |  |  |  Branch (349:45): [True: 75.8k, False: 9]
  |  |  ------------------
  ------------------
  429|  75.8k|		  (this->is_null () ||
  430|  75.8k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  75.8k|		   neuter (c)));
  432|  75.8k|  }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  75.8k|  {
  417|  75.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  75.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  75.8k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  75.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 75.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  75.8k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  75.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.9k, False: 53.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  21.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  53.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  53.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 53.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  53.9k|    return_trace (true);
  ------------------
  |  |  349|  53.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  53.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  53.9k|  }
_ZNK2OT8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  21.3k|  {
  437|  21.3k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  21.3k|    return c->try_set (this, 0);
  439|  21.3k|  }
_ZNK2OT13SortedArrayOfINS_20BaseGlyphPaintRecordENS_7IntTypeIjLj4EEEE8as_arrayEv:
  939|   137k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_20BaseGlyphPaintRecordENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_13BaseGlyphListEEEEbP21hb_sanitize_context_tDpOT_:
  717|  7.19k|  {
  718|  7.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  7.19k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  7.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 448, False: 6.74k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    448|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    448|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.74k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  6.74k|    unsigned int count = len;
  722|  41.3k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 37.0k, False: 4.28k]
  ------------------
  723|  37.0k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  37.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.45k, False: 34.5k]
  |  |  ------------------
  ------------------
  724|  2.45k|	return_trace (false);
  ------------------
  |  |  349|  9.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  4.28k|    return_trace (true);
  ------------------
  |  |  349|  4.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  6.74k|  }
_ZNK2OT7ArrayOfINS_20BaseGlyphPaintRecordENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  7.19k|  {
  730|  7.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  7.19k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  14.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.82k, False: 370]
  |  |  |  Branch (349:45): [True: 6.74k, False: 78]
  |  |  ------------------
  ------------------
  732|  7.19k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EEES4_EixEi:
  620|  1.16M|  {
  621|  1.16M|    unsigned int i = (unsigned int) i_;
  622|  1.16M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  1.16M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 735k, False: 426k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   735k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   426k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   426k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   426k|    return arrayZ[i];
  625|  1.16M|  }
_ZN2OTplIPKNS_9LayerListELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  1.16M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EEES4_E8sanitizeIJPKNS_9LayerListEEEEbP21hb_sanitize_context_tDpOT_:
  717|  2.84k|  {
  718|  2.84k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.84k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  2.84k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  2.84k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.73k, False: 1.11k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.73k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.73k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.11k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  1.11k|    unsigned int count = len;
  722|  39.9k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 38.9k, False: 932]
  ------------------
  723|  38.9k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  38.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 180, False: 38.8k]
  |  |  ------------------
  ------------------
  724|    180|	return_trace (false);
  ------------------
  |  |  349|  1.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    180|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    932|    return_trace (true);
  ------------------
  |  |  349|    932|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    932|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  1.11k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_5PaintENS_7IntTypeIjLj4EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  2.84k|  {
  730|  2.84k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.84k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  2.84k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  4.01k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.17k, False: 1.67k]
  |  |  |  Branch (349:45): [True: 1.11k, False: 61]
  |  |  ------------------
  ------------------
  732|  2.84k|  }
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_13BaseGlyphListERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|   275k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13BaseGlyphListENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|   275k|  {
  326|   275k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   275k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.16k, False: 273k]
  |  |  ------------------
  ------------------
  327|   273k|    return StructAtOffset<const Type> (base, *this);
  328|   275k|  }
_ZN2OT12_hb_has_nullINS_13BaseGlyphListELb1EE8get_nullEv:
  308|  2.16k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  2.16k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_20SortedUnsizedArrayOfINS_15BaseGlyphRecordEEERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj4EEELb0EEE:
  337|  42.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_20SortedUnsizedArrayOfINS_15BaseGlyphRecordEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  42.7k|  {
  326|  42.7k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  42.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 42.7k]
  |  |  ------------------
  ------------------
  327|  42.7k|    return StructAtOffset<const Type> (base, *this);
  328|  42.7k|  }
_ZNK2OT20SortedUnsizedArrayOfINS_15BaseGlyphRecordEE7bsearchIjEERKS1_jRKT_S5_:
  601|  34.9k|  { return *as_array (len).bsearch (x, &not_found); }
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_14UnsizedArrayOfINS_11LayerRecordEEERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj4EEELb0EEE:
  337|  41.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_11LayerRecordEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  41.2k|  {
  326|  41.2k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  41.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 41.2k]
  |  |  ------------------
  ------------------
  327|  41.2k|    return StructAtOffset<const Type> (base, *this);
  328|  41.2k|  }
_ZNK2OT14UnsizedArrayOfINS_11LayerRecordEE8as_arrayEj:
  482|  33.3k|  { return hb_array (arrayZ, len); }
_ZNK2OT20SortedUnsizedArrayOfINS_15BaseGlyphRecordEE8as_arrayEj:
  592|  34.9k|  { return hb_sorted_array (this->arrayZ, len); }
_ZN2OTplIPKNS_13BaseGlyphListELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|   134k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_19PaintLinearGradientINS_10NoVariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  69.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_19PaintLinearGradientINS_8VariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  19.0k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_19PaintRadialGradientINS_10NoVariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  39.5k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_19PaintRadialGradientINS_8VariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  30.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_18PaintSweepGradientINS_10NoVariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  48.1k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_18PaintSweepGradientINS_8VariableEEELPv0EEERKNS_9ColorLineIS2_EERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  29.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_9LayerListERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  32.8k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9LayerListENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  32.8k|  {
  326|  32.8k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.0k, False: 15.8k]
  |  |  ------------------
  ------------------
  327|  15.8k|    return StructAtOffset<const Type> (base, *this);
  328|  32.8k|  }
_ZN2OT12_hb_has_nullINS_9LayerListELb1EE8get_nullEv:
  308|  17.0k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  17.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT14UnsizedArrayOfINS_15BaseGlyphRecordEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  7.87k|  {
  530|  7.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  7.87k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  7.87k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21, False: 7.85k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     21|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     21|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  7.85k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  7.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_15BaseGlyphRecordEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  7.87k|  {
  541|  7.87k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.87k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  7.87k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  7.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  7.87k|  }
_ZNK2OT14UnsizedArrayOfINS_11LayerRecordEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  7.85k|  {
  530|  7.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  7.85k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  7.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 7.84k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  7.84k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  7.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_11LayerRecordEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  7.85k|  {
  541|  7.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  7.85k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  7.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  7.85k|  }
_ZNK2OT8OffsetToINS_13BaseGlyphListENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.81k|  {
  427|  7.81k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.81k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.81k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  41.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.81k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 622, False: 7.19k]
  |  |  |  Branch (349:45): [True: 4.28k, False: 2.90k]
  |  |  |  Branch (349:45): [True: 343, False: 2.56k]
  |  |  |  Branch (349:45): [True: 7.81k, False: 2]
  |  |  ------------------
  ------------------
  429|  7.81k|		  (this->is_null () ||
  430|  7.81k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.81k|		   neuter (c)));
  432|  7.81k|  }
_ZNK2OT8OffsetToINS_13BaseGlyphListENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.81k|  {
  417|  7.81k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.81k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.81k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.81k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 7.81k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.81k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.81k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 622, False: 7.19k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    622|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    622|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  7.19k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  7.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.19k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  7.19k|    return_trace (true);
  ------------------
  |  |  349|  7.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  7.19k|  }
_ZNK2OT8OffsetToINS_13BaseGlyphListENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.90k|  {
  437|  2.90k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.90k|    return c->try_set (this, 0);
  439|  2.90k|  }
_ZN2OT8OffsetToINS_13BaseGlyphListENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|    343|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_9LayerListENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  5.25k|  {
  427|  5.25k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.25k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  5.25k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  25.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.25k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.28k, False: 2.84k]
  |  |  |  Branch (349:45): [True: 932, False: 1.91k]
  |  |  |  Branch (349:45): [True: 1.68k, False: 227]
  |  |  |  Branch (349:45): [True: 5.13k, False: 122]
  |  |  ------------------
  ------------------
  429|  5.25k|		  (this->is_null () ||
  430|  5.25k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  5.25k|		   neuter (c)));
  432|  5.25k|  }
_ZNK2OT8OffsetToINS_9LayerListENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  5.25k|  {
  417|  5.25k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.25k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  5.25k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  5.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 122, False: 5.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    122|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    122|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  5.13k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.28k, False: 2.84k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  2.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.84k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.84k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.84k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.84k|    return_trace (true);
  ------------------
  |  |  349|  2.84k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.84k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.84k|  }
_ZNK2OT8OffsetToINS_9LayerListENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.91k|  {
  437|  1.91k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.91k|    return c->try_set (this, 0);
  439|  1.91k|  }
_ZN2OT8OffsetToINS_9LayerListENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.68k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_8ClipListENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  4.90k|  {
  427|  4.90k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.90k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  4.90k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  24.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.90k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.28k, False: 2.60k]
  |  |  |  Branch (349:45): [True: 426, False: 2.18k]
  |  |  |  Branch (349:45): [True: 2.13k, False: 52]
  |  |  |  Branch (349:45): [True: 4.89k, False: 7]
  |  |  ------------------
  ------------------
  429|  4.90k|		  (this->is_null () ||
  430|  4.90k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  4.90k|		   neuter (c)));
  432|  4.90k|  }
_ZNK2OT8OffsetToINS_8ClipListENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  4.90k|  {
  417|  4.90k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.90k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  4.90k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  4.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 4.89k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  4.89k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  4.89k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.28k, False: 2.60k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  2.28k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.60k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.60k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.60k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.60k|    return_trace (true);
  ------------------
  |  |  349|  2.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.60k|  }
_ZNK2OT8OffsetToINS_8ClipListENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.18k|  {
  437|  2.18k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.18k|    return c->try_set (this, 0);
  439|  2.18k|  }
_ZN2OT8OffsetToINS_8ClipListENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  2.13k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT13SortedArrayOfINS_20BaseGlyphPaintRecordENS_7IntTypeIjLj4EEEE7bsearchIjEERKS1_RKT_S7_:
  973|   137k|  { return *as_array ().bsearch (x, &not_found); }
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  27.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_16DeltaSetIndexMapERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  27.2k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_16DeltaSetIndexMapENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  28.4k|  {
  326|  28.4k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  28.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22.7k, False: 5.69k]
  |  |  ------------------
  ------------------
  327|  5.69k|    return StructAtOffset<const Type> (base, *this);
  328|  28.4k|  }
_ZN2OT12_hb_has_nullINS_16DeltaSetIndexMapELb1EE8get_nullEv:
  308|  22.7k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  22.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT8OffsetToINS_8ClipListENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|   138k|  {
  326|   138k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   138k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 129k, False: 8.65k]
  |  |  ------------------
  ------------------
  327|  8.65k|    return StructAtOffset<const Type> (base, *this);
  328|   138k|  }
_ZN2OT12_hb_has_nullINS_8ClipListELb1EE8get_nullEv:
  308|   129k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   129k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4COLRELPv0EEERKNS_8ClipListERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|   138k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintTransformINS_10NoVariableEEELPv0EEERKNS2_INS_9Affine2x3EEERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  17.1k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintTransformINS_10NoVariableEEELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj3EEELb1EEE:
  337|  17.1k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintTransformINS_8VariableEEELPv0EEERKNS2_INS_9Affine2x3EEERKT_RKNS_8OffsetToIS8_NS_7IntTypeIjLj3EEELb1EEE:
  337|  12.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_14PaintTransformINS_8VariableEEELPv0EEERKNS_5PaintERKT_RKNS_8OffsetToIS7_NS_7IntTypeIjLj3EEELb1EEE:
  337|  12.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_8HVARVVARELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  1.12k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_8HVARVVARELPv0EEERKNS_16DeltaSetIndexMapERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  1.12k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4VVARELPv0EEERKNS_16DeltaSetIndexMapERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|      3|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4VVARELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|    190|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_18ResourceForkHeaderELPv0EEERKNS_11ResourceMapERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb0EEE:
  337|  1.41k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_11ResourceMapENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  1.41k|  {
  326|  1.41k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.41k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.41k]
  |  |  ------------------
  ------------------
  327|  1.41k|    return StructAtOffset<const Type> (base, *this);
  328|  1.41k|  }
_ZN2OTplIPKNS_11ResourceMapELPv0EEERKNS_9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToIS9_S8_Lb0EEE:
  337|  3.20M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEES4_Lb0EEclEPKv:
  325|  3.20M|  {
  326|  3.20M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  3.20M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.20M]
  |  |  ------------------
  ------------------
  327|  3.20M|    return StructAtOffset<const Type> (base, *this);
  328|  3.20M|  }
_ZNK2OT9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEixEi:
  890|  3.20M|  {
  891|  3.20M|    unsigned int i = (unsigned int) i_;
  892|  3.20M|    if (unlikely (i > lenM1)) return Null (Type);
  ------------------
  |  |  259|  3.20M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.20M]
  |  |  ------------------
  ------------------
                  if (unlikely (i > lenM1)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  893|  3.20M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  3.20M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  894|  3.20M|    return arrayZ[i];
  895|  3.20M|  }
_ZNK2OT15BinSearchHeaderINS_7IntTypeItLj2EEEEcvjEv:
  992|  4.01M|  operator uint32_t () const { return len; }
_ZNK2OT7ArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE5lfindINS_3TagEEEbRKT_Pj14hb_not_found_tj:
  666|  1.25M|  { return as_array ().lfind (x, i, not_found, to_store); }
_ZNK2OT7ArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE8as_arrayEv:
  642|  1.25M|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT7IntTypeIjLj4EE3cmpINS_3TagELPv0EEEiT_:
  101|  5.08M|  {
  102|  5.08M|    Type b = v;
  103|  5.08M|    return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (103:12): [True: 3.14M, False: 1.93M]
  |  Branch (103:25): [True: 61.0k, False: 1.87M]
  ------------------
  104|  5.08M|  }
_ZNK2OT13SortedArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE5bfindINS_3TagEEEbRKT_Pj14hb_not_found_tj:
  978|  26.5k|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT13SortedArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE8as_arrayEv:
  939|  26.5k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEEixEi:
  620|  1.28M|  {
  621|  1.28M|    unsigned int i = (unsigned int) i_;
  622|  1.28M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  1.28M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.22M, False: 61.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  1.22M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  61.0k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  61.0k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  61.0k|    return arrayZ[i];
  625|  1.28M|  }
_ZN2OTplIPKNS_17TTCHeaderVersion1ELPv0EEERKNS_19OpenTypeOffsetTableERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  2.37k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  2.37k|  {
  326|  2.37k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.78k, False: 597]
  |  |  ------------------
  ------------------
  327|    597|    return StructAtOffset<const Type> (base, *this);
  328|  2.37k|  }
_ZN2OT12_hb_has_nullINS_19OpenTypeOffsetTableELb1EE8get_nullEv:
  308|  1.78k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.78k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EEES4_EixEi:
  620|  2.37k|  {
  621|  2.37k|    unsigned int i = (unsigned int) i_;
  622|  2.37k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 71, False: 2.30k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|     71|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  2.30k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  2.30k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  2.30k|    return arrayZ[i];
  625|  2.37k|  }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_14ResourceRecordEEERKT_RKNS_8OffsetToIS6_NS_7IntTypeItLj2EEELb0EEE:
  337|    417|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_14ResourceRecordEEENS_7IntTypeItLj2EEELb0EEclEPKv:
  325|    417|  {
  326|    417|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    417|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 417]
  |  |  ------------------
  ------------------
  327|    417|    return StructAtOffset<const Type> (base, *this);
  328|    417|  }
_ZNK2OT14UnsizedArrayOfINS_14ResourceRecordEE8as_arrayEj:
  482|    417|  { return hb_array (arrayZ, len); }
_ZN2OTplIPKvLPv0EEERKNS_7ArrayOfINS_7IntTypeIhLj1EEENS5_IjLj4EEEEERKT_RKNS_8OffsetToIS8_NS5_IjLj3EEELb0EEE:
  337|  1.56k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_7ArrayOfINS_7IntTypeIhLj1EEENS2_IjLj4EEEEENS2_IjLj3EEELb0EEclEPKv:
  325|  1.56k|  {
  326|  1.56k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.56k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.56k]
  |  |  ------------------
  ------------------
  327|  1.56k|    return StructAtOffset<const Type> (base, *this);
  328|  1.56k|  }
_ZNK2OT6OffsetINS_7IntTypeIjLj3EEELb0EE7is_nullEv:
  235|  3.90k|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 0, False: 0]
  ------------------
_ZN2OTplIPKNS_18ResourceForkHeaderELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToIS8_NS6_IjLj4EEELb0EEE:
  337|  1.50k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_IjLj4EEELb0EEclEPKv:
  325|  1.50k|  {
  326|  1.50k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.50k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.50k]
  |  |  ------------------
  ------------------
  327|  1.50k|    return StructAtOffset<const Type> (base, *this);
  328|  1.50k|  }
_ZNK2OT7ArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  31.3k|  {
  718|  31.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  31.3k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  31.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 181, False: 31.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    181|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    181|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  31.1k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  31.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_11TableRecordENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  31.3k|  {
  730|  31.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  31.3k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  62.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 31.3k, False: 2]
  |  |  |  Branch (349:45): [True: 31.1k, False: 179]
  |  |  ------------------
  ------------------
  732|  31.3k|  }
_ZNK2OT15BinSearchHeaderINS_7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  995|  31.6k|  {
  996|  31.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  31.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  997|  31.6k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  31.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  31.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  998|  31.6k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EEES4_E8sanitizeIJPKNS_17TTCHeaderVersion1EEEEbP21hb_sanitize_context_tDpOT_:
  717|    254|  {
  718|    254|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    254|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    254|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    254|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37, False: 217]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     37|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     37|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    217|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    217|    unsigned int count = len;
  722|  2.99k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 2.85k, False: 133]
  ------------------
  723|  2.85k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  2.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 84, False: 2.77k]
  |  |  ------------------
  ------------------
  724|     84|	return_trace (false);
  ------------------
  |  |  349|    301|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     84|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    133|    return_trace (true);
  ------------------
  |  |  349|    133|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    133|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    217|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|    254|  {
  730|    254|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    254|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    254|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    507|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    254|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 253, False: 1]
  |  |  |  Branch (349:45): [True: 217, False: 36]
  |  |  ------------------
  ------------------
  732|    254|  }
_ZNK2OT8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.85k|  {
  427|  2.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.85k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  13.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.13k, False: 1.72k]
  |  |  |  Branch (349:45): [True: 877, False: 843]
  |  |  |  Branch (349:45): [True: 763, False: 80]
  |  |  |  Branch (349:45): [True: 2.85k, False: 4]
  |  |  ------------------
  ------------------
  429|  2.85k|		  (this->is_null () ||
  430|  2.85k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.85k|		   neuter (c)));
  432|  2.85k|  }
_ZNK2OT8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.85k|  {
  417|  2.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.85k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 2.85k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.85k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.13k, False: 1.72k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.72k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.72k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.72k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.72k|    return_trace (true);
  ------------------
  |  |  349|  1.72k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.72k|  }
_ZNK2OT8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    843|  {
  437|    843|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    843|    return c->try_set (this, 0);
  439|    843|  }
_ZN2OT8OffsetToINS_19OpenTypeOffsetTableENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|    763|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_IjLj4EEELb0EE8sanitizeIJRKS5_EEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  7.00k|  {
  427|  7.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  7.00k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  35.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 7.00k]
  |  |  |  Branch (349:45): [True: 6.95k, False: 43]
  |  |  |  Branch (349:45): [True: 0, False: 43]
  |  |  |  Branch (349:45): [True: 7.00k, False: 0]
  |  |  ------------------
  ------------------
  429|  7.00k|		  (this->is_null () ||
  430|  7.00k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  7.00k|		   neuter (c)));
  432|  7.00k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_IjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  7.00k|  {
  417|  7.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  7.00k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  7.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.00k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  7.00k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  7.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.00k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  7.00k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  7.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.00k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  7.00k|    return_trace (true);
  ------------------
  |  |  349|  7.00k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  7.00k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_IjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     43|  {
  437|     43|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     43|  }
_ZNK2OT8OffsetToINS_11ResourceMapENS_7IntTypeIjLj4EEELb0EE8sanitizeIJPKNS_14UnsizedArrayOfINS2_IhLj1EEEEEEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|     94|  {
  427|     94|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     94|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|     94|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|    520|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     94|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 94]
  |  |  |  Branch (349:45): [True: 44, False: 50]
  |  |  |  Branch (349:45): [True: 0, False: 50]
  |  |  |  Branch (349:45): [True: 94, False: 0]
  |  |  ------------------
  ------------------
  429|     94|		  (this->is_null () ||
  430|     94|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|     94|		   neuter (c)));
  432|     94|  }
_ZNK2OT8OffsetToINS_11ResourceMapENS_7IntTypeIjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|     94|  {
  417|     94|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     94|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|     94|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|     94|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 94]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|     94|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|     94|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 94]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|     94|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|     94|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 94]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|     94|    return_trace (true);
  ------------------
  |  |  349|     94|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     94|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|     94|  }
_ZNK2OT8OffsetToINS_9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEES4_Lb0EE8sanitizeIJPKS5_RPKvEEEbP21hb_sanitize_context_tSB_DpOT_:
  426|     92|  {
  427|     92|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     92|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|     92|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|    508|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 92]
  |  |  |  Branch (349:45): [True: 44, False: 48]
  |  |  |  Branch (349:45): [True: 0, False: 48]
  |  |  |  Branch (349:45): [True: 92, False: 0]
  |  |  ------------------
  ------------------
  429|     92|		  (this->is_null () ||
  430|     92|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|     92|		   neuter (c)));
  432|     92|  }
_ZNK2OT8OffsetToINS_9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEES4_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|     92|  {
  417|     92|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     92|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|     92|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|     92|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 92]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|     92|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|     92|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 92]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|     92|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|     92|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 92]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|     92|    return_trace (true);
  ------------------
  |  |  349|     92|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|     92|  }
_ZNK2OT9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKS4_RPKvEEEbP21hb_sanitize_context_tDpOT_:
  908|     92|  {
  909|     92|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     92|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  910|     92|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     92|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 84]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  911|     84|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (911:9): [Folded - Ignored]
  ------------------
  912|     84|    unsigned int count = lenM1 + 1;
  913|  85.7k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (913:30): [True: 85.7k, False: 44]
  ------------------
  914|  85.7k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  85.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40, False: 85.6k]
  |  |  ------------------
  ------------------
  915|     40|	return_trace (false);
  ------------------
  |  |  349|    124|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     40|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  916|     44|    return_trace (true);
  ------------------
  |  |  349|     44|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     44|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  917|     84|  }
_ZNK2OT9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  921|     92|  {
  922|     92|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     92|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  923|     92|    return_trace (lenM1.sanitize (c) &&
  ------------------
  |  |  349|    180|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 88, False: 4]
  |  |  |  Branch (349:45): [True: 84, False: 4]
  |  |  ------------------
  ------------------
  924|     92|		  (c->check_array (arrayZ, lenM1 + 1)));
  925|     92|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_14ResourceRecordEEENS_7IntTypeItLj2EEELb0EE8sanitizeIJjRPKvEEEbP21hb_sanitize_context_tS9_DpOT_:
  426|  85.7k|  {
  427|  85.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  85.7k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   428k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 85.7k]
  |  |  |  Branch (349:45): [True: 85.6k, False: 38]
  |  |  |  Branch (349:45): [True: 0, False: 38]
  |  |  |  Branch (349:45): [True: 85.7k, False: 1]
  |  |  ------------------
  ------------------
  429|  85.7k|		  (this->is_null () ||
  430|  85.7k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  85.7k|		   neuter (c)));
  432|  85.7k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_14ResourceRecordEEENS_7IntTypeItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  85.7k|  {
  417|  85.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  85.7k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  85.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 85.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  85.7k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  85.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 85.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  85.7k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  85.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 85.7k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  85.7k|    return_trace (true);
  ------------------
  |  |  349|  85.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  85.7k|  }
_ZNK2OT14UnsizedArrayOfINS_14ResourceRecordEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tjDpOT_:
  529|  85.7k|  {
  530|  85.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  85.7k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  85.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 85.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  85.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|  86.8k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 1.17k, False: 85.6k]
  ------------------
  534|  1.17k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30, False: 1.14k]
  |  |  ------------------
  ------------------
  535|     30|	return_trace (false);
  ------------------
  |  |  349|  85.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     30|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|  85.6k|    return_trace (true);
  ------------------
  |  |  349|  85.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|  85.6k|  }
_ZNK2OT14UnsizedArrayOfINS_14ResourceRecordEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  85.7k|  {
  541|  85.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  85.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  85.7k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  85.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  85.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  85.7k|  }
_ZNK2OT8OffsetToINS_7ArrayOfINS_7IntTypeIhLj1EEENS2_IjLj4EEEEENS2_IjLj3EEELb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.17k|  {
  427|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.17k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 1.17k]
  |  |  |  Branch (349:45): [True: 1.14k, False: 22]
  |  |  |  Branch (349:45): [True: 0, False: 22]
  |  |  |  Branch (349:45): [True: 1.17k, False: 1]
  |  |  ------------------
  ------------------
  429|  1.17k|		  (this->is_null () ||
  430|  1.17k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.17k|		   neuter (c)));
  432|  1.17k|  }
_ZNK2OT8OffsetToINS_7ArrayOfINS_7IntTypeIhLj1EEENS2_IjLj4EEEEENS2_IjLj3EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.17k|  {
  417|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.17k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.17k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.17k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.17k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.17k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.17k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.17k|    return_trace (true);
  ------------------
  |  |  349|  1.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.17k|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEENS1_IjLj4EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.17k|  {
  718|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.17k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 1.14k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     22|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  1.14k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  1.14k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEENS1_IjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.17k|  {
  730|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.17k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.16k, False: 11]
  |  |  |  Branch (349:45): [True: 1.14k, False: 11]
  |  |  ------------------
  ------------------
  732|  1.17k|  }
_ZNK2OT8OffsetToINS_7ArrayOfINS_7IntTypeIhLj1EEENS2_IjLj4EEEEENS2_IjLj3EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     22|  {
  437|     22|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     22|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_14ResourceRecordEEENS_7IntTypeItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     38|  {
  437|     38|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     38|  }
_ZNK2OT8OffsetToINS_9ArrayOfM1INS_18ResourceTypeRecordENS_7IntTypeItLj2EEEEES4_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     48|  {
  437|     48|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     48|  }
_ZNK2OT8OffsetToINS_11ResourceMapENS_7IntTypeIjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|     50|  {
  437|     50|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     50|  }
_ZN2OTplIPKNS_4fvarELPv0EEERKNS_10AxisRecordERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  7.43k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_10AxisRecordENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  7.43k|  {
  326|  7.43k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  7.43k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 7.43k]
  |  |  ------------------
  ------------------
  327|  7.43k|    return StructAtOffset<const Type> (base, *this);
  328|  7.43k|  }
_ZN2OT12_hb_has_nullINS_10AxisRecordELb1EE8get_nullEv:
  308|      5|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|      5|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_12AxisValueMapENS_7IntTypeItLj2EEEE8get_sizeEv:
  635|  9.78k|  { return len.static_size + len * Type::static_size; }
_ZNK2OT7ArrayOfINS_12AxisValueMapENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  6.85k|  {
  718|  6.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  6.85k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  6.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 169, False: 6.68k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    169|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    169|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.68k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  6.68k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.68k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_12AxisValueMapENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  6.85k|  {
  730|  6.85k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.85k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  6.85k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  13.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.85k, False: 5]
  |  |  |  Branch (349:45): [True: 6.68k, False: 164]
  |  |  ------------------
  ------------------
  732|  6.85k|  }
_ZN2OTplIPKNS_4avarELPv0EEERKNS_16DeltaSetIndexMapERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|     64|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_4avarELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|     64|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_5IndexEEERKT_RKNS_8OffsetToIS6_NS_7IntTypeIjLj4EEELb0EEE:
  337|    281|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_5IndexEEENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|    281|  {
  326|    281|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    281|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 281]
  |  |  ------------------
  ------------------
  327|    281|    return StructAtOffset<const Type> (base, *this);
  328|    281|  }
_ZNK2OT14UnsizedArrayOfINS_5IndexEE8as_arrayEj:
  482|    125|  { return hb_array (arrayZ, len); }
_ZN2OTplIPKvLPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToIS7_S6_Lb0EEE:
  337|    142|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIjLj4EEEE8as_arrayEj:
  482|     62|  { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_4CPALELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIjLj4EEEEERKT_RKNS_8OffsetToIS8_S7_Lb0EEE:
  337|  5.58k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_3SVGELPv0EEERKNS_13SortedArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToIS9_NS7_IjLj4EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13SortedArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEEENS3_IjLj4EEELb1EEclEPKv:
  325|  33.3k|  {
  326|  33.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 81]
  |  |  ------------------
  ------------------
  327|     81|    return StructAtOffset<const Type> (base, *this);
  328|  33.3k|  }
_ZN2OT12_hb_has_nullINS_13SortedArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEEELb1EE8get_nullEv:
  308|  33.3k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEE7bsearchIjEERKS1_RKT_S7_:
  973|  33.3k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  33.3k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKNS_4sbixELPv0EEERKNS_10SBIXStrikeERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|  8.59k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  8.59k|  {
  326|  8.59k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  8.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.62k, False: 1.96k]
  |  |  ------------------
  ------------------
  327|  1.96k|    return StructAtOffset<const Type> (base, *this);
  328|  8.59k|  }
_ZN2OT12_hb_has_nullINS_10SBIXStrikeELb1EE8get_nullEv:
  308|  6.62k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  6.62k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EEES4_EixEi:
  620|  8.59k|  {
  621|  8.59k|    unsigned int i = (unsigned int) i_;
  622|  8.59k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  8.59k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.59k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  8.59k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  8.59k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  8.59k|    return arrayZ[i];
  625|  8.59k|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_9SBIXGlyphENS_7IntTypeIjLj4EEELb1EEEEixEj:
  466|  2.91k|  {
  467|  2.91k|    return arrayZ[i];
  468|  2.91k|  }
_ZN2OTplIPKNS_10SBIXStrikeELPv0EEERKNS_9SBIXGlyphERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|    246|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_9SBIXGlyphENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|    246|  {
  326|    246|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    246|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 34, False: 212]
  |  |  ------------------
  ------------------
  327|    212|    return StructAtOffset<const Type> (base, *this);
  328|    246|  }
_ZN2OT12_hb_has_nullINS_9SBIXGlyphELb1EE8get_nullEv:
  308|     34|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|     34|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_15BitmapSizeTableENS_7IntTypeIjLj4EEEEixEi:
  620|  2.86k|  {
  621|  2.86k|    unsigned int i = (unsigned int) i_;
  622|  2.86k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.86k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.86k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  2.86k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  2.86k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  2.86k|    return arrayZ[i];
  625|  2.86k|  }
_ZN2OTplIPKvLPv0EEERKNS_18IndexSubtableArrayERKT_RKNS_8OffsetToIS4_NS_7IntTypeIjLj4EEELb0EEE:
  337|  1.50M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_18IndexSubtableArrayENS_7IntTypeIjLj4EEELb0EEclEPKv:
  325|  1.50M|  {
  326|  1.50M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.50M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.50M]
  |  |  ------------------
  ------------------
  327|  1.50M|    return StructAtOffset<const Type> (base, *this);
  328|  1.50M|  }
_ZNK2OT14UnsizedArrayOfINS_19IndexSubtableRecordEEixEj:
  466|  3.25k|  {
  467|  3.25k|    return arrayZ[i];
  468|  3.25k|  }
_ZN2OTplIPKvLPv0EEERKNS_13IndexSubtableERKT_RKNS_8OffsetToIS4_NS_7IntTypeIjLj4EEELb1EEE:
  337|    546|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13IndexSubtableENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|    546|  {
  326|    546|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|    546|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 91, False: 455]
  |  |  ------------------
  ------------------
  327|    455|    return StructAtOffset<const Type> (base, *this);
  328|    546|  }
_ZN2OT12_hb_has_nullINS_13IndexSubtableELb1EE8get_nullEv:
  308|     91|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|     91|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeIjLj4EEELb1EEEEixEj:
  466|    184|  {
  467|    184|    return arrayZ[i];
  468|    184|  }
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEEEixEj:
  466|    822|  {
  467|    822|    return arrayZ[i];
  468|    822|  }
_ZNK2OT14UnsizedArrayOfINS_5IndexEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    156|  {
  530|    156|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    156|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    156|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    156|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 139]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    139|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    139|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    139|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_5IndexEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    156|  {
  541|    156|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    156|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    156|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    156|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    156|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    156|  }
_ZNK2OT7ArrayOfINS_21SVGDocumentIndexEntryENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|     48|  {
  730|     48|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     48|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|     48|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     92|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     48|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 44, False: 4]
  |  |  |  Branch (349:45): [True: 34, False: 10]
  |  |  ------------------
  ------------------
  732|     48|  }
_ZNK2OT7ArrayOfINS_15BitmapSizeTableENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_4CBLCEEEEbP21hb_sanitize_context_tDpOT_:
  717|    616|  {
  718|    616|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    616|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    616|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    616|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 604]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     12|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     12|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    604|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    604|    unsigned int count = len;
  722|  3.48k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.14k, False: 344]
  ------------------
  723|  3.14k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 260, False: 2.88k]
  |  |  ------------------
  ------------------
  724|    260|	return_trace (false);
  ------------------
  |  |  349|    864|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    260|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    344|    return_trace (true);
  ------------------
  |  |  349|    344|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    344|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    604|  }
_ZNK2OT7ArrayOfINS_15BitmapSizeTableENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    616|  {
  730|    616|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    616|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    616|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.23k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    616|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 615, False: 1]
  |  |  |  Branch (349:45): [True: 604, False: 11]
  |  |  ------------------
  ------------------
  732|    616|  }
_ZNK2OT8OffsetToINS_18IndexSubtableArrayENS_7IntTypeIjLj4EEELb0EE8sanitizeIJRKS3_EEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.14k|  {
  427|  3.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.14k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  15.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 3.13k]
  |  |  |  Branch (349:45): [True: 2.88k, False: 253]
  |  |  |  Branch (349:45): [True: 0, False: 253]
  |  |  |  Branch (349:45): [True: 3.13k, False: 1]
  |  |  ------------------
  ------------------
  429|  3.14k|		  (this->is_null () ||
  430|  3.14k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.14k|		   neuter (c)));
  432|  3.14k|  }
_ZNK2OT8OffsetToINS_18IndexSubtableArrayENS_7IntTypeIjLj4EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.14k|  {
  417|  3.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.14k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 3.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.13k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.13k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.13k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.13k|    return_trace (true);
  ------------------
  |  |  349|  3.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.13k|  }
_ZNK2OT14UnsizedArrayOfINS_19IndexSubtableRecordEE8sanitizeIJPKNS_18IndexSubtableArrayEEEEbP21hb_sanitize_context_tjDpOT_:
  529|  3.13k|  {
  530|  3.13k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.13k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  3.13k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  3.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 3.12k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     16|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     16|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  3.12k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|   104k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 101k, False: 2.88k]
  ------------------
  534|   101k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   101k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 237, False: 101k]
  |  |  ------------------
  ------------------
  535|    237|	return_trace (false);
  ------------------
  |  |  349|  3.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    237|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|  2.88k|    return_trace (true);
  ------------------
  |  |  349|  2.88k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|  3.12k|  }
_ZNK2OT14UnsizedArrayOfINS_19IndexSubtableRecordEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  3.13k|  {
  541|  3.13k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.13k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  3.13k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  3.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  3.13k|  }
_ZNK2OT8OffsetToINS_13IndexSubtableENS_7IntTypeIjLj4EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   101k|  {
  427|   101k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   101k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   101k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   463k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   101k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 46.1k, False: 55.4k]
  |  |  |  Branch (349:45): [True: 53.4k, False: 1.94k]
  |  |  |  Branch (349:45): [True: 1.73k, False: 209]
  |  |  |  Branch (349:45): [True: 101k, False: 2]
  |  |  ------------------
  ------------------
  429|   101k|		  (this->is_null () ||
  430|   101k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   101k|		   neuter (c)));
  432|   101k|  }
_ZNK2OT8OffsetToINS_13IndexSubtableENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   101k|  {
  417|   101k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   101k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   101k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   101k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 101k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   101k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   101k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 46.1k, False: 55.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  46.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  46.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  55.4k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  55.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 55.4k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  55.4k|    return_trace (true);
  ------------------
  |  |  349|  55.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  55.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  55.4k|  }
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeIjLj4EEELb1EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|  10.8k|  {
  530|  10.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|  10.8k|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|  10.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 102, False: 10.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|    102|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    102|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|  10.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  10.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeIjLj4EEELb1EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  10.8k|  {
  541|  10.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  10.8k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  10.8k|  }
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEEE8sanitizeIJEEEbP21hb_sanitize_context_tjDpOT_:
  529|    563|  {
  530|    563|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    563|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    563|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    563|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39, False: 524]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|     39|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     39|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    524|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    524|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    524|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  535|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|      0|  }
_ZNK2OT14UnsizedArrayOfINS_6OffsetINS_7IntTypeItLj2EEELb1EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    563|  {
  541|    563|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    563|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    563|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    563|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    563|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    563|  }
_ZNK2OT8OffsetToINS_13IndexSubtableENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.94k|  {
  437|  1.94k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.94k|    return c->try_set (this, 0);
  439|  1.94k|  }
_ZN2OT8OffsetToINS_13IndexSubtableENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.73k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_18IndexSubtableArrayENS_7IntTypeIjLj4EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|    253|  {
  437|    253|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|    253|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EEES4_E8sanitizeIJPKNS_4sbixEEEEbP21hb_sanitize_context_tDpOT_:
  717|    378|  {
  718|    378|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    378|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    378|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    378|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 367]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    367|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    367|    unsigned int count = len;
  722|  7.02k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.75k, False: 264]
  ------------------
  723|  6.75k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.75k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 103, False: 6.65k]
  |  |  ------------------
  ------------------
  724|    103|	return_trace (false);
  ------------------
  |  |  349|    470|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    103|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    264|    return_trace (true);
  ------------------
  |  |  349|    264|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    264|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    367|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|    378|  {
  730|    378|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    378|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    378|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    756|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    378|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 378, False: 0]
  |  |  |  Branch (349:45): [True: 367, False: 11]
  |  |  ------------------
  ------------------
  732|    378|  }
_ZNK2OT8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  6.75k|  {
  427|  6.75k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.75k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  6.75k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  31.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.75k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.07k, False: 2.68k]
  |  |  |  Branch (349:45): [True: 1.01k, False: 1.66k]
  |  |  |  Branch (349:45): [True: 1.56k, False: 103]
  |  |  |  Branch (349:45): [True: 6.75k, False: 0]
  |  |  ------------------
  ------------------
  429|  6.75k|		  (this->is_null () ||
  430|  6.75k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  6.75k|		   neuter (c)));
  432|  6.75k|  }
_ZNK2OT8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  6.75k|  {
  417|  6.75k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.75k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  6.75k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  6.75k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.75k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  6.75k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  6.75k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.07k, False: 2.68k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  4.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.68k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.68k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.68k|    return_trace (true);
  ------------------
  |  |  349|  2.68k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.68k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.68k|  }
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_9SBIXGlyphENS_7IntTypeIjLj4EEELb1EEEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|  1.04k|  {
  541|  1.04k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.04k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|  1.04k|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|  1.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|  1.04k|  }
_ZNK2OT8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.66k|  {
  437|  1.66k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.66k|    return c->try_set (this, 0);
  439|  1.66k|  }
_ZN2OT8OffsetToINS_10SBIXStrikeENS_7IntTypeIjLj4EEELb1EEaSEj:
  322|  1.56k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIhLj1EEEE8as_arrayEj:
  482|   238k|  { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeItLj2EEENS3_IhLj1EEEEES4_EixEi:
  620|  4.22k|  {
  621|  4.22k|    unsigned int i = (unsigned int) i_;
  622|  4.22k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  4.22k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.22k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  4.22k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  4.22k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  4.22k|    return arrayZ[i];
  625|  4.22k|  }
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeItLj2EEENS3_IhLj1EEEEES4_E8sanitizeIJDnRjEEEbP21hb_sanitize_context_tDpOT_:
  717|     76|  {
  718|     76|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     76|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|     76|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     76|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 75]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|     75|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|     75|    unsigned int count = len;
  722|  2.62k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 2.56k, False: 64]
  ------------------
  723|  2.56k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  2.56k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 2.54k]
  |  |  ------------------
  ------------------
  724|     11|	return_trace (false);
  ------------------
  |  |  349|     86|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|     64|    return_trace (true);
  ------------------
  |  |  349|     64|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     64|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|     75|  }
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeItLj2EEENS3_IhLj1EEEEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|     76|  {
  730|     76|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     76|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|     76|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    152|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     76|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 76, False: 0]
  |  |  |  Branch (349:45): [True: 75, False: 1]
  |  |  ------------------
  ------------------
  732|     76|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEES2_E8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|      6|  {
  718|      6|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      6|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|      6|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|      6|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 4]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|      4|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEES2_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|      6|  {
  730|      6|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      6|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|      6|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5, False: 1]
  |  |  |  Branch (349:45): [True: 4, False: 1]
  |  |  ------------------
  ------------------
  732|      6|  }
_ZNK2OT7ArrayOfINS_7IntTypeIhLj1EEES2_EixEi:
  620|      2|  {
  621|      2|    unsigned int i = (unsigned int) i_;
  622|      2|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|      2|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|      1|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|      1|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|      1|    return arrayZ[i];
  625|      2|  }
_ZNK2OT7ArrayOfIN3CFF15Encoding1_RangeENS_7IntTypeIhLj1EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|      7|  {
  718|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|      7|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|      7|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 5]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|      5|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfIN3CFF15Encoding1_RangeENS_7IntTypeIhLj1EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|      7|  {
  730|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|      7|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6, False: 1]
  |  |  |  Branch (349:45): [True: 5, False: 1]
  |  |  ------------------
  ------------------
  732|      7|  }
_ZNK2OT7ArrayOfIN3CFF15Encoding1_RangeENS_7IntTypeIhLj1EEEEixEi:
  620|      5|  {
  621|      5|    unsigned int i = (unsigned int) i_;
  622|      5|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|      5|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 4]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|      4|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|      4|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|      4|    return arrayZ[i];
  625|      5|  }
_ZNK2OT7ArrayOfIN3CFF12SuppEncodingENS_7IntTypeIhLj1EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|      7|  {
  718|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|      7|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|      7|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 2]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|      2|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfIN3CFF12SuppEncodingENS_7IntTypeIhLj1EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|      7|  {
  730|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|      7|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4, False: 3]
  |  |  |  Branch (349:45): [True: 2, False: 2]
  |  |  ------------------
  ------------------
  732|      7|  }
_ZNK2OT14UnsizedArrayOfIN3CFF13Charset_RangeINS_7IntTypeIhLj1EEEEEEixEj:
  466|   153k|  {
  467|   153k|    return arrayZ[i];
  468|   153k|  }
_ZNK2OT14UnsizedArrayOfIN3CFF13Charset_RangeINS_7IntTypeItLj2EEEEEEixEj:
  466|  1.00M|  {
  467|  1.00M|    return arrayZ[i];
  468|  1.00M|  }
_ZNK2OT8OffsetToIN3CFF8CFFIndexINS_7IntTypeItLj2EEEEENS3_IhLj1EEELb0EEclEPKv:
  325|  1.69k|  {
  326|  1.69k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.69k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.69k]
  |  |  ------------------
  ------------------
  327|  1.69k|    return StructAtOffset<const Type> (base, *this);
  328|  1.69k|  }
_ZNK2OT6OffsetINS_7IntTypeIhLj1EEELb0EE7is_nullEv:
  235|  2.93k|  bool is_null () const { return has_null && 0 == *this; }
  ------------------
  |  Branch (235:34): [Folded - Ignored]
  |  Branch (235:46): [True: 0, False: 0]
  ------------------
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeIjLj4EEENS3_ItLj2EEEEES4_EixEi:
  620|     17|  {
  621|     17|    unsigned int i = (unsigned int) i_;
  622|     17|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|     17|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 17]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|     17|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|     17|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|     17|    return arrayZ[i];
  625|     17|  }
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeIjLj4EEENS3_ItLj2EEEEES4_E8sanitizeIJDnRjEEEbP21hb_sanitize_context_tDpOT_:
  717|     23|  {
  718|     23|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     23|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|     23|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     23|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 15]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      8|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|     15|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|     15|    unsigned int count = len;
  722|    131|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 126, False: 5]
  ------------------
  723|    126|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|    126|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 116]
  |  |  ------------------
  ------------------
  724|     10|	return_trace (false);
  ------------------
  |  |  349|     25|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      5|    return_trace (true);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|     15|  }
_ZNK2OT7ArrayOfIN3CFF17FDSelect3_4_RangeINS_7IntTypeIjLj4EEENS3_ItLj2EEEEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|     23|  {
  730|     23|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     23|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|     23|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     46|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     23|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 23, False: 0]
  |  |  |  Branch (349:45): [True: 15, False: 8]
  |  |  ------------------
  ------------------
  732|     23|  }
_ZN2OTplIPKNS_4cff2ELPv0EEERKN3CFF7TopDictERKT_RKNS_8OffsetToIS6_NS_7IntTypeIhLj1EEELb0EEE:
  337|  1.24k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3CFF7TopDictENS_7IntTypeIhLj1EEELb0EEclEPKv:
  325|  1.24k|  {
  326|  1.24k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.24k]
  |  |  ------------------
  ------------------
  327|  1.24k|    return StructAtOffset<const Type> (base, *this);
  328|  1.24k|  }
_ZNK2OT13SortedArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE7bsearchINS1_15hb_glyph_pair_tEEERKS2_RKT_SB_:
  973|   134k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE8as_arrayEv:
  939|   134k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKN3AAT10StateTableINS1_13ObsoleteTypesEvEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|    633|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS_20KernOTSubTableHeaderEEELPv0EEERKNS1_10ClassTableINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_SA_Lb0EEE:
  337|   107k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeItLj2EEEEES4_Lb0EEclEPKv:
  325|   692k|  {
  326|   692k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   692k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692k]
  |  |  ------------------
  ------------------
  327|   692k|    return StructAtOffset<const Type> (base, *this);
  328|   692k|  }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS_20KernOTSubTableHeaderEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|  53.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS_21KernAATSubTableHeaderEEELPv0EEERKNS1_10ClassTableINS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToISB_SA_Lb0EEE:
  337|   584k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKN3AAT19KerxSubTableFormat2INS_21KernAATSubTableHeaderEEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIsLj2EEEEERKT_RKNS_8OffsetToISB_NS9_ItLj2EEELb0EEE:
  337|   292k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|    336|  {
  718|    336|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    336|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    336|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    336|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 326]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     10|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     10|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    326|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    326|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    326|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfIN3AAT8KernPairENS_15BinSearchHeaderINS_7IntTypeItLj2EEEEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    336|  {
  730|    336|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    336|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    336|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    668|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    336|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 332, False: 4]
  |  |  |  Branch (349:45): [True: 326, False: 6]
  |  |  ------------------
  ------------------
  732|    336|  }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeItLj2EEEEES4_Lb0EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    306|  {
  427|    306|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    306|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    306|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    306|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 306]
  |  |  |  Branch (349:45): [True: 295, False: 11]
  |  |  |  Branch (349:45): [True: 0, False: 11]
  |  |  |  Branch (349:45): [True: 306, False: 0]
  |  |  ------------------
  ------------------
  429|    306|		  (this->is_null () ||
  430|    306|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    306|		   neuter (c)));
  432|    306|  }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeItLj2EEEEES4_Lb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    306|  {
  417|    306|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    306|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    306|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    306|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 306]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    306|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    306|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 306]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    306|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    306|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 306]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    306|    return_trace (true);
  ------------------
  |  |  349|    306|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    306|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    306|  }
_ZNK2OT8OffsetToIN3AAT10ClassTableINS_7IntTypeItLj2EEEEES4_Lb0EE6neuterEP21hb_sanitize_context_t:
  436|     11|  {
  437|     11|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|     11|  }
_ZNK2OT14UnsizedArrayOfINS_7IntTypeIsLj2EEEEcvPKT_IvEEv:
  478|     50|  template <typename T> operator const T * () const { return arrayZ; }
_ZNK2OT7ArrayOfINS_7DataMapENS_7IntTypeIjLj4EEEE7lsearchIjEERKS1_RKT_S7_:
  661|  33.3k|  { return *as_array ().lsearch (x, &not_found); }
_ZNK2OT7ArrayOfINS_7DataMapENS_7IntTypeIjLj4EEEE8as_arrayEv:
  642|  33.3k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT7ArrayOfINS_7DataMapENS_7IntTypeIjLj4EEEE8sanitizeIJPKNS_4metaEEEEbP21hb_sanitize_context_tDpOT_:
  717|     49|  {
  718|     49|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     49|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|     49|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     49|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 36]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|     36|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|     36|    unsigned int count = len;
  722|  6.90k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.88k, False: 15]
  ------------------
  723|  6.88k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.88k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21, False: 6.86k]
  |  |  ------------------
  ------------------
  724|     21|	return_trace (false);
  ------------------
  |  |  349|     57|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     21|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|     15|    return_trace (true);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|     36|  }
_ZNK2OT7ArrayOfINS_7DataMapENS_7IntTypeIjLj4EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|     49|  {
  730|     49|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     49|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|     49|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     98|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     49|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 49, False: 0]
  |  |  |  Branch (349:45): [True: 36, False: 13]
  |  |  ------------------
  ------------------
  732|     49|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_ItLj2EEELb0EE8sanitizeIJRKS5_EEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   581k|  {
  427|   581k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   581k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   581k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  2.90M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   581k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 581k]
  |  |  |  Branch (349:45): [True: 581k, False: 151]
  |  |  |  Branch (349:45): [True: 0, False: 151]
  |  |  |  Branch (349:45): [True: 581k, False: 1]
  |  |  ------------------
  ------------------
  429|   581k|		  (this->is_null () ||
  430|   581k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   581k|		   neuter (c)));
  432|   581k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_ItLj2EEELb0EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   581k|  {
  417|   581k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   581k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   581k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 581k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   581k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 581k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   581k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 581k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   581k|    return_trace (true);
  ------------------
  |  |  349|   581k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   581k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   581k|  }
_ZNK2OT8OffsetToINS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEENS2_ItLj2EEELb0EE6neuterEP21hb_sanitize_context_t:
  436|    151|  {
  437|    151|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|      0|    return c->try_set (this, 0);
  439|    151|  }
_ZN2OTplIPKNS_4nameELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToIS8_NS6_ItLj2EEELb0EEE:
  337|    841|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT14UnsizedArrayOfINS_10NameRecordEE8sanitizeIJRPKvEEEbP21hb_sanitize_context_tjDpOT_:
  529|    841|  {
  530|    841|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    841|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  531|    841|    if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  259|    841|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 841]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  532|    841|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (532:9): [Folded - Ignored]
  ------------------
  533|   582k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (533:30): [True: 581k, False: 688]
  ------------------
  534|   581k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   581k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 581k]
  |  |  ------------------
  ------------------
  535|    153|	return_trace (false);
  ------------------
  |  |  349|    994|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    153|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  536|    688|    return_trace (true);
  ------------------
  |  |  349|    688|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    688|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  537|    841|  }
_ZNK2OT14UnsizedArrayOfINS_10NameRecordEE16sanitize_shallowEP21hb_sanitize_context_tj:
  540|    841|  {
  541|    841|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    841|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  542|    841|    return_trace (c->check_array (arrayZ, count));
  ------------------
  |  |  349|    841|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    841|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  543|    841|  }
_ZN2OTplI13hb_blob_ptr_tINS_4nameEELPv0EEERKNS_14UnsizedArrayOfINS_7IntTypeIhLj1EEEEERKT_RKNS_8OffsetToIS8_NS6_ItLj2EEELb0EEE:
  337|  32.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    875|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EE19serialize_serializeIJR17hb_sorted_array_tIKNS_11HBGlyphID16EEEEEbP22hb_serialize_context_tDpOT_:
  374|    767|  {
  375|    767|    *this = 0;
  376|       |
  377|    767|    Type* obj = c->push<Type> ();
  378|    767|    bool ret = obj->serialize (c, std::forward<Ts> (ds)...);
  379|       |
  380|    767|    if (ret)
  ------------------
  |  Branch (380:9): [True: 750, False: 17]
  ------------------
  381|    750|      c->add_link (*this, c->pop_pack ());
  382|     17|    else
  383|     17|      c->pop_discard ();
  384|       |
  385|    767|    return ret;
  386|    767|  }
_ZN2OT13SortedArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI17hb_sorted_array_tIKS1_ELPv0EEEbP22hb_serialize_context_tT_:
  962|    747|  {
  963|    747|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    747|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  964|    747|    bool ret = ArrayOf<Type, LenType>::serialize (c, items);
  965|    747|    return_trace (ret);
  ------------------
  |  |  349|    747|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    747|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  966|    747|  }
_ZN2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI17hb_sorted_array_tIKS1_ELPv0EEEbP22hb_serialize_context_tT_:
  682|    747|  {
  683|    747|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    747|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  684|    747|    unsigned count = hb_len (items);
  685|    747|    if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  259|    747|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 747]
  |  |  ------------------
  ------------------
                  if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  686|       |    /* TODO Umm. Just exhaust the iterator instead?  Being extra
  687|       |     * cautious right now.. */
  688|  5.51k|    for (unsigned i = 0; i < count; i++, ++items)
  ------------------
  |  Branch (688:26): [True: 4.76k, False: 747]
  ------------------
  689|  4.76k|      arrayZ[i] = *items;
  690|    747|    return_trace (true);
  ------------------
  |  |  349|    747|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    747|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  691|    747|  }
_ZN2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E9serializeEP22hb_serialize_context_tjb:
  672|    850|  {
  673|    850|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    850|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  674|    850|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  675|    850|    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  676|    850|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  677|    850|    return_trace (true);
  ------------------
  |  |  349|    850|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    850|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  678|    850|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8get_sizeEv:
  635|    850|  { return len.static_size + len * Type::static_size; }
_ZN2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  627|  5.16k|  {
  628|  5.16k|    unsigned int i = (unsigned int) i_;
  629|  5.16k|    if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.16k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  630|  5.16k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  5.16k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  631|  5.16k|    return arrayZ[i];
  632|  5.16k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE19serialize_serializeIJ10hb_array_tIKNS_11HBGlyphID16EESA_IKjERSD_EEEbP22hb_serialize_context_tDpOT_:
  374|  5.16k|  {
  375|  5.16k|    *this = 0;
  376|       |
  377|  5.16k|    Type* obj = c->push<Type> ();
  378|  5.16k|    bool ret = obj->serialize (c, std::forward<Ts> (ds)...);
  379|       |
  380|  5.16k|    if (ret)
  ------------------
  |  Branch (380:9): [True: 5.07k, False: 83]
  ------------------
  381|  5.07k|      c->add_link (*this, c->pop_pack ());
  382|     83|    else
  383|     83|      c->pop_discard ();
  384|       |
  385|  5.16k|    return ret;
  386|  5.16k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  6.49k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E9serializeEP22hb_serialize_context_tjb:
  672|  5.13k|  {
  673|  5.13k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  5.13k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  674|  5.13k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  675|  5.13k|    c->check_assign (len, items_len, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  676|  5.13k|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  677|  5.13k|    return_trace (true);
  ------------------
  |  |  349|  5.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.13k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  678|  5.13k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8get_sizeEv:
  635|  5.13k|  { return len.static_size + len * Type::static_size; }
_ZN2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  627|  14.8k|  {
  628|  14.8k|    unsigned int i = (unsigned int) i_;
  629|  14.8k|    if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  630|  14.8k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  14.8k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  631|  14.8k|    return arrayZ[i];
  632|  14.8k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE19serialize_serializeIJRKNS_11HBGlyphID16E10hb_array_tISB_EEEEbP22hb_serialize_context_tDpOT_:
  374|  14.8k|  {
  375|  14.8k|    *this = 0;
  376|       |
  377|  14.8k|    Type* obj = c->push<Type> ();
  378|  14.8k|    bool ret = obj->serialize (c, std::forward<Ts> (ds)...);
  379|       |
  380|  14.8k|    if (ret)
  ------------------
  |  Branch (380:9): [True: 14.8k, False: 56]
  ------------------
  381|  14.8k|      c->add_link (*this, c->pop_pack ());
  382|     56|    else
  383|     56|      c->pop_discard ();
  384|       |
  385|  14.8k|    return ret;
  386|  14.8k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  24.1k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI10hb_array_tIKS1_ELPv0EEEbP22hb_serialize_context_tT_:
  844|  14.8k|  {
  845|  14.8k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  14.8k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  846|  14.8k|    unsigned count = hb_len (items);
  847|  14.8k|    if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  848|       |    /* TODO Umm. Just exhaust the iterator instead?  Being extra
  849|       |     * cautious right now.. */
  850|  30.3k|    for (unsigned i = 0; i < count; i++, ++items)
  ------------------
  |  Branch (850:26): [True: 15.5k, False: 14.8k]
  ------------------
  851|  15.5k|      arrayZ[i] = *items;
  852|  14.8k|    return_trace (true);
  ------------------
  |  |  349|  14.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  853|  14.8k|  }
_ZN2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeEP22hb_serialize_context_tjb:
  834|  14.8k|  {
  835|  14.8k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  14.8k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  836|  14.8k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  837|  14.8k|    c->check_assign (lenP1, items_len + 1, HB_SERIALIZE_ERROR_ARRAY_OVERFLOW);
  838|  14.8k|    if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_size (this, get_size (), clear))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  839|  14.8k|    return_trace (true);
  ------------------
  |  |  349|  14.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  840|  14.8k|  }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE8get_sizeEv:
  814|  14.8k|  { return lenP1.static_size + get_length () * Type::static_size; }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE10get_lengthEv:
  816|  14.8k|  unsigned get_length () const { return lenP1 ? lenP1 - 1 : 0; }
  ------------------
  |  Branch (816:41): [True: 14.8k, False: 0]
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS2_9GSUB_impl30ReverseChainSingleSubstFormat1EEEEbP21hb_sanitize_context_tDpOT_:
  717|  21.0k|  {
  718|  21.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  21.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  21.0k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  21.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 350, False: 20.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    350|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    350|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  20.6k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  20.6k|    unsigned int count = len;
  722|  3.40M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.38M, False: 20.6k]
  ------------------
  723|  3.38M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.38M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 3.38M]
  |  |  ------------------
  ------------------
  724|     28|	return_trace (false);
  ------------------
  |  |  349|  20.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  20.6k|    return_trace (true);
  ------------------
  |  |  349|  20.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  20.6k|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1ELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToIS8_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.18M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl20SingleSubstFormat1_3INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   220k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl20SingleSubstFormat2_4INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   126k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl20SingleSubstFormat1_3INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  6.22k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl20SingleSubstFormat2_4INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  6.84k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.89M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  26.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.41M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   130k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  3.15M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_11LigatureSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.31M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.31M|  {
  326|  2.31M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.31M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 607k, False: 1.70M]
  |  |  ------------------
  ------------------
  327|  1.70M|    return StructAtOffset<const Type> (base, *this);
  328|  2.31M|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEELb1EE8get_nullEv:
  308|   607k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   607k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E4iterEv:
  647|  51.9k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8as_arrayEv:
  642|  51.9k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEELPv0EEERKNS2_8LigatureIS4_EERKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|  1.16M|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  19.9M|  {
  326|  19.9M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  19.9M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.8M, False: 6.12M]
  |  |  ------------------
  ------------------
  327|  6.12M|    return StructAtOffset<const Type> (base, *this);
  328|  19.9M|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEELb1EE8get_nullEv:
  308|  13.8M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  13.8M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS1_6Common8CoverageERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|   156k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_11LigatureSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  89.6k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  89.6k|  {
  326|  89.6k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  89.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12.9k, False: 76.6k]
  |  |  ------------------
  ------------------
  327|  76.6k|    return StructAtOffset<const Type> (base, *this);
  328|  89.6k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEELb1EE8get_nullEv:
  308|  12.9k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  12.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES8_E4iterEv:
  647|  3.17k|    iter_t   iter () const { return as_array (); }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8as_arrayEv:
  642|  3.17k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEELPv0EEERKNS2_8LigatureIS4_EERKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEERKT_:
  340|  3.61k|  friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   169k|  {
  326|   169k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   169k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 63.5k, False: 106k]
  |  |  ------------------
  ------------------
  327|   106k|    return StructAtOffset<const Type> (base, *this);
  328|   169k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEELb1EE8get_nullEv:
  308|  63.5k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  63.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEEELPv0EEERKNS3_19SubstLookupSubTableERKT_RKNS_8OffsetToIS9_NS_7IntTypeIjLj4EEELb1EEE:
  337|  7.49k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeIjLj4EEELb1EEclEPKv:
  325|  7.49k|  {
  326|  7.49k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  7.49k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.14k, False: 6.35k]
  |  |  ------------------
  ------------------
  327|  6.35k|    return StructAtOffset<const Type> (base, *this);
  328|  7.49k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl19SubstLookupSubTableELb1EE8get_nullEv:
  308|  3.67M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  3.67M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_6LookupEjEEEbP21hb_sanitize_context_tDpOT_:
  717|   108k|  {
  718|   108k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   108k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|   108k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   108k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 108k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|   108k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|   108k|    unsigned int count = len;
  722|  3.69M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.58M, False: 103k]
  ------------------
  723|  3.58M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.95k, False: 3.58M]
  |  |  ------------------
  ------------------
  724|  4.95k|	return_trace (false);
  ------------------
  |  |  349|   113k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|   103k|    return_trace (true);
  ------------------
  |  |  349|   103k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   103k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|   108k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|   108k|  {
  730|   108k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   108k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|   108k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   216k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   108k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 108k, False: 5]
  |  |  |  Branch (349:45): [True: 108k, False: 9]
  |  |  ------------------
  ------------------
  732|   108k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EE8sanitizeIJjEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.58M|  {
  427|  3.58M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.58M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.58M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  17.0M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.58M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 989k, False: 2.59M]
  |  |  |  Branch (349:45): [True: 2.54M, False: 56.2k]
  |  |  |  Branch (349:45): [True: 51.5k, False: 4.71k]
  |  |  |  Branch (349:45): [True: 3.58M, False: 237]
  |  |  ------------------
  ------------------
  429|  3.58M|		  (this->is_null () ||
  430|  3.58M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.58M|		   neuter (c)));
  432|  3.58M|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.58M|  {
  417|  3.58M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.58M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.58M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 237, False: 3.58M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    237|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    237|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.58M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.58M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 989k, False: 2.59M]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   989k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   989k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  2.59M|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  2.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.59M]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  2.59M|    return_trace (true);
  ------------------
  |  |  349|  2.59M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.59M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  2.59M|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_22MultipleSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  23.2k|  {
  718|  23.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  23.2k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  23.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 355, False: 22.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    355|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    355|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  22.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  22.8k|    unsigned int count = len;
  722|   228k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 206k, False: 21.7k]
  ------------------
  723|   206k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   206k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.14k, False: 205k]
  |  |  ------------------
  ------------------
  724|  1.14k|	return_trace (false);
  ------------------
  |  |  349|  24.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  21.7k|    return_trace (true);
  ------------------
  |  |  349|  21.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  22.8k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  23.2k|  {
  730|  23.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  23.2k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  46.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 23.1k, False: 71]
  |  |  |  Branch (349:45): [True: 22.8k, False: 284]
  |  |  ------------------
  ------------------
  732|  23.2k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   206k|  {
  427|   206k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   206k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   206k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   934k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   206k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 112k, False: 94.4k]
  |  |  |  Branch (349:45): [True: 81.5k, False: 12.8k]
  |  |  |  Branch (349:45): [True: 11.6k, False: 1.13k]
  |  |  |  Branch (349:45): [True: 206k, False: 13]
  |  |  ------------------
  ------------------
  429|   206k|		  (this->is_null () ||
  430|   206k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   206k|		   neuter (c)));
  432|   206k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   206k|  {
  417|   206k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   206k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   206k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   206k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 206k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   206k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   206k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 112k, False: 94.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   112k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   112k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  94.4k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  94.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 94.4k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  94.4k|    return_trace (true);
  ------------------
  |  |  349|  94.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  94.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  94.4k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  12.8k|  {
  437|  12.8k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  12.8k|    return c->try_set (this, 0);
  439|  12.8k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  11.6k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE8sanitizeIJPKNS3_22MultipleSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  4.18k|  {
  718|  4.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  4.18k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  4.18k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 462, False: 3.72k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    462|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    462|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  3.72k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  3.72k|    unsigned int count = len;
  722|   230k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 226k, False: 3.67k]
  ------------------
  723|   226k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   226k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 52, False: 226k]
  |  |  ------------------
  ------------------
  724|     52|	return_trace (false);
  ------------------
  |  |  349|  3.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     52|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  3.67k|    return_trace (true);
  ------------------
  |  |  349|  3.67k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  3.72k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  4.18k|  {
  730|  4.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  4.18k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  8.33k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.14k, False: 46]
  |  |  |  Branch (349:45): [True: 3.72k, False: 416]
  |  |  ------------------
  ------------------
  732|  4.18k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   226k|  {
  427|   226k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   226k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   226k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   924k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   226k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 210k, False: 16.2k]
  |  |  |  Branch (349:45): [True: 14.9k, False: 1.26k]
  |  |  |  Branch (349:45): [True: 1.21k, False: 48]
  |  |  |  Branch (349:45): [True: 226k, False: 4]
  |  |  ------------------
  ------------------
  429|   226k|		  (this->is_null () ||
  430|   226k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   226k|		   neuter (c)));
  432|   226k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   226k|  {
  417|   226k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   226k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   226k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   226k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 226k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   226k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   226k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 210k, False: 16.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   210k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   210k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  16.2k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  16.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 16.2k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  16.2k|    return_trace (true);
  ------------------
  |  |  349|  16.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  16.2k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.26k|  {
  437|  1.26k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.26k|    return c->try_set (this, 0);
  439|  1.26k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.21k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_23AlternateSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  5.10k|  {
  718|  5.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  5.10k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  5.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 230, False: 4.87k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    230|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    230|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  4.87k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  4.87k|    unsigned int count = len;
  722|   112k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 107k, False: 4.80k]
  ------------------
  723|   107k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   107k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 62, False: 107k]
  |  |  ------------------
  ------------------
  724|     62|	return_trace (false);
  ------------------
  |  |  349|  4.93k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     62|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  4.80k|    return_trace (true);
  ------------------
  |  |  349|  4.80k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.80k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  4.87k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  5.10k|  {
  730|  5.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  5.10k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  10.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 5.02k, False: 79]
  |  |  |  Branch (349:45): [True: 4.87k, False: 151]
  |  |  ------------------
  ------------------
  732|  5.10k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   107k|  {
  427|   107k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   107k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   107k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   499k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   107k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 39.6k, False: 67.9k]
  |  |  |  Branch (349:45): [True: 67.0k, False: 922]
  |  |  |  Branch (349:45): [True: 875, False: 47]
  |  |  |  Branch (349:45): [True: 107k, False: 15]
  |  |  ------------------
  ------------------
  429|   107k|		  (this->is_null () ||
  430|   107k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   107k|		   neuter (c)));
  432|   107k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   107k|  {
  417|   107k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   107k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   107k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   107k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 107k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   107k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   107k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39.6k, False: 67.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  39.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  39.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  67.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  67.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 67.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  67.9k|    return_trace (true);
  ------------------
  |  |  349|  67.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  67.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  67.9k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    922|  {
  437|    922|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    922|    return c->try_set (this, 0);
  439|    922|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE8sanitizeIJPKNS3_23AlternateSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  3.23k|  {
  718|  3.23k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.23k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  3.23k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  3.23k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 264, False: 2.96k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    264|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    264|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  2.96k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  2.96k|    unsigned int count = len;
  722|  16.2k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 13.3k, False: 2.94k]
  ------------------
  723|  13.3k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  13.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 13.2k]
  |  |  ------------------
  ------------------
  724|     28|	return_trace (false);
  ------------------
  |  |  349|  2.99k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  2.94k|    return_trace (true);
  ------------------
  |  |  349|  2.94k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.94k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  2.96k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  3.23k|  {
  730|  3.23k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.23k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  3.23k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  6.37k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.23k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.14k, False: 86]
  |  |  |  Branch (349:45): [True: 2.96k, False: 178]
  |  |  ------------------
  ------------------
  732|  3.23k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  13.3k|  {
  427|  13.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  13.3k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  56.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.2k, False: 3.03k]
  |  |  |  Branch (349:45): [True: 2.37k, False: 660]
  |  |  |  Branch (349:45): [True: 634, False: 26]
  |  |  |  Branch (349:45): [True: 13.3k, False: 2]
  |  |  ------------------
  ------------------
  429|  13.3k|		  (this->is_null () ||
  430|  13.3k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  13.3k|		   neuter (c)));
  432|  13.3k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  13.3k|  {
  417|  13.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  13.3k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  13.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 13.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  13.3k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  13.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.2k, False: 3.03k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  10.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  3.03k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  3.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.03k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  3.03k|    return_trace (true);
  ------------------
  |  |  349|  3.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  3.03k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    660|  {
  437|    660|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    660|    return c->try_set (this, 0);
  439|    660|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    634|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_22LigatureSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  15.7k|  {
  718|  15.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  15.7k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  15.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 350, False: 15.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    350|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    350|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  15.3k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  15.3k|    unsigned int count = len;
  722|   205k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 190k, False: 14.9k]
  ------------------
  723|   190k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   190k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 428, False: 190k]
  |  |  ------------------
  ------------------
  724|    428|	return_trace (false);
  ------------------
  |  |  349|  15.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    428|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  14.9k|    return_trace (true);
  ------------------
  |  |  349|  14.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  15.3k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  15.7k|  {
  730|  15.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  15.7k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  31.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.6k, False: 84]
  |  |  |  Branch (349:45): [True: 15.3k, False: 266]
  |  |  ------------------
  ------------------
  732|  15.7k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   190k|  {
  427|   190k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   190k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   190k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   809k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   190k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 145k, False: 45.1k]
  |  |  |  Branch (349:45): [True: 43.4k, False: 1.74k]
  |  |  |  Branch (349:45): [True: 1.33k, False: 405]
  |  |  |  Branch (349:45): [True: 190k, False: 23]
  |  |  ------------------
  ------------------
  429|   190k|		  (this->is_null () ||
  430|   190k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   190k|		   neuter (c)));
  432|   190k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   190k|  {
  417|   190k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   190k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   190k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   190k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 23, False: 190k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     23|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     23|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   190k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   190k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 145k, False: 45.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   145k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   145k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  45.1k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  45.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 45.1k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  45.1k|    return_trace (true);
  ------------------
  |  |  349|  45.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  45.1k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_11LigatureSetIS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  45.1k|  {
  718|  45.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  45.1k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  45.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.35k, False: 43.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.35k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.35k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  43.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  43.8k|    unsigned int count = len;
  722|  2.12M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 2.08M, False: 43.4k]
  ------------------
  723|  2.08M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  2.08M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 388, False: 2.08M]
  |  |  ------------------
  ------------------
  724|    388|	return_trace (false);
  ------------------
  |  |  349|  44.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    388|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  43.4k|    return_trace (true);
  ------------------
  |  |  349|  43.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  43.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  43.8k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  45.1k|  {
  730|  45.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  45.1k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  89.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 44.2k, False: 867]
  |  |  |  Branch (349:45): [True: 43.8k, False: 488]
  |  |  ------------------
  ------------------
  732|  45.1k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  2.08M|  {
  427|  2.08M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.08M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  2.08M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  8.50M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.08M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.92M, False: 155k]
  |  |  |  Branch (349:45): [True: 146k, False: 9.61k]
  |  |  |  Branch (349:45): [True: 9.24k, False: 369]
  |  |  |  Branch (349:45): [True: 2.08M, False: 19]
  |  |  ------------------
  ------------------
  429|  2.08M|		  (this->is_null () ||
  430|  2.08M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  2.08M|		   neuter (c)));
  432|  2.08M|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  2.08M|  {
  417|  2.08M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.08M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  2.08M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  2.08M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 2.08M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     19|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  2.08M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  2.08M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.92M, False: 155k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.92M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.92M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   155k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   155k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 155k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   155k|    return_trace (true);
  ------------------
  |  |  349|   155k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   155k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   155k|  }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  857|   149k|  {
  858|   149k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   149k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  859|   149k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|   149k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.76k, False: 146k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  2.76k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.76k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  860|   146k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|   146k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   146k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (860:9): [Folded - Ignored]
  ------------------
  861|      0|    unsigned int count = get_length ();
  862|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (862:30): [True: 0, False: 0]
  ------------------
  863|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  864|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  865|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  866|      0|  }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  870|   149k|  {
  871|   149k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   149k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  872|   149k|    return_trace (lenP1.sanitize (c) &&
  ------------------
  |  |  349|   547k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   149k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 48.7k, False: 100k]
  |  |  |  Branch (349:45): [True: 97.6k, False: 2.67k]
  |  |  |  Branch (349:45): [True: 149k, False: 83]
  |  |  ------------------
  ------------------
  873|   149k|		  (!lenP1 || c->check_array (arrayZ, lenP1 - 1)));
  874|   149k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  9.61k|  {
  437|  9.61k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  9.61k|    return c->try_set (this, 0);
  439|  9.61k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.74k|  {
  437|  1.74k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.74k|    return c->try_set (this, 0);
  439|  1.74k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE8sanitizeIJPKNS3_22LigatureSubstFormat1_2IS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  6.46k|  {
  718|  6.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  6.46k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  6.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 415, False: 6.05k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    415|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    415|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.05k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  6.05k|    unsigned int count = len;
  722|  3.93M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.92M, False: 5.93k]
  ------------------
  723|  3.92M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 118, False: 3.92M]
  |  |  ------------------
  ------------------
  724|    118|	return_trace (false);
  ------------------
  |  |  349|  6.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    118|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  5.93k|    return_trace (true);
  ------------------
  |  |  349|  5.93k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.93k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  6.05k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  6.46k|  {
  730|  6.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  6.46k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  12.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.35k, False: 111]
  |  |  |  Branch (349:45): [True: 6.05k, False: 304]
  |  |  ------------------
  ------------------
  732|  6.46k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  3.92M|  {
  427|  3.92M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.92M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  3.92M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  15.7M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.92M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.91M, False: 7.82k]
  |  |  |  Branch (349:45): [True: 6.34k, False: 1.48k]
  |  |  |  Branch (349:45): [True: 1.38k, False: 99]
  |  |  |  Branch (349:45): [True: 3.92M, False: 19]
  |  |  ------------------
  ------------------
  429|  3.92M|		  (this->is_null () ||
  430|  3.92M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  3.92M|		   neuter (c)));
  432|  3.92M|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  3.92M|  {
  417|  3.92M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.92M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  3.92M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  3.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 3.92M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     19|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  3.92M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  3.92M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.91M, False: 7.82k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.91M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.91M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  7.82k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  7.82k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.82k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  7.82k|    return_trace (true);
  ------------------
  |  |  349|  7.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  7.82k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES8_E8sanitizeIJPKNS3_11LigatureSetIS5_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  7.82k|  {
  718|  7.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  7.82k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  7.82k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.41k, False: 6.41k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|  1.41k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.41k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  6.41k|    unsigned int count = len;
  722|   162k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 156k, False: 6.34k]
  ------------------
  723|   156k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   156k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 73, False: 156k]
  |  |  ------------------
  ------------------
  724|     73|	return_trace (false);
  ------------------
  |  |  349|  6.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     73|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  6.34k|    return_trace (true);
  ------------------
  |  |  349|  6.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  6.41k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8LigatureINS2_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEES8_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  7.82k|  {
  730|  7.82k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.82k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  7.82k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  14.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.55k, False: 1.26k]
  |  |  |  Branch (349:45): [True: 6.41k, False: 142]
  |  |  ------------------
  ------------------
  732|  7.82k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   156k|  {
  427|   156k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   156k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   156k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   651k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   156k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 131k, False: 24.5k]
  |  |  |  Branch (349:45): [True: 22.7k, False: 1.87k]
  |  |  |  Branch (349:45): [True: 1.81k, False: 54]
  |  |  |  Branch (349:45): [True: 156k, False: 19]
  |  |  ------------------
  ------------------
  429|   156k|		  (this->is_null () ||
  430|   156k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   156k|		   neuter (c)));
  432|   156k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   156k|  {
  417|   156k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   156k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   156k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   156k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 156k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     19|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     19|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   156k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   156k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 131k, False: 24.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   131k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   131k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  24.5k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  24.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 24.5k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  24.5k|    return_trace (true);
  ------------------
  |  |  349|  24.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  24.5k|  }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  857|  23.2k|  {
  858|  23.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  859|  23.2k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  23.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 542, False: 22.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    542|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    542|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  860|  22.7k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  22.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  22.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (860:9): [Folded - Ignored]
  ------------------
  861|      0|    unsigned int count = get_length ();
  862|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (862:30): [True: 0, False: 0]
  ------------------
  863|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  864|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  865|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  866|      0|  }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  870|  23.2k|  {
  871|  23.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  872|  23.2k|    return_trace (lenP1.sanitize (c) &&
  ------------------
  |  |  349|  86.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.31k, False: 16.8k]
  |  |  |  Branch (349:45): [True: 16.3k, False: 494]
  |  |  |  Branch (349:45): [True: 23.1k, False: 48]
  |  |  ------------------
  ------------------
  873|  23.2k|		  (!lenP1 || c->check_array (arrayZ, lenP1 - 1)));
  874|  23.2k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.87k|  {
  437|  1.87k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.87k|    return c->try_set (this, 0);
  439|  1.87k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl8LigatureINS1_11MediumTypesEEENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.81k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.48k|  {
  437|  1.48k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.48k|    return c->try_set (this, 0);
  439|  1.48k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|  1.38k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  56.2k|  {
  437|  56.2k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  56.2k|    return c->try_set (this, 0);
  439|  56.2k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  51.5k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_EixEi:
  620|  8.89M|  {
  621|  8.89M|    unsigned int i = (unsigned int) i_;
  622|  8.89M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  8.89M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 260, False: 8.89M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|    260|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  8.89M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  8.89M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  8.89M|    return arrayZ[i];
  625|  8.89M|  }
_ZN2OTplIPKNS_6LookupELPv0EEERKNS_6Layout9GSUB_impl19SubstLookupSubTableERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  8.89M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  8.89M|  {
  326|  8.89M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  8.89M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.67M, False: 5.22M]
  |  |  ------------------
  ------------------
  327|  5.22M|    return StructAtOffset<const Type> (base, *this);
  328|  8.89M|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  620|  2.03M|  {
  621|  2.03M|    unsigned int i = (unsigned int) i_;
  622|  2.03M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 601k, False: 1.43M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   601k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  1.43M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.43M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  1.43M|    return arrayZ[i];
  625|  2.03M|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_8SequenceIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  2.03M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  2.03M|  {
  326|  2.03M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  2.03M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 708k, False: 1.32M]
  |  |  ------------------
  ------------------
  327|  1.32M|    return StructAtOffset<const Type> (base, *this);
  328|  2.03M|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl8SequenceINS1_10SmallTypesEEELb1EE8get_nullEv:
  308|   708k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   708k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl8SequenceINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEEixEi:
  620|  22.7k|  {
  621|  22.7k|    unsigned int i = (unsigned int) i_;
  622|  22.7k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.2k, False: 5.51k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  17.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  5.51k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  5.51k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  5.51k|    return arrayZ[i];
  625|  22.7k|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_8SequenceIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  22.7k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  22.7k|  {
  326|  22.7k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17.5k, False: 5.21k]
  |  |  ------------------
  ------------------
  327|  5.21k|    return StructAtOffset<const Type> (base, *this);
  328|  22.7k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl8SequenceINS1_11MediumTypesEEELb1EE8get_nullEv:
  308|  17.5k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  17.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  620|   928k|  {
  621|   928k|    unsigned int i = (unsigned int) i_;
  622|   928k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   928k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 553k, False: 374k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   553k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|   374k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   374k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|   374k|    return arrayZ[i];
  625|   928k|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS1_10SmallTypesEEELPv0EEERKNS2_12AlternateSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   928k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   928k|  {
  326|   928k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   928k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 559k, False: 368k]
  |  |  ------------------
  ------------------
  327|   368k|    return StructAtOffset<const Type> (base, *this);
  328|   928k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl12AlternateSetINS1_10SmallTypesEEELb1EE8get_nullEv:
  308|   559k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   559k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEEixEi:
  620|  41.9k|  {
  621|  41.9k|    unsigned int i = (unsigned int) i_;
  622|  41.9k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  41.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40.5k, False: 1.37k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  40.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  1.37k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.37k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  1.37k|    return arrayZ[i];
  625|  41.9k|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS1_11MediumTypesEEELPv0EEERKNS2_12AlternateSetIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeIjLj3EEELb1EEE:
  337|  41.9k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEclEPKv:
  325|  41.9k|  {
  326|  41.9k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  41.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40.9k, False: 993]
  |  |  ------------------
  ------------------
  327|    993|    return StructAtOffset<const Type> (base, *this);
  328|  41.9k|  }
_ZN2OT12_hb_has_nullINS_6Layout9GSUB_impl12AlternateSetINS1_11MediumTypesEEELb1EE8get_nullEv:
  308|  40.9k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  40.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEENS_7IntTypeItLj2EEELb1EEES8_EixEi:
  620|  2.31M|  {
  621|  2.31M|    unsigned int i = (unsigned int) i_;
  622|  2.31M|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  2.31M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 497k, False: 1.81M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|   497k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  1.81M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.81M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  1.81M|    return arrayZ[i];
  625|  2.31M|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl11LigatureSetINS1_10SmallTypesEEELPv0EEERKNS2_8LigatureIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|  18.7M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEEixEi:
  800|  5.05M|  {
  801|  5.05M|    unsigned int i = (unsigned int) i_;
  802|  5.05M|    if (unlikely (i >= lenP1 || !i)) return Null (Type);
  ------------------
  |  |  259|  10.1M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.05M]
  |  |  |  Branch (259:47): [True: 0, False: 5.05M]
  |  |  |  Branch (259:47): [True: 0, False: 5.05M]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= lenP1 || !i)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  803|  5.05M|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  5.05M|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  804|  5.05M|    return arrayZ[i-1];
  805|  5.05M|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11LigatureSetINS2_11MediumTypesEEENS_7IntTypeIjLj3EEELb1EEENS7_ItLj2EEEEixEi:
  620|  89.6k|  {
  621|  89.6k|    unsigned int i = (unsigned int) i_;
  622|  89.6k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  89.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.9k, False: 77.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  11.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|  77.7k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  77.7k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|  77.7k|    return arrayZ[i];
  625|  89.6k|  }
_ZN2OTplIPKNS_6Layout9GSUB_impl11LigatureSetINS1_11MediumTypesEEELPv0EEERKNS2_8LigatureIS4_EERKT_RKNS_8OffsetToISA_NS_7IntTypeItLj2EEELb1EEE:
  337|   166k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT15HeadlessArrayOfINS_11HBGlyphID24ENS_7IntTypeItLj2EEEEixEi:
  800|  75.9k|  {
  801|  75.9k|    unsigned int i = (unsigned int) i_;
  802|  75.9k|    if (unlikely (i >= lenP1 || !i)) return Null (Type);
  ------------------
  |  |  259|   151k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 75.9k]
  |  |  |  Branch (259:47): [True: 0, False: 75.9k]
  |  |  |  Branch (259:47): [True: 0, False: 75.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= lenP1 || !i)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  803|  75.9k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  75.9k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  804|  75.9k|    return arrayZ[i-1];
  805|  75.9k|  }
_ZN2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl19SubstLookupSubTableENS_7IntTypeItLj2EEELb1EEES6_EixEi:
  627|  1.53k|  {
  628|  1.53k|    unsigned int i = (unsigned int) i_;
  629|  1.53k|    if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  259|  1.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.53k]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  630|  1.53k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  1.53k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  631|  1.53k|    return arrayZ[i];
  632|  1.53k|  }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  19.8k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EEaSEj:
  322|    758|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEEEES6_Lb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  20.7k|  {
  427|  20.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  20.7k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   109k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 509, False: 20.1k]
  |  |  |  Branch (349:45): [True: 13.4k, False: 6.72k]
  |  |  |  Branch (349:45): [True: 610, False: 6.11k]
  |  |  |  Branch (349:45): [True: 20.7k, False: 28]
  |  |  ------------------
  ------------------
  429|  20.7k|		  (this->is_null () ||
  430|  20.7k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  20.7k|		   neuter (c)));
  432|  20.7k|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEEEES6_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  20.7k|  {
  417|  20.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  20.7k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  20.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 20.7k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     28|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  20.7k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  20.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 509, False: 20.1k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    509|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    509|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  20.1k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  20.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 20.1k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  20.1k|    return_trace (true);
  ------------------
  |  |  349|  20.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  20.1k|  }
_ZNK2OT16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  782|  20.1k|  {
  783|  20.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  784|  20.1k|    return_trace ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|  20.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  785|  20.1k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EEES6_E8sanitizeIJPKNS_16List16OfOffsetToIS4_S6_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|  20.1k|  {
  718|  20.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  20.1k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  20.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 395, False: 19.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    395|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    395|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  19.8k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  19.8k|    unsigned int count = len;
  722|   345k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 331k, False: 13.4k]
  ------------------
  723|   331k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   331k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.33k, False: 325k]
  |  |  ------------------
  ------------------
  724|  6.33k|	return_trace (false);
  ------------------
  |  |  349|  26.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  13.4k|    return_trace (true);
  ------------------
  |  |  349|  13.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  19.8k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EEES6_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  20.1k|  {
  730|  20.1k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  20.1k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  20.1k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  40.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 20.0k, False: 175]
  |  |  |  Branch (349:45): [True: 19.8k, False: 220]
  |  |  ------------------
  ------------------
  732|  20.1k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   331k|  {
  427|   331k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   331k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   331k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.48M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   331k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 203k, False: 128k]
  |  |  |  Branch (349:45): [True: 102k, False: 25.8k]
  |  |  |  Branch (349:45): [True: 19.8k, False: 6.07k]
  |  |  |  Branch (349:45): [True: 331k, False: 260]
  |  |  ------------------
  ------------------
  429|   331k|		  (this->is_null () ||
  430|   331k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   331k|		   neuter (c)));
  432|   331k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   331k|  {
  417|   331k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   331k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   331k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   331k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 260, False: 331k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    260|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    260|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   331k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   331k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 203k, False: 128k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   203k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   203k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|   128k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|   128k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 128k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|   128k|    return_trace (true);
  ------------------
  |  |  349|   128k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   128k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|   128k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  25.8k|  {
  437|  25.8k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  25.8k|    return c->try_set (this, 0);
  439|  25.8k|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEEEES6_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|  6.72k|  {
  437|  6.72k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  6.72k|    return c->try_set (this, 0);
  439|  6.72k|  }
_ZN2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeItLj2EEEEES6_Lb1EEaSEt:
  322|    610|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    336|  {
  427|    336|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    336|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    336|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.69k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    336|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 81, False: 251]
  |  |  |  Branch (349:45): [True: 141, False: 110]
  |  |  |  Branch (349:45): [True: 74, False: 36]
  |  |  |  Branch (349:45): [True: 332, False: 4]
  |  |  ------------------
  ------------------
  429|    336|		  (this->is_null () ||
  430|    336|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    336|		   neuter (c)));
  432|    336|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    336|  {
  417|    336|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    336|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    336|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    336|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 332]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    332|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    332|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 81, False: 251]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     81|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     81|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    251|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    251|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 251]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    251|    return_trace (true);
  ------------------
  |  |  349|    251|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    251|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    251|  }
_ZNK2OT16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  782|    251|  {
  783|    251|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    251|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  784|    251|    return_trace ((Array16Of<OffsetTo<Type, OffsetType>>::sanitize (c, this, std::forward<Ts> (ds)...)));
  ------------------
  |  |  349|    251|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    251|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  785|    251|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EEENS5_ItLj2EEEE8sanitizeIJPKNS_16List16OfOffsetToIS4_S6_EEEEEbP21hb_sanitize_context_tDpOT_:
  717|    251|  {
  718|    251|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    251|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    251|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    251|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67, False: 184]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     67|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     67|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    184|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    184|    unsigned int count = len;
  722|   173k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 173k, False: 141]
  ------------------
  723|   173k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   173k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 43, False: 173k]
  |  |  ------------------
  ------------------
  724|     43|	return_trace (false);
  ------------------
  |  |  349|    227|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     43|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    141|    return_trace (true);
  ------------------
  |  |  349|    141|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    141|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    184|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EEENS5_ItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    251|  {
  730|    251|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    251|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    251|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|    448|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    251|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 197, False: 54]
  |  |  |  Branch (349:45): [True: 184, False: 13]
  |  |  ------------------
  ------------------
  732|    251|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   173k|  {
  427|   173k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   173k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   173k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|   694k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   173k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 171k, False: 1.39k]
  |  |  |  Branch (349:45): [True: 614, False: 784]
  |  |  |  Branch (349:45): [True: 758, False: 26]
  |  |  |  Branch (349:45): [True: 173k, False: 17]
  |  |  ------------------
  ------------------
  429|   173k|		  (this->is_null () ||
  430|   173k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   173k|		   neuter (c)));
  432|   173k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   173k|  {
  417|   173k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   173k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   173k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   173k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 173k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     17|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     17|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   173k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   173k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 171k, False: 1.39k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   171k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   171k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.39k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.39k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.39k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.39k|    return_trace (true);
  ------------------
  |  |  349|  1.39k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.39k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.39k|  }
_ZNK2OT8OffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    784|  {
  437|    784|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    784|    return c->try_set (this, 0);
  439|    784|  }
_ZNK2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEEEES6_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|    110|  {
  437|    110|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    110|    return c->try_set (this, 0);
  439|    110|  }
_ZN2OT8OffsetToINS_16List16OfOffsetToINS_6Layout9GSUB_impl11SubstLookupENS_7IntTypeIjLj3EEEEES6_Lb1EEaSEj:
  322|     74|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OTplIPKNS_4HVARELPv0EEERKNS_14VariationStoreERKT_RKNS_8OffsetToIS5_NS_7IntTypeIjLj4EEELb1EEE:
  337|   692k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_16VertOriginMetricENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|     41|  {
  718|     41|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     41|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|     41|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|     41|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 38]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|     38|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|     38|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     38|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_16VertOriginMetricENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|     41|  {
  730|     41|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     41|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|     41|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|     82|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     41|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 41, False: 0]
  |  |  |  Branch (349:45): [True: 38, False: 3]
  |  |  ------------------
  ------------------
  732|     41|  }
_ZNK2OT13SortedArrayOfINS_16VertOriginMetricENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|     38|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT13SortedArrayOfINS_16VertOriginMetricENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|     38|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT7ArrayOfINS_16VertOriginMetricENS_7IntTypeItLj2EEEEixEi:
  620|      4|  {
  621|      4|    unsigned int i = (unsigned int) i_;
  622|      4|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|      4|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|      4|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|      4|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|      4|    return arrayZ[i];
  625|      4|  }
_ZN2OTplIPKNS_4BASEELPv0EEERKNS_4AxisERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_4AxisENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  33.3k|  {
  326|  33.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 172]
  |  |  ------------------
  ------------------
  327|    172|    return StructAtOffset<const Type> (base, *this);
  328|  33.3k|  }
_ZN2OT12_hb_has_nullINS_4AxisELb1EE8get_nullEv:
  308|  33.1k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4AxisELPv0EEERKNS_14BaseScriptListERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_14BaseScriptListENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  33.3k|  {
  326|  33.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 159]
  |  |  ------------------
  ------------------
  327|    159|    return StructAtOffset<const Type> (base, *this);
  328|  33.3k|  }
_ZN2OT12_hb_has_nullINS_14BaseScriptListELb1EE8get_nullEv:
  308|  33.1k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_16BaseScriptRecordENS_7IntTypeItLj2EEEE7bsearchIjEERKS1_RKT_S7_:
  973|  66.6k|  { return *as_array ().bsearch (x, &not_found); }
_ZNK2OT13SortedArrayOfINS_16BaseScriptRecordENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|  66.6k|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZN2OTplIPKNS_14BaseScriptListELPv0EEERKNS_10BaseScriptERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|     10|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_10BaseScriptENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|     10|  {
  326|     10|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|     10|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 9]
  |  |  ------------------
  ------------------
  327|      9|    return StructAtOffset<const Type> (base, *this);
  328|     10|  }
_ZN2OT12_hb_has_nullINS_10BaseScriptELb1EE8get_nullEv:
  308|      1|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4AxisELPv0EEERKNS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEERKT_RKNS_8OffsetToIS9_S8_Lb1EEE:
  337|      9|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEES4_Lb1EEclEPKv:
  325|      9|  {
  326|      9|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|      9|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 8]
  |  |  ------------------
  ------------------
  327|      8|    return StructAtOffset<const Type> (base, *this);
  328|      9|  }
_ZN2OT12_hb_has_nullINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEELb1EE8get_nullEv:
  308|      1|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEE5bfindIjEEbRKT_Pj14hb_not_found_tj:
  978|      9|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZNK2OT13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEE8as_arrayEv:
  939|      9|  hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->len); }
_ZNK2OT8OffsetToINS_4AxisENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.32k|  {
  427|  1.32k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.32k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.32k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  6.81k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.32k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 107, False: 1.19k]
  |  |  |  Branch (349:45): [True: 792, False: 399]
  |  |  |  Branch (349:45): [True: 27, False: 372]
  |  |  |  Branch (349:45): [True: 1.29k, False: 29]
  |  |  ------------------
  ------------------
  429|  1.32k|		  (this->is_null () ||
  430|  1.32k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.32k|		   neuter (c)));
  432|  1.32k|  }
_ZNK2OT8OffsetToINS_4AxisENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.32k|  {
  417|  1.32k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.32k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.32k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.32k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29, False: 1.29k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     29|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     29|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.29k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.29k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 107, False: 1.19k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    107|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    107|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.19k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.19k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.19k|    return_trace (true);
  ------------------
  |  |  349|  1.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.19k|  }
_ZNK2OT8OffsetToINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEES4_Lb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.15k|  {
  427|  1.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.15k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 92, False: 1.06k]
  |  |  |  Branch (349:45): [True: 915, False: 151]
  |  |  |  Branch (349:45): [True: 100, False: 51]
  |  |  |  Branch (349:45): [True: 1.15k, False: 1]
  |  |  ------------------
  ------------------
  429|  1.15k|		  (this->is_null () ||
  430|  1.15k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.15k|		   neuter (c)));
  432|  1.15k|  }
_ZNK2OT8OffsetToINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEES4_Lb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.15k|  {
  417|  1.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.15k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.15k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.15k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 92, False: 1.06k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     92|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.06k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.06k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.06k|    return_trace (true);
  ------------------
  |  |  349|  1.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.06k|  }
_ZNK2OT7ArrayOfINS_3TagENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.06k|  {
  718|  1.06k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.06k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.06k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 915]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    151|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    151|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    915|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|    915|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    915|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_3TagENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.06k|  {
  730|  1.06k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.06k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.06k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.01k, False: 50]
  |  |  |  Branch (349:45): [True: 915, False: 101]
  |  |  ------------------
  ------------------
  732|  1.06k|  }
_ZNK2OT8OffsetToINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEES4_Lb1EE6neuterEP21hb_sanitize_context_t:
  436|    151|  {
  437|    151|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    151|    return c->try_set (this, 0);
  439|    151|  }
_ZN2OT8OffsetToINS_13SortedArrayOfINS_3TagENS_7IntTypeItLj2EEEEES4_Lb1EEaSEt:
  322|    100|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14BaseScriptListENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.10k|  {
  427|  1.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.10k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 69, False: 1.03k]
  |  |  |  Branch (349:45): [True: 634, False: 400]
  |  |  |  Branch (349:45): [True: 89, False: 311]
  |  |  |  Branch (349:45): [True: 1.10k, False: 4]
  |  |  ------------------
  ------------------
  429|  1.10k|		  (this->is_null () ||
  430|  1.10k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.10k|		   neuter (c)));
  432|  1.10k|  }
_ZNK2OT8OffsetToINS_14BaseScriptListENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.10k|  {
  417|  1.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.10k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 1.10k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      4|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.10k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 69, False: 1.03k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|     69|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     69|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.03k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.03k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.03k|    return_trace (true);
  ------------------
  |  |  349|  1.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.03k|  }
_ZNK2OT7ArrayOfINS_16BaseScriptRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_14BaseScriptListEEEEbP21hb_sanitize_context_tDpOT_:
  717|  1.00k|  {
  718|  1.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  1.00k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 34, False: 966]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     34|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     34|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    966|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    966|    unsigned int count = len;
  722|   340k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 339k, False: 634]
  ------------------
  723|   339k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   339k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 332, False: 339k]
  |  |  ------------------
  ------------------
  724|    332|	return_trace (false);
  ------------------
  |  |  349|  1.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    332|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    634|    return_trace (true);
  ------------------
  |  |  349|    634|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    634|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    966|  }
_ZNK2OT7ArrayOfINS_16BaseScriptRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.00k|  {
  730|  1.00k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.00k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.00k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.99k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.00k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 999, False: 1]
  |  |  |  Branch (349:45): [True: 966, False: 33]
  |  |  ------------------
  ------------------
  732|  1.00k|  }
_ZNK2OT8OffsetToINS_10BaseScriptENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   339k|  {
  427|   339k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   339k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   339k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.37M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   339k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 321k, False: 18.6k]
  |  |  |  Branch (349:45): [True: 17.1k, False: 1.47k]
  |  |  |  Branch (349:45): [True: 1.17k, False: 299]
  |  |  |  Branch (349:45): [True: 339k, False: 3]
  |  |  ------------------
  ------------------
  429|   339k|		  (this->is_null () ||
  430|   339k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   339k|		   neuter (c)));
  432|   339k|  }
_ZNK2OT8OffsetToINS_10BaseScriptENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   339k|  {
  417|   339k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   339k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   339k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   339k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 339k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   339k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   339k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 321k, False: 18.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   321k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   321k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  18.6k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  18.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18.6k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  18.6k|    return_trace (true);
  ------------------
  |  |  349|  18.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  18.6k|  }
_ZNK2OT8OffsetToINS_10BaseValuesENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  17.6k|  {
  427|  17.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  17.6k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  75.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 13.3k, False: 4.34k]
  |  |  |  Branch (349:45): [True: 3.99k, False: 352]
  |  |  |  Branch (349:45): [True: 207, False: 145]
  |  |  |  Branch (349:45): [True: 17.6k, False: 3]
  |  |  ------------------
  ------------------
  429|  17.6k|		  (this->is_null () ||
  430|  17.6k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  17.6k|		   neuter (c)));
  432|  17.6k|  }
_ZNK2OT8OffsetToINS_10BaseValuesENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  17.6k|  {
  417|  17.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  17.6k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  17.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 17.6k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  17.6k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  17.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.3k, False: 4.34k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  13.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  4.34k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  4.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.34k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  4.34k|    return_trace (true);
  ------------------
  |  |  349|  4.34k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  4.34k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EEES4_E8sanitizeIJPKNS_10BaseValuesEEEEbP21hb_sanitize_context_tDpOT_:
  717|  4.18k|  {
  718|  4.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  4.18k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  4.18k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 101, False: 4.08k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    101|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    101|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  4.08k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  4.08k|    unsigned int count = len;
  722|  10.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 6.47k, False: 3.99k]
  ------------------
  723|  6.47k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  6.47k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 92, False: 6.38k]
  |  |  ------------------
  ------------------
  724|     92|	return_trace (false);
  ------------------
  |  |  349|  4.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     92|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  3.99k|    return_trace (true);
  ------------------
  |  |  349|  3.99k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.99k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  4.08k|  }
_ZNK2OT7ArrayOfINS_8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EEES4_E16sanitize_shallowEP21hb_sanitize_context_t:
  729|  4.18k|  {
  730|  4.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  4.18k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  8.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.18k, False: 3]
  |  |  |  Branch (349:45): [True: 4.08k, False: 98]
  |  |  ------------------
  ------------------
  732|  4.18k|  }
_ZNK2OT8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|   311k|  {
  427|   311k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   311k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|   311k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  1.25M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   311k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 300k, False: 10.9k]
  |  |  |  Branch (349:45): [True: 8.61k, False: 2.28k]
  |  |  |  Branch (349:45): [True: 2.15k, False: 131]
  |  |  |  Branch (349:45): [True: 311k, False: 15]
  |  |  ------------------
  ------------------
  429|   311k|		  (this->is_null () ||
  430|   311k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|   311k|		   neuter (c)));
  432|   311k|  }
_ZNK2OT8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|   311k|  {
  417|   311k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   311k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|   311k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|   311k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 311k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|   311k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|   311k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 300k, False: 10.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|   300k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   300k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  10.9k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  10.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.9k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  10.9k|    return_trace (true);
  ------------------
  |  |  349|  10.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  10.9k|  }
_ZNK2OT8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  2.28k|  {
  437|  2.28k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  2.28k|    return c->try_set (this, 0);
  439|  2.28k|  }
_ZN2OT8OffsetToINS_9BaseCoordENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  2.15k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_10BaseValuesENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    352|  {
  437|    352|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    352|    return c->try_set (this, 0);
  439|    352|  }
_ZN2OT8OffsetToINS_10BaseValuesENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    207|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_6MinMaxENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.27M|  {
  427|  1.27M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.27M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.27M|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.17M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.27M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.19M, False: 81.3k]
  |  |  |  Branch (349:45): [True: 80.5k, False: 811]
  |  |  |  Branch (349:45): [True: 733, False: 78]
  |  |  |  Branch (349:45): [True: 1.27M, False: 11]
  |  |  ------------------
  ------------------
  429|  1.27M|		  (this->is_null () ||
  430|  1.27M|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.27M|		   neuter (c)));
  432|  1.27M|  }
_ZNK2OT8OffsetToINS_6MinMaxENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.27M|  {
  417|  1.27M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.27M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.27M|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 1.27M]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     11|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     11|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.27M|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.19M, False: 81.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  1.19M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.19M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  81.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  81.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 81.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  81.3k|    return_trace (true);
  ------------------
  |  |  349|  81.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  81.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  81.3k|  }
_ZNK2OT7ArrayOfINS_16FeatMinMaxRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_6MinMaxEEEEbP21hb_sanitize_context_tDpOT_:
  717|  80.8k|  {
  718|  80.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  80.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  80.8k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  80.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 251, False: 80.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    251|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    251|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  80.5k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  80.5k|    unsigned int count = len;
  722|   152k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 71.6k, False: 80.5k]
  ------------------
  723|  71.6k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  71.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 71.6k]
  |  |  ------------------
  ------------------
  724|     22|	return_trace (false);
  ------------------
  |  |  349|  80.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     22|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  80.5k|    return_trace (true);
  ------------------
  |  |  349|  80.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  80.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  80.5k|  }
_ZNK2OT7ArrayOfINS_16FeatMinMaxRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  80.8k|  {
  730|  80.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  80.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  80.8k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|   161k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  80.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 80.8k, False: 3]
  |  |  |  Branch (349:45): [True: 80.5k, False: 248]
  |  |  ------------------
  ------------------
  732|  80.8k|  }
_ZNK2OT8OffsetToINS_6MinMaxENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    811|  {
  437|    811|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    811|    return c->try_set (this, 0);
  439|    811|  }
_ZN2OT8OffsetToINS_6MinMaxENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    733|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_17BaseLangSysRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_10BaseScriptEEEEbP21hb_sanitize_context_tDpOT_:
  717|  17.5k|  {
  718|  17.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  17.5k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  17.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 281, False: 17.2k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    281|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    281|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  17.2k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|  17.2k|    unsigned int count = len;
  722|  1.27M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 1.25M, False: 17.1k]
  ------------------
  723|  1.25M|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  1.25M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 62, False: 1.25M]
  |  |  ------------------
  ------------------
  724|     62|	return_trace (false);
  ------------------
  |  |  349|  17.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     62|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|  17.1k|    return_trace (true);
  ------------------
  |  |  349|  17.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|  17.2k|  }
_ZNK2OT7ArrayOfINS_17BaseLangSysRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  17.5k|  {
  730|  17.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  17.5k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  35.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 17.5k, False: 3]
  |  |  |  Branch (349:45): [True: 17.2k, False: 278]
  |  |  ------------------
  ------------------
  732|  17.5k|  }
_ZNK2OT8OffsetToINS_10BaseScriptENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.47k|  {
  437|  1.47k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.47k|    return c->try_set (this, 0);
  439|  1.47k|  }
_ZN2OT8OffsetToINS_10BaseScriptENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.17k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_14BaseScriptListENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    400|  {
  437|    400|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    400|    return c->try_set (this, 0);
  439|    400|  }
_ZN2OT8OffsetToINS_14BaseScriptListENS_7IntTypeItLj2EEELb1EEaSEt:
  322|     89|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_4AxisENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    399|  {
  437|    399|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    399|    return c->try_set (this, 0);
  439|    399|  }
_ZN2OT8OffsetToINS_4AxisENS_7IntTypeItLj2EEELb1EEaSEt:
  322|     27|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OTplIPKNS_4MATHELPv0EEERKNS_13MathConstantsERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  1.86M|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13MathConstantsENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  1.86M|  {
  326|  1.86M|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  1.86M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.86M, False: 4.64k]
  |  |  ------------------
  ------------------
  327|  4.64k|    return StructAtOffset<const Type> (base, *this);
  328|  1.86M|  }
_ZN2OT12_hb_has_nullINS_13MathConstantsELb1EE8get_nullEv:
  308|  1.86M|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  1.86M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4MATHELPv0EEERKNS_13MathGlyphInfoERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   200k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_13MathGlyphInfoENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   200k|  {
  326|   200k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   200k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 198k, False: 1.95k]
  |  |  ------------------
  ------------------
  327|  1.95k|    return StructAtOffset<const Type> (base, *this);
  328|   200k|  }
_ZN2OT12_hb_has_nullINS_13MathGlyphInfoELb1EE8get_nullEv:
  308|   198k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   198k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_13MathGlyphInfoELPv0EEERKNS_25MathItalicsCorrectionInfoERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_25MathItalicsCorrectionInfoENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  33.3k|  {
  326|  33.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 140]
  |  |  ------------------
  ------------------
  327|    140|    return StructAtOffset<const Type> (base, *this);
  328|  33.3k|  }
_ZN2OT12_hb_has_nullINS_25MathItalicsCorrectionInfoELb1EE8get_nullEv:
  308|  33.1k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_25MathItalicsCorrectionInfoELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_15MathValueRecordENS_7IntTypeItLj2EEEEixEi:
  620|  33.4k|  {
  621|  33.4k|    unsigned int i = (unsigned int) i_;
  622|  33.4k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 41]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|     41|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|     41|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|     41|    return arrayZ[i];
  625|  33.4k|  }
_ZN2OTplIPKNS_13MathGlyphInfoELPv0EEERKNS_23MathTopAccentAttachmentERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_23MathTopAccentAttachmentENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  33.3k|  {
  326|  33.3k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 196]
  |  |  ------------------
  ------------------
  327|    196|    return StructAtOffset<const Type> (base, *this);
  328|  33.3k|  }
_ZN2OT12_hb_has_nullINS_23MathTopAccentAttachmentELb1EE8get_nullEv:
  308|  33.1k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.1k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_23MathTopAccentAttachmentELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_13MathGlyphInfoELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.3k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_13MathGlyphInfoELPv0EEERKNS_12MathKernInfoERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   100k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_12MathKernInfoENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   100k|  {
  326|   100k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99.4k, False: 549]
  |  |  ------------------
  ------------------
  327|    549|    return StructAtOffset<const Type> (base, *this);
  328|   100k|  }
_ZN2OT12_hb_has_nullINS_12MathKernInfoELb1EE8get_nullEv:
  308|  99.4k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  99.4k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_12MathKernInfoELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   100k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT7ArrayOfINS_18MathKernInfoRecordENS_7IntTypeItLj2EEEEixEi:
  620|   100k|  {
  621|   100k|    unsigned int i = (unsigned int) i_;
  622|   100k|    if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99.8k, False: 132]
  |  |  ------------------
  ------------------
                  if (unlikely (i >= len)) return Null (Type);
  ------------------
  |  |  124|  99.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  623|    132|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|    132|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  624|    132|    return arrayZ[i];
  625|   100k|  }
_ZN2OTplIPKvLPv0EEERKNS_8MathKernERKT_RKNS_8OffsetToIS4_NS_7IntTypeItLj2EEELb1EEE:
  337|  33.4k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_8MathKernENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|  33.4k|  {
  326|  33.4k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 120]
  |  |  ------------------
  ------------------
  327|    120|    return StructAtOffset<const Type> (base, *this);
  328|  33.4k|  }
_ZN2OT12_hb_has_nullINS_8MathKernELb1EE8get_nullEv:
  308|  33.2k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  33.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_4MATHELPv0EEERKNS_12MathVariantsERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   233k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_12MathVariantsENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   233k|  {
  326|   233k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   233k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 231k, False: 2.00k]
  |  |  ------------------
  ------------------
  327|  2.00k|    return StructAtOffset<const Type> (base, *this);
  328|   233k|  }
_ZN2OT12_hb_has_nullINS_12MathVariantsELb1EE8get_nullEv:
  308|   231k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|   231k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZN2OTplIPKNS_12MathVariantsELPv0EEERKNS_6Layout6Common8CoverageERKT_RKNS_8OffsetToIS7_NS_7IntTypeItLj2EEELb1EEE:
  337|   200k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZN2OTplIPKNS_12MathVariantsELPv0EEERKNS_21MathGlyphConstructionERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|     74|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|     74|  {
  326|     74|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|     74|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24, False: 50]
  |  |  ------------------
  ------------------
  327|     50|    return StructAtOffset<const Type> (base, *this);
  328|     74|  }
_ZN2OT12_hb_has_nullINS_21MathGlyphConstructionELb1EE8get_nullEv:
  308|     24|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|     24|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT14UnsizedArrayOfINS_8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EEEEixEj:
  466|     74|  {
  467|     74|    return arrayZ[i];
  468|     74|  }
_ZNK2OT7ArrayOfINS_22MathGlyphVariantRecordENS_7IntTypeItLj2EEEE8as_arrayEv:
  642|  33.3k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZN2OTplIPKNS_21MathGlyphConstructionELPv0EEERKNS_17MathGlyphAssemblyERKT_RKNS_8OffsetToIS5_NS_7IntTypeItLj2EEELb1EEE:
  337|   100k|  friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); }
_ZNK2OT8OffsetToINS_17MathGlyphAssemblyENS_7IntTypeItLj2EEELb1EEclEPKv:
  325|   100k|  {
  326|   100k|    if (unlikely (this->is_null ())) return *_hb_has_null<Type, has_null>::get_null ();
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 99.9k, False: 21]
  |  |  ------------------
  ------------------
  327|     21|    return StructAtOffset<const Type> (base, *this);
  328|   100k|  }
_ZN2OT12_hb_has_nullINS_17MathGlyphAssemblyELb1EE8get_nullEv:
  308|  99.9k|  static const Type *get_null () { return &Null (Type); }
  ------------------
  |  |  124|  99.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
_ZNK2OT7ArrayOfINS_19MathGlyphPartRecordENS_7IntTypeItLj2EEEE8as_arrayEv:
  642|  33.3k|  hb_array_t<const Type> as_array () const { return hb_array (arrayZ, len); }
_ZNK2OT8OffsetToINS_13MathConstantsENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.78k|  {
  427|  1.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.78k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  8.71k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.78k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 837, False: 942]
  |  |  |  Branch (349:45): [True: 288, False: 654]
  |  |  |  Branch (349:45): [True: 261, False: 393]
  |  |  |  Branch (349:45): [True: 1.77k, False: 1]
  |  |  ------------------
  ------------------
  429|  1.78k|		  (this->is_null () ||
  430|  1.78k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.78k|		   neuter (c)));
  432|  1.78k|  }
_ZNK2OT8OffsetToINS_13MathConstantsENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.78k|  {
  417|  1.78k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.78k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.78k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.77k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.77k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 837, False: 942]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    837|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    837|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    942|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    942|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 942]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    942|    return_trace (true);
  ------------------
  |  |  349|    942|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    942|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    942|  }
_ZNK2OT8OffsetToINS_13MathConstantsENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    654|  {
  437|    654|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    654|    return c->try_set (this, 0);
  439|    654|  }
_ZN2OT8OffsetToINS_13MathConstantsENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    261|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_13MathGlyphInfoENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.38k|  {
  427|  1.38k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.38k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.38k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  6.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.38k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 230, False: 1.14k]
  |  |  |  Branch (349:45): [True: 842, False: 307]
  |  |  |  Branch (349:45): [True: 75, False: 232]
  |  |  |  Branch (349:45): [True: 1.37k, False: 7]
  |  |  ------------------
  ------------------
  429|  1.38k|		  (this->is_null () ||
  430|  1.38k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.38k|		   neuter (c)));
  432|  1.38k|  }
_ZNK2OT8OffsetToINS_13MathGlyphInfoENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.38k|  {
  417|  1.38k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.38k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.38k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.38k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 1.37k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.37k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 230, False: 1.14k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    230|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    230|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  1.14k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  1.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.14k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  1.14k|    return_trace (true);
  ------------------
  |  |  349|  1.14k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  1.14k|  }
_ZNK2OT8OffsetToINS_25MathItalicsCorrectionInfoENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.10k|  {
  427|  1.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.10k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.31k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 392, False: 707]
  |  |  |  Branch (349:45): [True: 496, False: 211]
  |  |  |  Branch (349:45): [True: 104, False: 107]
  |  |  |  Branch (349:45): [True: 1.09k, False: 1]
  |  |  ------------------
  ------------------
  429|  1.10k|		  (this->is_null () ||
  430|  1.10k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.10k|		   neuter (c)));
  432|  1.10k|  }
_ZNK2OT8OffsetToINS_25MathItalicsCorrectionInfoENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.10k|  {
  417|  1.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.10k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.10k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.09k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.09k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.09k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 392, False: 707]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    392|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    392|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    707|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    707|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 707]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    707|    return_trace (true);
  ------------------
  |  |  349|    707|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    707|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    707|  }
_ZNK2OT7ArrayOfINS_15MathValueRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_25MathItalicsCorrectionInfoEEEEbP21hb_sanitize_context_tDpOT_:
  717|    613|  {
  718|    613|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    613|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    613|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    613|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 49, False: 564]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     49|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     49|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    564|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    564|    unsigned int count = len;
  722|   838k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 837k, False: 496]
  ------------------
  723|   837k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   837k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 68, False: 837k]
  |  |  ------------------
  ------------------
  724|     68|	return_trace (false);
  ------------------
  |  |  349|    632|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     68|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    496|    return_trace (true);
  ------------------
  |  |  349|    496|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    496|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    564|  }
_ZNK2OT7ArrayOfINS_15MathValueRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  1.28k|  {
  730|  1.28k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.28k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  1.28k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  2.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.28k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.28k, False: 2]
  |  |  |  Branch (349:45): [True: 1.17k, False: 107]
  |  |  ------------------
  ------------------
  732|  1.28k|  }
_ZNK2OT8OffsetToINS_25MathItalicsCorrectionInfoENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    211|  {
  437|    211|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    211|    return c->try_set (this, 0);
  439|    211|  }
_ZN2OT8OffsetToINS_25MathItalicsCorrectionInfoENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    104|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_23MathTopAccentAttachmentENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    992|  {
  427|    992|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    992|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    992|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  4.90k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    992|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 199, False: 778]
  |  |  |  Branch (349:45): [True: 576, False: 202]
  |  |  |  Branch (349:45): [True: 147, False: 55]
  |  |  |  Branch (349:45): [True: 977, False: 15]
  |  |  ------------------
  ------------------
  429|    992|		  (this->is_null () ||
  430|    992|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    992|		   neuter (c)));
  432|    992|  }
_ZNK2OT8OffsetToINS_23MathTopAccentAttachmentENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    992|  {
  417|    992|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    992|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    992|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    992|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 977]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     15|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    977|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    977|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 199, False: 778]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    199|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    199|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    778|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    778|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 778]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    778|    return_trace (true);
  ------------------
  |  |  349|    778|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    778|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    778|  }
_ZNK2OT7ArrayOfINS_15MathValueRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_23MathTopAccentAttachmentEEEEbP21hb_sanitize_context_tDpOT_:
  717|    675|  {
  718|    675|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    675|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    675|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    675|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 60, False: 615]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     60|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     60|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    615|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    615|    unsigned int count = len;
  722|   328k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 328k, False: 576]
  ------------------
  723|   328k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|   328k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39, False: 327k]
  |  |  ------------------
  ------------------
  724|     39|	return_trace (false);
  ------------------
  |  |  349|    654|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     39|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    576|    return_trace (true);
  ------------------
  |  |  349|    576|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    576|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    615|  }
_ZNK2OT8OffsetToINS_23MathTopAccentAttachmentENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    202|  {
  437|    202|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    202|    return c->try_set (this, 0);
  439|    202|  }
_ZN2OT8OffsetToINS_23MathTopAccentAttachmentENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    147|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12MathKernInfoENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|    904|  {
  427|    904|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    904|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|    904|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  4.53k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    904|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 201, False: 700]
  |  |  |  Branch (349:45): [True: 476, False: 224]
  |  |  |  Branch (349:45): [True: 165, False: 59]
  |  |  |  Branch (349:45): [True: 901, False: 3]
  |  |  ------------------
  ------------------
  429|    904|		  (this->is_null () ||
  430|    904|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|    904|		   neuter (c)));
  432|    904|  }
_ZNK2OT8OffsetToINS_12MathKernInfoENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|    904|  {
  417|    904|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    904|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|    904|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|    904|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 901]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|    901|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|    901|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 201, False: 700]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    201|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    201|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    700|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    700|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 700]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    700|    return_trace (true);
  ------------------
  |  |  349|    700|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    700|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    700|  }
_ZNK2OT7ArrayOfINS_18MathKernInfoRecordENS_7IntTypeItLj2EEEE8sanitizeIJPKNS_12MathKernInfoEEEEbP21hb_sanitize_context_tDpOT_:
  717|    597|  {
  718|    597|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    597|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|    597|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|    597|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 61, False: 536]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|     61|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     61|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|    536|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|    536|    unsigned int count = len;
  722|  4.39k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 3.91k, False: 476]
  ------------------
  723|  3.91k|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|  3.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 60, False: 3.85k]
  |  |  ------------------
  ------------------
  724|     60|	return_trace (false);
  ------------------
  |  |  349|    596|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     60|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|    476|    return_trace (true);
  ------------------
  |  |  349|    476|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    476|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|    536|  }
_ZNK2OT7ArrayOfINS_18MathKernInfoRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|    597|  {
  730|    597|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    597|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|    597|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  1.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    597|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 594, False: 3]
  |  |  |  Branch (349:45): [True: 536, False: 58]
  |  |  ------------------
  ------------------
  732|    597|  }
_ZNK2OT8OffsetToINS_8MathKernENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  15.5k|  {
  427|  15.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  15.5k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  70.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.59k, False: 6.94k]
  |  |  |  Branch (349:45): [True: 5.71k, False: 1.22k]
  |  |  |  Branch (349:45): [True: 1.18k, False: 44]
  |  |  |  Branch (349:45): [True: 15.5k, False: 16]
  |  |  ------------------
  ------------------
  429|  15.5k|		  (this->is_null () ||
  430|  15.5k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  15.5k|		   neuter (c)));
  432|  15.5k|  }
_ZNK2OT8OffsetToINS_8MathKernENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  15.5k|  {
  417|  15.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  15.5k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  15.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 15.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     16|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     16|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  15.5k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  15.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8.59k, False: 6.94k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  8.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  6.94k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  6.94k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.94k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  6.94k|    return_trace (true);
  ------------------
  |  |  349|  6.94k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.94k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  6.94k|  }
_ZNK2OT8OffsetToINS_8MathKernENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.22k|  {
  437|  1.22k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.22k|    return c->try_set (this, 0);
  439|  1.22k|  }
_ZN2OT8OffsetToINS_8MathKernENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.18k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12MathKernInfoENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    224|  {
  437|    224|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    224|    return c->try_set (this, 0);
  439|    224|  }
_ZN2OT8OffsetToINS_12MathKernInfoENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    165|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_13MathGlyphInfoENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    307|  {
  437|    307|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    307|    return c->try_set (this, 0);
  439|    307|  }
_ZN2OT8OffsetToINS_13MathGlyphInfoENS_7IntTypeItLj2EEELb1EEaSEt:
  322|     75|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12MathVariantsENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  1.14k|  {
  427|  1.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  1.14k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  5.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 238, False: 859]
  |  |  |  Branch (349:45): [True: 630, False: 229]
  |  |  |  Branch (349:45): [True: 145, False: 84]
  |  |  |  Branch (349:45): [True: 1.09k, False: 50]
  |  |  ------------------
  ------------------
  429|  1.14k|		  (this->is_null () ||
  430|  1.14k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  1.14k|		   neuter (c)));
  432|  1.14k|  }
_ZNK2OT8OffsetToINS_12MathVariantsENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  1.14k|  {
  417|  1.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  1.14k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 50, False: 1.09k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     50|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     50|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  1.09k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  1.09k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 238, False: 859]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|    238|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    238|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|    859|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|    859|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 859]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|    859|    return_trace (true);
  ------------------
  |  |  349|    859|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    859|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|    859|  }
_ZNK2OT8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  21.8k|  {
  427|  21.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  21.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  21.8k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  99.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.4k, False: 11.3k]
  |  |  |  Branch (349:45): [True: 10.0k, False: 1.27k]
  |  |  |  Branch (349:45): [True: 1.21k, False: 62]
  |  |  |  Branch (349:45): [True: 21.8k, False: 26]
  |  |  ------------------
  ------------------
  429|  21.8k|		  (this->is_null () ||
  430|  21.8k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  21.8k|		   neuter (c)));
  432|  21.8k|  }
_ZNK2OT8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  21.8k|  {
  417|  21.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  21.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  21.8k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  21.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 21.8k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     26|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     26|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  21.8k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  21.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.4k, False: 11.3k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  10.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  11.3k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  11.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.3k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  11.3k|    return_trace (true);
  ------------------
  |  |  349|  11.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  11.3k|  }
_ZNK2OT8OffsetToINS_17MathGlyphAssemblyENS_7IntTypeItLj2EEELb1EE8sanitizeIJEEEbP21hb_sanitize_context_tPKvDpOT_:
  426|  10.6k|  {
  427|  10.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  428|  10.6k|    return_trace (sanitize_shallow (c, base) &&
  ------------------
  |  |  349|  49.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.95k, False: 6.64k]
  |  |  |  Branch (349:45): [True: 6.17k, False: 470]
  |  |  |  Branch (349:45): [True: 436, False: 34]
  |  |  |  Branch (349:45): [True: 10.5k, False: 3]
  |  |  ------------------
  ------------------
  429|  10.6k|		  (this->is_null () ||
  430|  10.6k|		   c->dispatch (StructAtOffset<Type> (base, *this), std::forward<Ts> (ds)...) ||
  431|  10.6k|		   neuter (c)));
  432|  10.6k|  }
_ZNK2OT8OffsetToINS_17MathGlyphAssemblyENS_7IntTypeItLj2EEELb1EE16sanitize_shallowEP21hb_sanitize_context_tPKv:
  416|  10.6k|  {
  417|  10.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  418|  10.6k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  10.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 10.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  419|  10.5k|    if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.95k, False: 6.64k]
  |  |  ------------------
  ------------------
                  if (unlikely (this->is_null ())) return_trace (true);
  ------------------
  |  |  349|  3.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  420|  6.64k|    if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  259|  6.64k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 6.64k]
  |  |  ------------------
  ------------------
                  if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  421|  6.64k|    return_trace (true);
  ------------------
  |  |  349|  6.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  422|  6.64k|  }
_ZNK2OT7ArrayOfINS_19MathGlyphPartRecordENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  6.45k|  {
  718|  6.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  6.45k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  6.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 284, False: 6.17k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    284|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  6.17k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  6.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_19MathGlyphPartRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  6.45k|  {
  730|  6.45k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.45k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  6.45k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  12.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.45k, False: 3]
  |  |  |  Branch (349:45): [True: 6.17k, False: 281]
  |  |  ------------------
  ------------------
  732|  6.45k|  }
_ZNK2OT8OffsetToINS_17MathGlyphAssemblyENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    470|  {
  437|    470|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    470|    return c->try_set (this, 0);
  439|    470|  }
_ZN2OT8OffsetToINS_17MathGlyphAssemblyENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    436|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT7ArrayOfINS_22MathGlyphVariantRecordENS_7IntTypeItLj2EEEE8sanitizeIJEEEbP21hb_sanitize_context_tDpOT_:
  717|  10.5k|  {
  718|  10.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  719|  10.5k|    if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 470, False: 10.0k]
  |  |  ------------------
  ------------------
                  if (unlikely (!sanitize_shallow (c))) return_trace (false);
  ------------------
  |  |  349|    470|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    470|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  720|  10.0k|    if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  209|      0|#define hb_is_trivially_copyable(T) std::is_trivially_copyable<T>::value
  |  |  ------------------
  |  |  |  Branch (209:37): [Folded - Ignored]
  |  |  ------------------
  ------------------
                  if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true);
  ------------------
  |  |  349|  10.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (720:9): [Folded - Ignored]
  ------------------
  721|      0|    unsigned int count = len;
  722|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (722:30): [True: 0, False: 0]
  ------------------
  723|      0|      if (unlikely (!c->dispatch (arrayZ[i], std::forward<Ts> (ds)...)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  725|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  726|      0|  }
_ZNK2OT7ArrayOfINS_22MathGlyphVariantRecordENS_7IntTypeItLj2EEEE16sanitize_shallowEP21hb_sanitize_context_t:
  729|  10.5k|  {
  730|  10.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  731|  10.5k|    return_trace (len.sanitize (c) && c->check_array (arrayZ, len));
  ------------------
  |  |  349|  21.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.5k, False: 19]
  |  |  |  Branch (349:45): [True: 10.0k, False: 451]
  |  |  ------------------
  ------------------
  732|  10.5k|  }
_ZNK2OT8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|  1.27k|  {
  437|  1.27k|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|  1.27k|    return c->try_set (this, 0);
  439|  1.27k|  }
_ZN2OT8OffsetToINS_21MathGlyphConstructionENS_7IntTypeItLj2EEELb1EEaSEt:
  322|  1.21k|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZNK2OT8OffsetToINS_12MathVariantsENS_7IntTypeItLj2EEELb1EE6neuterEP21hb_sanitize_context_t:
  436|    229|  {
  437|    229|    if (!has_null) return false;
  ------------------
  |  Branch (437:9): [Folded - Ignored]
  ------------------
  438|    229|    return c->try_set (this, 0);
  439|    229|  }
_ZN2OT8OffsetToINS_12MathVariantsENS_7IntTypeItLj2EEELb1EEaSEt:
  322|    145|  OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
_ZN2OT7IntTypeItLj2EE3cmpEPKS1_S3_:
   81|  74.1k|  { return b->cmp (*a); }
hb-ot-shaper-arabic.cc:_ZN2OT8OffsetToINS_6Layout6Common8CoverageENS_7IntTypeItLj2EEELb1EE19serialize_serializeIJR13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tINS_11HBGlyphID16EE10hb_array_tISB_EERK3$_5L24hb_function_sortedness_t1ELPv0EEEEEbP22hb_serialize_context_tDpOT_:
  374|    787|  {
  375|    787|    *this = 0;
  376|       |
  377|    787|    Type* obj = c->push<Type> ();
  378|    787|    bool ret = obj->serialize (c, std::forward<Ts> (ds)...);
  379|       |
  380|    787|    if (ret)
  ------------------
  |  Branch (380:9): [True: 787, False: 0]
  ------------------
  381|    787|      c->add_link (*this, c->pop_pack ());
  382|      0|    else
  383|      0|      c->pop_discard ();
  384|       |
  385|    787|    return ret;
  386|    787|  }
hb-ot-shaper-arabic.cc:_ZN2OT13SortedArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIS1_E10hb_array_tIS1_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSH_0EEEbP22hb_serialize_context_tT_:
  962|    537|  {
  963|    537|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    537|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  964|    537|    bool ret = ArrayOf<Type, LenType>::serialize (c, items);
  965|    537|    return_trace (ret);
  ------------------
  |  |  349|    537|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  966|    537|  }
hb-ot-shaper-arabic.cc:_ZN2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIS1_E10hb_array_tIS1_EERK3$_5L24hb_function_sortedness_t1ELPv0EELSH_0EEEbP22hb_serialize_context_tT_:
  682|    537|  {
  683|    537|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    537|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  684|    537|    unsigned count = hb_len (items);
  685|    537|    if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  259|    537|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 537]
  |  |  ------------------
  ------------------
                  if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  686|       |    /* TODO Umm. Just exhaust the iterator instead?  Being extra
  687|       |     * cautious right now.. */
  688|  15.8k|    for (unsigned i = 0; i < count; i++, ++items)
  ------------------
  |  Branch (688:26): [True: 15.2k, False: 537]
  ------------------
  689|  15.2k|      arrayZ[i] = *items;
  690|    537|    return_trace (true);
  ------------------
  |  |  349|    537|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  691|    537|  }
hb-ot-shaper-arabic.cc:_ZN2OT7ArrayOfINS_11HBGlyphID16ENS_7IntTypeItLj2EEEE9serializeI13hb_map_iter_tI13hb_zip_iter_tI17hb_sorted_array_tIS1_E10hb_array_tIS1_EERK3$_6L24hb_function_sortedness_t0ELPv0EELSH_0EEEbP22hb_serialize_context_tT_:
  682|    692|  {
  683|    692|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|    692|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
  684|    692|    unsigned count = hb_len (items);
  685|    692|    if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
                  if (unlikely (!serialize (c, count, false))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  686|       |    /* TODO Umm. Just exhaust the iterator instead?  Being extra
  687|       |     * cautious right now.. */
  688|  24.7k|    for (unsigned i = 0; i < count; i++, ++items)
  ------------------
  |  Branch (688:26): [True: 24.0k, False: 692]
  ------------------
  689|  24.0k|      arrayZ[i] = *items;
  690|    692|    return_trace (true);
  ------------------
  |  |  349|    692|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    692|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  691|    692|  }

_ZN3CFF12table_info_t4initEv:
  280|   174k|  void init () { offset = size = 0; link = 0; }
_ZNK3CFF9FDSelect08sanitizeEP21hb_sanitize_context_tj:
  319|     83|  {
  320|     83|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     83|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  321|     83|    if (unlikely (!(c->check_struct (this))))
  ------------------
  |  |  259|     83|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 83]
  |  |  ------------------
  ------------------
  322|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  323|     83|    if (unlikely (!c->check_array (fds, c->get_num_glyphs ())))
  ------------------
  |  |  259|     83|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 81]
  |  |  ------------------
  ------------------
  324|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  325|       |
  326|     81|    return_trace (true);
  ------------------
  |  |  349|     81|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     81|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  327|     83|  }
_ZNK3CFF9FDSelect06get_fdEj:
  330|     77|  { return fds[glyph]; }
_ZNK3CFF8FDSelect6get_fdEj:
  442|   274k|  {
  443|   274k|    if (this == &Null (FDSelect)) return 0;
  ------------------
  |  |  124|   274k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (443:9): [True: 274k, False: 46]
  ------------------
  444|       |
  445|     46|    switch (format)
  446|     46|    {
  447|     24|    case 0: return u.format0.get_fd (glyph);
  ------------------
  |  Branch (447:5): [True: 24, False: 22]
  ------------------
  448|     22|    case 3: return u.format3.get_fd (glyph);
  ------------------
  |  Branch (448:5): [True: 22, False: 24]
  ------------------
  449|      0|    default:return 0;
  ------------------
  |  Branch (449:5): [True: 0, False: 46]
  ------------------
  450|     46|    }
  451|     46|  }
_ZNK3CFF8FDSelect8sanitizeEP21hb_sanitize_context_tj:
  466|    139|  {
  467|    139|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    139|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  468|    139|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|    139|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 137]
  |  |  ------------------
  ------------------
  469|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  470|       |
  471|    137|    switch (format)
  472|    137|    {
  473|     65|    case 0: return_trace (u.format0.sanitize (c, fdcount));
  ------------------
  |  |  349|     65|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (473:5): [True: 65, False: 72]
  ------------------
  474|     71|    case 3: return_trace (u.format3.sanitize (c, fdcount));
  ------------------
  |  |  349|     71|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     71|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (474:5): [True: 71, False: 66]
  ------------------
  475|      1|    default:return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (475:5): [True: 1, False: 136]
  ------------------
  476|    137|    }
  477|    137|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS2_IhLj1EEEE6get_fdEj:
  392|     22|  {
  393|     22|    auto *range = hb_bsearch (glyph, &ranges[0], nRanges () - 1, sizeof (ranges[0]), _cmp_range);
  394|     22|    return range ? range->fd : ranges[nRanges () - 1].fd;
  ------------------
  |  Branch (394:12): [True: 20, False: 2]
  ------------------
  395|     22|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS2_IhLj1EEEE7nRangesEv:
  406|  2.27k|  GID_TYPE         nRanges () const { return ranges.len; }
_ZN3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS2_IhLj1EEEE10_cmp_rangeEPKvS7_:
  382|     42|  {
  383|     42|    hb_codepoint_t glyph = * (hb_codepoint_t *) _key;
  384|     42|    FDSelect3_4_Range<GID_TYPE, FD_TYPE> *range = (FDSelect3_4_Range<GID_TYPE, FD_TYPE> *) _item;
  385|       |
  386|     42|    if (glyph < range[0].first) return -1;
  ------------------
  |  Branch (386:9): [True: 16, False: 26]
  ------------------
  387|     26|    if (glyph < range[1].first) return 0;
  ------------------
  |  Branch (387:9): [True: 20, False: 6]
  ------------------
  388|      6|    return +1;
  389|     26|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS2_IhLj1EEEE8sanitizeEP21hb_sanitize_context_tj:
  365|     77|  {
  366|     77|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     77|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  367|     77|    if (unlikely (!c->check_struct (this) || !ranges.sanitize (c, nullptr, fdcount) ||
  ------------------
  |  |  259|    434|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 63]
  |  |  |  Branch (259:47): [True: 1, False: 76]
  |  |  |  Branch (259:47): [True: 12, False: 64]
  |  |  |  Branch (259:47): [True: 1, False: 63]
  |  |  |  Branch (259:47): [True: 0, False: 63]
  |  |  ------------------
  ------------------
  368|     77|		  (nRanges () == 0) || ranges[0].first != 0))
  369|     14|      return_trace (false);
  ------------------
  |  |  349|     14|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     14|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  370|       |
  371|  2.06k|    for (unsigned int i = 1; i < nRanges (); i++)
  ------------------
  |  Branch (371:30): [True: 2.00k, False: 61]
  ------------------
  372|  2.00k|      if (unlikely (ranges[i - 1].first >= ranges[i].first))
  ------------------
  |  |  259|  2.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 2.00k]
  |  |  ------------------
  ------------------
  373|      2|	return_trace (false);
  ------------------
  |  |  349|     65|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  374|       |
  375|     61|    if (unlikely (!sentinel().sanitize (c) || (sentinel() != c->get_num_glyphs ())))
  ------------------
  |  |  259|    121|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 59]
  |  |  |  Branch (259:47): [True: 1, False: 60]
  |  |  |  Branch (259:47): [True: 1, False: 59]
  |  |  ------------------
  ------------------
  376|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  377|       |
  378|     59|    return_trace (true);
  ------------------
  |  |  349|     59|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     59|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  379|     61|  }
_ZNK3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS2_IhLj1EEEE8sanitizeEP21hb_sanitize_context_tPKvj:
  347|  2.56k|  {
  348|  2.56k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.56k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  349|  2.56k|    return_trace (first < c->get_num_glyphs () && (fd < fdcount));
  ------------------
  |  |  349|  5.11k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.56k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.55k, False: 7]
  |  |  |  Branch (349:45): [True: 2.54k, False: 4]
  |  |  ------------------
  ------------------
  350|  2.56k|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS2_IhLj1EEEE8sentinelEv:
  408|    121|  const GID_TYPE &sentinel () const { return StructAfter<GID_TYPE> (ranges[nRanges () - 1]); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEixEj:
  174|   372k|  {
  175|   372k|    if (unlikely (index >= count)) return hb_ubytes_t ();
  ------------------
  |  |  259|   372k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8.83k, False: 364k]
  |  |  ------------------
  ------------------
  176|   364k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|   364k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  177|   364k|    unsigned offset0 = offset_at (index);
  178|   364k|    unsigned offset1 = offset_at (index + 1);
  179|   364k|    if (unlikely (offset1 < offset0 || offset1 > offset_at (count)))
  ------------------
  |  |  259|   686k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 53.4k, False: 310k]
  |  |  |  Branch (259:47): [True: 41.3k, False: 322k]
  |  |  |  Branch (259:47): [True: 12.1k, False: 310k]
  |  |  ------------------
  ------------------
  180|  53.4k|      return hb_ubytes_t ();
  181|   310k|    return hb_ubytes_t (data_base () + offset0, offset1 - offset0);
  182|   364k|  }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEE9offset_atEj:
  154|  1.06M|  {
  155|  1.06M|    assert (index <= count);
  156|       |
  157|      0|    unsigned int size = offSize;
  158|  1.06M|    const HBUINT8 *p = offsets + size * index;
  159|  1.06M|    switch (size)
  160|  1.06M|    {
  161|   883k|      case 1: return * (HBUINT8  *) p;
  ------------------
  |  Branch (161:7): [True: 883k, False: 178k]
  ------------------
  162|   171k|      case 2: return * (HBUINT16 *) p;
  ------------------
  |  Branch (162:7): [True: 171k, False: 890k]
  ------------------
  163|  2.88k|      case 3: return * (HBUINT24 *) p;
  ------------------
  |  Branch (163:7): [True: 2.88k, False: 1.05M]
  ------------------
  164|  4.06k|      case 4: return * (HBUINT32 *) p;
  ------------------
  |  Branch (164:7): [True: 4.06k, False: 1.05M]
  ------------------
  165|      0|      default: return 0;
  ------------------
  |  Branch (165:7): [True: 0, False: 1.06M]
  ------------------
  166|  1.06M|    }
  167|  1.06M|  }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEE9data_baseEv:
  170|   317k|  { return (const unsigned char *) this + min_size + offSize.static_size - 1 + offset_array_size (); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEE17offset_array_sizeEv:
   63|   321k|  { return offSize * (count + 1); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  192|  8.14k|  {
  193|  8.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  194|  8.14k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|   102k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.09k, False: 0]
  |  |  |  Branch (349:45): [True: 7.08k, False: 3]
  |  |  |  Branch (349:45): [True: 7.08k, False: 8]
  |  |  |  Branch (349:45): [True: 7.06k, False: 21]
  |  |  |  Branch (349:45): [True: 7.05k, False: 6]
  |  |  |  Branch (349:45): [True: 7.02k, False: 33]
  |  |  |  Branch (349:45): [True: 1.04k, False: 7.09k]
  |  |  |  Branch (349:45): [True: 8.13k, False: 8]
  |  |  ------------------
  ------------------
  195|  8.14k|			  (count == 0 || /* empty INDEX */
  196|  8.14k|			   (count < count + 1u &&
  197|  8.14k|			    c->check_struct (&offSize) && offSize >= 1 && offSize <= 4 &&
  198|  8.14k|			    c->check_array (offsets, offSize, count + 1u) &&
  199|  8.14k|			    c->check_array ((const HBUINT8*) data_base (), 1, offset_at (count))))));
  200|  8.14k|  }
_ZNK3CFF8CFFIndexIN2OT7IntTypeItLj2EEEE8get_sizeEv:
  185|  4.49k|  {
  186|  4.49k|    if (count)
  ------------------
  |  Branch (186:9): [True: 4.38k, False: 114]
  ------------------
  187|  4.38k|      return min_size + offSize.static_size + offset_array_size () + (offset_at (count) - 1);
  188|    114|    return min_size;  /* empty CFFIndex contains count only */
  189|  4.49k|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeIjLj4EEENS2_ItLj2EEEE7nRangesEv:
  406|     15|  GID_TYPE         nRanges () const { return ranges.len; }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeIjLj4EEENS2_ItLj2EEEE8sanitizeEP21hb_sanitize_context_tj:
  365|     24|  {
  366|     24|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     24|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  367|     24|    if (unlikely (!c->check_struct (this) || !ranges.sanitize (c, nullptr, fdcount) ||
  ------------------
  |  |  259|    104|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 4]
  |  |  |  Branch (259:47): [True: 1, False: 23]
  |  |  |  Branch (259:47): [True: 18, False: 5]
  |  |  |  Branch (259:47): [True: 1, False: 4]
  |  |  |  Branch (259:47): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  368|     24|		  (nRanges () == 0) || ranges[0].first != 0))
  369|     20|      return_trace (false);
  ------------------
  |  |  349|     20|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     20|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  370|       |
  371|      7|    for (unsigned int i = 1; i < nRanges (); i++)
  ------------------
  |  Branch (371:30): [True: 5, False: 2]
  ------------------
  372|      5|      if (unlikely (ranges[i - 1].first >= ranges[i].first))
  ------------------
  |  |  259|      5|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 3]
  |  |  ------------------
  ------------------
  373|      2|	return_trace (false);
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  374|       |
  375|      2|    if (unlikely (!sentinel().sanitize (c) || (sentinel() != c->get_num_glyphs ())))
  ------------------
  |  |  259|      3|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 0]
  |  |  |  Branch (259:47): [True: 1, False: 1]
  |  |  |  Branch (259:47): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  376|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  377|       |
  378|      0|    return_trace (true);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  379|      2|  }
_ZNK3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS2_ItLj2EEEE8sanitizeEP21hb_sanitize_context_tPKvj:
  347|    126|  {
  348|    126|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    126|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  349|    126|    return_trace (first < c->get_num_glyphs () && (fd < fdcount));
  ------------------
  |  |  349|    242|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    126|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 116, False: 10]
  |  |  |  Branch (349:45): [True: 116, False: 0]
  |  |  ------------------
  ------------------
  350|    126|  }
_ZNK3CFF11FDSelect3_4IN2OT7IntTypeIjLj4EEENS2_ItLj2EEEE8sentinelEv:
  408|      3|  const GID_TYPE &sentinel () const { return StructAfter<GID_TYPE> (ranges[nRanges () - 1]); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  192|  3.47k|  {
  193|  3.47k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.47k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  194|  3.47k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  33.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.47k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.13k, False: 1]
  |  |  |  Branch (349:45): [True: 2.13k, False: 1]
  |  |  |  Branch (349:45): [True: 2.13k, False: 3]
  |  |  |  Branch (349:45): [True: 2.12k, False: 6]
  |  |  |  Branch (349:45): [True: 2.11k, False: 15]
  |  |  |  Branch (349:45): [True: 2.10k, False: 10]
  |  |  |  Branch (349:45): [True: 1.33k, False: 2.13k]
  |  |  |  Branch (349:45): [True: 3.46k, False: 4]
  |  |  ------------------
  ------------------
  195|  3.47k|			  (count == 0 || /* empty INDEX */
  196|  3.47k|			   (count < count + 1u &&
  197|  3.47k|			    c->check_struct (&offSize) && offSize >= 1 && offSize <= 4 &&
  198|  3.47k|			    c->check_array (offsets, offSize, count + 1u) &&
  199|  3.47k|			    c->check_array ((const HBUINT8*) data_base (), 1, offset_at (count))))));
  200|  3.47k|  }
_ZNK3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEE9data_baseEv:
  170|  52.9k|  { return (const unsigned char *) this + min_size + offSize.static_size - 1 + offset_array_size (); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEE17offset_array_sizeEv:
   63|  52.9k|  { return offSize * (count + 1); }
_ZNK3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEE9offset_atEj:
  154|   256k|  {
  155|   256k|    assert (index <= count);
  156|       |
  157|      0|    unsigned int size = offSize;
  158|   256k|    const HBUINT8 *p = offsets + size * index;
  159|   256k|    switch (size)
  160|   256k|    {
  161|   213k|      case 1: return * (HBUINT8  *) p;
  ------------------
  |  Branch (161:7): [True: 213k, False: 42.2k]
  ------------------
  162|  34.1k|      case 2: return * (HBUINT16 *) p;
  ------------------
  |  Branch (162:7): [True: 34.1k, False: 221k]
  ------------------
  163|  2.35k|      case 3: return * (HBUINT24 *) p;
  ------------------
  |  Branch (163:7): [True: 2.35k, False: 253k]
  ------------------
  164|  5.72k|      case 4: return * (HBUINT32 *) p;
  ------------------
  |  Branch (164:7): [True: 5.72k, False: 250k]
  ------------------
  165|      0|      default: return 0;
  ------------------
  |  Branch (165:7): [True: 0, False: 256k]
  ------------------
  166|   256k|    }
  167|   256k|  }
_ZNK3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEEixEj:
  174|  92.6k|  {
  175|  92.6k|    if (unlikely (index >= count)) return hb_ubytes_t ();
  ------------------
  |  |  259|  92.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 92.6k]
  |  |  ------------------
  ------------------
  176|  92.6k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  92.6k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  177|  92.6k|    unsigned offset0 = offset_at (index);
  178|  92.6k|    unsigned offset1 = offset_at (index + 1);
  179|  92.6k|    if (unlikely (offset1 < offset0 || offset1 > offset_at (count)))
  ------------------
  |  |  259|   161k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 41.8k, False: 50.8k]
  |  |  |  Branch (259:47): [True: 24.0k, False: 68.6k]
  |  |  |  Branch (259:47): [True: 17.8k, False: 50.8k]
  |  |  ------------------
  ------------------
  180|  41.8k|      return hb_ubytes_t ();
  181|  50.8k|    return hb_ubytes_t (data_base () + offset0, offset1 - offset0);
  182|  92.6k|  }
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_7CharsetEEERKT_PKvj:
   47|  1.03k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 1.03k, False: 0]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_11CFF1FDArrayEEERKT_PKvj:
   47|    149|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|      3|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 146, False: 3]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_12CFF1FDSelectEEERKT_PKvj:
   47|    149|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|      4|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 145, False: 4]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_8EncodingEEERKT_PKvj:
   47|     17|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 17, False: 0]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_8CFFIndexIN2OT7IntTypeItLj2EEEEEEERKT_PKvj:
   47|  1.38k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|      6|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 1.38k, False: 6]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_5SubrsIN2OT7IntTypeItLj2EEEEEEERKT_PKvj:
   47|  24.7k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|  24.2k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 429, False: 24.2k]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_18CFF2VariationStoreEEERKT_PKvj:
   47|  1.10k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|  1.04k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 64, False: 1.04k]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_8CFFIndexIN2OT7IntTypeIjLj4EEEEEEERKT_PKvj:
   47|  1.10k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|     18|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 1.09k, False: 18]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_11CFF2FDArrayEEERKT_PKvj:
   47|  1.10k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|     20|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 1.08k, False: 20]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_12CFF2FDSelectEEERKT_PKvj:
   47|  1.10k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|  1.04k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 61, False: 1.04k]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_14UnsizedByteStrEEERKT_PKvj:
   47|  46.1k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|  45.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 1.10k, False: 45.0k]
  ------------------
hb-ot-font.cc:_ZN3CFFL20StructAtOffsetOrNullINS_5SubrsIN2OT7IntTypeIjLj4EEEEEEERKT_PKvj:
   47|  46.1k|{ return offset ? StructAtOffset<Type> (P, offset) : Null (Type); }
  ------------------
  |  |  124|  45.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (47:10): [True: 248, False: 45.9k]
  ------------------

_ZN2OT4cff129lookup_expert_charset_for_sidEj:
  233|    118|{
  234|    118|  if (glyph < ARRAY_LENGTH (expert_charset_to_sid))
  ------------------
  |  Branch (234:7): [True: 118, False: 0]
  ------------------
  235|    118|    return (hb_codepoint_t)expert_charset_to_sid[glyph];
  236|      0|  else
  237|      0|    return 0;
  238|    118|}
_ZN2OT4cff136lookup_expert_subset_charset_for_sidEj:
  241|     94|{
  242|     94|  if (glyph < ARRAY_LENGTH (expert_subset_charset_to_sid))
  ------------------
  |  Branch (242:7): [True: 94, False: 0]
  ------------------
  243|     94|    return (hb_codepoint_t)expert_subset_charset_to_sid[glyph];
  244|      0|  else
  245|      0|    return 0;
  246|     94|}
_ZN2OT4cff132lookup_standard_encoding_for_sidEj:
  261|  21.5k|{
  262|  21.5k|  if (code < ARRAY_LENGTH (standard_encoding_to_sid))
  ------------------
  |  Branch (262:7): [True: 15.5k, False: 6.04k]
  ------------------
  263|  15.5k|    return (hb_codepoint_t)standard_encoding_to_sid[code];
  264|  6.04k|  else
  265|  6.04k|    return CFF_UNDEF_SID;
  ------------------
  |  |   49|  6.04k|#define CFF_UNDEF_SID   CFF_UNDEF_CODE
  |  |  ------------------
  |  |  |  |   39|  6.04k|#define CFF_UNDEF_CODE  0xFFFFFFFF
  |  |  ------------------
  ------------------
  266|  21.5k|}
_ZNK2OT4cff113accelerator_t11get_extentsEP9hb_font_tjP18hb_glyph_extents_t:
  407|   575k|{
  408|       |#ifdef HB_NO_OT_FONT_CFF
  409|       |  /* XXX Remove check when this code moves to .hh file. */
  410|       |  return true;
  411|       |#endif
  412|       |
  413|   575k|  bounds_t bounds;
  414|       |
  415|   575k|  if (!_get_bounds (this, glyph, bounds))
  ------------------
  |  Branch (415:7): [True: 423k, False: 151k]
  ------------------
  416|   423k|    return false;
  417|       |
  418|   151k|  if (bounds.min.x >= bounds.max.x)
  ------------------
  |  Branch (418:7): [True: 139k, False: 12.4k]
  ------------------
  419|   139k|  {
  420|   139k|    extents->width = 0;
  421|   139k|    extents->x_bearing = 0;
  422|   139k|  }
  423|  12.4k|  else
  424|  12.4k|  {
  425|  12.4k|    extents->x_bearing = roundf (bounds.min.x.to_real ());
  ------------------
  |  |  207|  12.4k|#define roundf(x) _hb_roundf(x)
  ------------------
  426|  12.4k|    extents->width = roundf (bounds.max.x.to_real () - extents->x_bearing);
  ------------------
  |  |  207|  12.4k|#define roundf(x) _hb_roundf(x)
  ------------------
  427|  12.4k|  }
  428|   151k|  if (bounds.min.y >= bounds.max.y)
  ------------------
  |  Branch (428:7): [True: 144k, False: 6.47k]
  ------------------
  429|   144k|  {
  430|   144k|    extents->height = 0;
  431|   144k|    extents->y_bearing = 0;
  432|   144k|  }
  433|  6.47k|  else
  434|  6.47k|  {
  435|  6.47k|    extents->y_bearing = roundf (bounds.max.y.to_real ());
  ------------------
  |  |  207|  6.47k|#define roundf(x) _hb_roundf(x)
  ------------------
  436|  6.47k|    extents->height = roundf (bounds.min.y.to_real () - extents->y_bearing);
  ------------------
  |  |  207|  6.47k|#define roundf(x) _hb_roundf(x)
  ------------------
  437|  6.47k|  }
  438|       |
  439|   151k|  font->scale_glyph_extents (extents);
  440|       |
  441|   151k|  return true;
  442|   575k|}
_ZNK2OT4cff113accelerator_t8get_pathEP9hb_font_tjR17hb_draw_session_t:
  566|   137k|{
  567|       |#ifdef HB_NO_OT_FONT_CFF
  568|       |  /* XXX Remove check when this code moves to .hh file. */
  569|       |  return true;
  570|       |#endif
  571|       |
  572|   137k|  return _get_path (this, font, glyph, draw_session);
  573|   137k|}
hb-ot-cff1-table.cc:_ZL11_get_boundsPKN2OT4cff113accelerator_tEjR8bounds_tb:
  391|   577k|{
  392|   577k|  bounds.init ();
  393|   577k|  if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
  ------------------
  |  |  259|  1.11M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 303k, False: 273k]
  |  |  |  Branch (259:47): [True: 43.3k, False: 534k]
  |  |  |  Branch (259:47): [True: 260k, False: 273k]
  |  |  ------------------
  ------------------
  394|       |
  395|   273k|  unsigned int fd = cff->fdSelect->get_fd (glyph);
  396|   273k|  const hb_ubytes_t str = (*cff->charStrings)[glyph];
  397|   273k|  cff1_cs_interp_env_t env (str, *cff, fd);
  398|   273k|  env.set_in_seac (in_seac);
  399|   273k|  cff1_cs_interpreter_t<cff1_cs_opset_extents_t, cff1_extents_param_t> interp (env);
  400|   273k|  cff1_extents_param_t param (cff);
  401|   273k|  if (unlikely (!interp.interpret (param))) return false;
  ------------------
  |  |  259|   273k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 120k, False: 152k]
  |  |  ------------------
  ------------------
  402|   152k|  bounds = param.bounds;
  403|   152k|  return true;
  404|   273k|}
_ZN8bounds_t4initEv:
  271|   851k|  {
  272|   851k|    min.set_int (INT_MAX, INT_MAX);
  273|   851k|    max.set_int (INT_MIN, INT_MIN);
  274|   851k|  }
_ZN20cff1_extents_param_tC2EPKN2OT4cff113accelerator_tE:
  315|   273k|  {
  316|   273k|    bounds.init ();
  317|   273k|  }
_ZN23cff1_cs_opset_extents_t12process_seacERN3CFF20cff1_cs_interp_env_tER20cff1_extents_param_t:
  368|  10.5k|  {
  369|  10.5k|    unsigned int  n = env.argStack.get_count ();
  370|  10.5k|    point_t delta;
  371|  10.5k|    delta.x = env.argStack[n-4];
  372|  10.5k|    delta.y = env.argStack[n-3];
  373|  10.5k|    hb_codepoint_t base = param.cff->std_code_to_glyph (env.argStack[n-2].to_int ());
  374|  10.5k|    hb_codepoint_t accent = param.cff->std_code_to_glyph (env.argStack[n-1].to_int ());
  375|       |
  376|  10.5k|    bounds_t  base_bounds, accent_bounds;
  377|  10.5k|    if (likely (!env.in_seac && base && accent
  ------------------
  |  |  258|  56.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 728, False: 9.83k]
  |  |  |  Branch (258:45): [True: 10.5k, False: 44]
  |  |  |  Branch (258:45): [True: 1.79k, False: 8.72k]
  |  |  |  Branch (258:45): [True: 1.26k, False: 534]
  |  |  |  Branch (258:45): [True: 730, False: 531]
  |  |  |  Branch (258:45): [True: 728, False: 2]
  |  |  ------------------
  ------------------
  378|  10.5k|	       && _get_bounds (param.cff, base, base_bounds, true)
  379|  10.5k|	       && _get_bounds (param.cff, accent, accent_bounds, true)))
  380|    728|    {
  381|    728|      param.bounds.merge (base_bounds);
  382|    728|      accent_bounds.offset (delta);
  383|    728|      param.bounds.merge (accent_bounds);
  384|    728|    }
  385|  9.83k|    else
  386|  9.83k|      env.set_error ();
  387|  10.5k|  }
_ZN8bounds_t5mergeERKS_:
  285|  1.45k|  {
  286|  1.45k|    if (empty ())
  ------------------
  |  Branch (286:9): [True: 308, False: 1.14k]
  ------------------
  287|    308|      *this = b;
  288|  1.14k|    else if (!b.empty ())
  ------------------
  |  Branch (288:14): [True: 1.01k, False: 137]
  ------------------
  289|  1.01k|    {
  290|  1.01k|      if (b.min.x < min.x) min.x = b.min.x;
  ------------------
  |  Branch (290:11): [True: 691, False: 320]
  ------------------
  291|  1.01k|      if (b.max.x > max.x) max.x = b.max.x;
  ------------------
  |  Branch (291:11): [True: 316, False: 695]
  ------------------
  292|  1.01k|      if (b.min.y < min.y) min.y = b.min.y;
  ------------------
  |  Branch (292:11): [True: 741, False: 270]
  ------------------
  293|  1.01k|      if (b.max.y > max.y) max.y = b.max.y;
  ------------------
  |  Branch (293:11): [True: 272, False: 739]
  ------------------
  294|  1.01k|    }
  295|  1.45k|  }
_ZNK8bounds_t5emptyEv:
  306|  3.33k|  bool empty () const { return (min.x >= max.x) || (min.y >= max.y); }
  ------------------
  |  Branch (306:32): [True: 504, False: 2.82k]
  |  Branch (306:52): [True: 70, False: 2.75k]
  ------------------
_ZN8bounds_t6offsetERKN3CFF7point_tE:
  298|    728|  {
  299|    728|    if (!empty ())
  ------------------
  |  Branch (299:9): [True: 599, False: 129]
  ------------------
  300|    599|    {
  301|    599|      min.move (delta);
  302|    599|      max.move (delta);
  303|    599|    }
  304|    728|  }
_ZN25cff1_path_procs_extents_t6movetoERN3CFF20cff1_cs_interp_env_tER20cff1_extents_param_tRKNS0_7point_tE:
  332|  19.9k|  {
  333|  19.9k|    param.end_path ();
  334|  19.9k|    env.moveto (pt);
  335|  19.9k|  }
_ZN20cff1_extents_param_t8end_pathEv:
  320|  19.9k|  void end_path     ()       { path_open = false; }
_ZN25cff1_path_procs_extents_t4lineERN3CFF20cff1_cs_interp_env_tER20cff1_extents_param_tRKNS0_7point_tE:
  338|   121k|  {
  339|   121k|    if (!param.is_path_open ())
  ------------------
  |  Branch (339:9): [True: 31.7k, False: 90.1k]
  ------------------
  340|  31.7k|    {
  341|  31.7k|      param.start_path ();
  342|  31.7k|      param.bounds.update (env.get_pt ());
  343|  31.7k|    }
  344|   121k|    env.moveto (pt1);
  345|   121k|    param.bounds.update (env.get_pt ());
  346|   121k|  }
_ZNK20cff1_extents_param_t12is_path_openEv:
  321|   232k|  bool is_path_open () const { return path_open; }
_ZN20cff1_extents_param_t10start_pathEv:
  319|  62.0k|  void start_path   ()       { path_open = true; }
_ZN8bounds_t6updateERKN3CFF7point_tE:
  277|   516k|  {
  278|   516k|    if (pt.x < min.x) min.x = pt.x;
  ------------------
  |  Branch (278:9): [True: 134k, False: 381k]
  ------------------
  279|   516k|    if (pt.x > max.x) max.x = pt.x;
  ------------------
  |  Branch (279:9): [True: 202k, False: 314k]
  ------------------
  280|   516k|    if (pt.y < min.y) min.y = pt.y;
  ------------------
  |  Branch (280:9): [True: 134k, False: 381k]
  ------------------
  281|   516k|    if (pt.y > max.y) max.y = pt.y;
  ------------------
  |  Branch (281:9): [True: 187k, False: 329k]
  ------------------
  282|   516k|  }
_ZN25cff1_path_procs_extents_t5curveERN3CFF20cff1_cs_interp_env_tER20cff1_extents_param_tRKNS0_7point_tES7_S7_:
  349|   110k|  {
  350|   110k|    if (!param.is_path_open ())
  ------------------
  |  Branch (350:9): [True: 30.2k, False: 80.6k]
  ------------------
  351|  30.2k|    {
  352|  30.2k|      param.start_path ();
  353|  30.2k|      param.bounds.update (env.get_pt ());
  354|  30.2k|    }
  355|       |    /* include control points */
  356|   110k|    param.bounds.update (pt1);
  357|   110k|    param.bounds.update (pt2);
  358|   110k|    env.moveto (pt3);
  359|   110k|    param.bounds.update (env.get_pt ());
  360|   110k|  }
hb-ot-cff1-table.cc:_ZL9_get_pathPKN2OT4cff113accelerator_tEP9hb_font_tjR17hb_draw_session_tbPN3CFF7point_tE:
  539|   138k|{
  540|   138k|  if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
  ------------------
  |  |  259|   139k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 137k, False: 1.08k]
  |  |  |  Branch (259:47): [True: 136k, False: 1.47k]
  |  |  |  Branch (259:47): [True: 392, False: 1.08k]
  |  |  ------------------
  ------------------
  541|       |
  542|  1.08k|  unsigned int fd = cff->fdSelect->get_fd (glyph);
  543|  1.08k|  const hb_ubytes_t str = (*cff->charStrings)[glyph];
  544|  1.08k|  cff1_cs_interp_env_t env (str, *cff, fd);
  545|  1.08k|  env.set_in_seac (in_seac);
  546|  1.08k|  cff1_cs_interpreter_t<cff1_cs_opset_path_t, cff1_path_param_t> interp (env);
  547|  1.08k|  cff1_path_param_t param (cff, font, draw_session, delta);
  548|  1.08k|  if (unlikely (!interp.interpret (param))) return false;
  ------------------
  |  |  259|  1.08k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 718, False: 368]
  |  |  ------------------
  ------------------
  549|       |
  550|       |  /* Let's end the path specially since it is called inside seac also */
  551|    368|  param.end_path ();
  552|       |
  553|    368|  return true;
  554|  1.08k|}
_ZN17cff1_path_param_tC2EPKN2OT4cff113accelerator_tEP9hb_font_tR17hb_draw_session_tPN3CFF7point_tE:
  448|  1.08k|  {
  449|  1.08k|    draw_session = &draw_session_;
  450|  1.08k|    cff = cff_;
  451|  1.08k|    font = font_;
  452|  1.08k|    delta = delta_;
  453|  1.08k|  }
_ZN20cff1_cs_opset_path_t12process_seacERN3CFF20cff1_cs_interp_env_tER17cff1_path_param_t:
  519|    215|  {
  520|       |    /* End previous path */
  521|    215|    param.end_path ();
  522|       |
  523|    215|    unsigned int n = env.argStack.get_count ();
  524|    215|    point_t delta;
  525|    215|    delta.x = env.argStack[n-4];
  526|    215|    delta.y = env.argStack[n-3];
  527|    215|    hb_codepoint_t base = param.cff->std_code_to_glyph (env.argStack[n-2].to_int ());
  528|    215|    hb_codepoint_t accent = param.cff->std_code_to_glyph (env.argStack[n-1].to_int ());
  529|       |
  530|    215|    if (unlikely (!(!env.in_seac && base && accent
  ------------------
  |  |  259|  1.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 116, False: 99]
  |  |  |  Branch (259:47): [True: 197, False: 18]
  |  |  |  Branch (259:47): [True: 156, False: 41]
  |  |  |  Branch (259:47): [True: 142, False: 14]
  |  |  |  Branch (259:47): [True: 101, False: 41]
  |  |  |  Branch (259:47): [True: 99, False: 2]
  |  |  ------------------
  ------------------
  531|    215|		    && _get_path (param.cff, param.font, base, *param.draw_session, true)
  532|    215|		    && _get_path (param.cff, param.font, accent, *param.draw_session, true, &delta))))
  533|    116|      env.set_error ();
  534|    215|  }
_ZN22cff1_path_procs_path_t6movetoERN3CFF20cff1_cs_interp_env_tER17cff1_path_param_tRKNS0_7point_tE:
  495|  3.71k|  {
  496|  3.71k|    param.move_to (pt);
  497|  3.71k|    env.moveto (pt);
  498|  3.71k|  }
_ZN17cff1_path_param_t7move_toERKN3CFF7point_tE:
  456|  3.71k|  {
  457|  3.71k|    point_t point = p;
  458|  3.71k|    if (delta) point.move (*delta);
  ------------------
  |  Branch (458:9): [True: 154, False: 3.56k]
  ------------------
  459|  3.71k|    draw_session->move_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
  460|  3.71k|  }
_ZN22cff1_path_procs_path_t4lineERN3CFF20cff1_cs_interp_env_tER17cff1_path_param_tRKNS0_7point_tE:
  501|  16.4k|  {
  502|  16.4k|    param.line_to (pt1);
  503|  16.4k|    env.moveto (pt1);
  504|  16.4k|  }
_ZN17cff1_path_param_t7line_toERKN3CFF7point_tE:
  463|  16.4k|  {
  464|  16.4k|    point_t point = p;
  465|  16.4k|    if (delta) point.move (*delta);
  ------------------
  |  Branch (465:9): [True: 1.05k, False: 15.3k]
  ------------------
  466|  16.4k|    draw_session->line_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
  467|  16.4k|  }
_ZN22cff1_path_procs_path_t5curveERN3CFF20cff1_cs_interp_env_tER17cff1_path_param_tRKNS0_7point_tES7_S7_:
  507|  9.93k|  {
  508|  9.93k|    param.cubic_to (pt1, pt2, pt3);
  509|  9.93k|    env.moveto (pt3);
  510|  9.93k|  }
_ZN17cff1_path_param_t8cubic_toERKN3CFF7point_tES3_S3_:
  470|  9.93k|  {
  471|  9.93k|    point_t point1 = p1, point2 = p2, point3 = p3;
  472|  9.93k|    if (delta)
  ------------------
  |  Branch (472:9): [True: 669, False: 9.27k]
  ------------------
  473|    669|    {
  474|    669|      point1.move (*delta);
  475|    669|      point2.move (*delta);
  476|    669|      point3.move (*delta);
  477|    669|    }
  478|  9.93k|    draw_session->cubic_to (font->em_fscalef_x (point1.x.to_real ()), font->em_fscalef_y (point1.y.to_real ()),
  479|  9.93k|			   font->em_fscalef_x (point2.x.to_real ()), font->em_fscalef_y (point2.y.to_real ()),
  480|  9.93k|			   font->em_fscalef_x (point3.x.to_real ()), font->em_fscalef_y (point3.y.to_real ()));
  481|  9.93k|  }
_ZN17cff1_path_param_t8end_pathEv:
  483|    583|  void end_path () { draw_session->close_path (); }

_ZN2OT4cff113accelerator_tD2Ev:
 1361|  32.7k|    {
 1362|  32.7k|      hb_sorted_vector_t<gname_t> *names = glyph_names.get_relaxed ();
 1363|  32.7k|      if (names)
  ------------------
  |  Branch (1363:11): [True: 829, False: 31.9k]
  ------------------
 1364|    829|      {
 1365|    829|	names->fini ();
 1366|    829|	hb_free (names);
  ------------------
  |  |  236|    829|#define hb_free hb_free_impl
  ------------------
 1367|    829|      }
 1368|       |
 1369|  32.7k|      SUPER::fini ();
 1370|  32.7k|    }
_ZN2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE4finiEv:
 1204|  64.3k|    {
 1205|  64.3k|      sc.end_processing ();
 1206|  64.3k|      topDict.fini ();
 1207|  64.3k|      fontDicts.fini ();
 1208|  64.3k|      privateDicts.fini ();
 1209|  64.3k|      hb_blob_destroy (blob);
 1210|  64.3k|      blob = nullptr;
 1211|  64.3k|    }
_ZN3CFF22cff1_top_dict_values_t4finiEv:
  751|  64.3k|  void fini () { top_dict_values_t<cff1_top_dict_val_t>::fini (); }
_ZNK3CFF9Encoding08sanitizeEP21hb_sanitize_context_t:
   65|      6|  {
   66|      6|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      6|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   67|      6|    return_trace (codes.sanitize (c));
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   68|      6|  }
_ZNK3CFF9Encoding06nCodesEv:
   83|      2|  HBUINT8 nCodes () const { return codes.len; }
_ZNK3CFF9Encoding18sanitizeEP21hb_sanitize_context_t:
  105|      7|  {
  106|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  107|      7|    return_trace (ranges.sanitize (c));
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  108|      7|  }
_ZNK3CFF9Encoding17nRangesEv:
  128|      5|  HBUINT8 nRanges () const { return ranges.len; }
_ZNK3CFF15CFF1SuppEncData8sanitizeEP21hb_sanitize_context_t:
  150|      7|  {
  151|      7|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|      7|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  152|      7|    return_trace (supps.sanitize (c));
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|      7|  }
_ZNK3CFF8Encoding12table_formatEv:
  267|     22|  uint8_t table_format () const { return format & 0x7F; }
_ZNK3CFF8Encoding14has_supplementEv:
  268|      9|  bool  has_supplement () const { return format & 0x80; }
_ZNK3CFF8Encoding8sanitizeEP21hb_sanitize_context_t:
  278|     17|  {
  279|     17|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     17|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  280|     17|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|     17|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 15]
  |  |  ------------------
  ------------------
  281|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  282|       |
  283|     15|    switch (table_format ())
  284|     15|    {
  285|      6|    case 0: if (unlikely (!u.format0.sanitize (c))) { return_trace (false); } break;
  ------------------
  |  |  259|      6|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 4]
  |  |  ------------------
  ------------------
                  case 0: if (unlikely (!u.format0.sanitize (c))) { return_trace (false); } break;
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (285:5): [True: 6, False: 9]
  ------------------
  286|      7|    case 1: if (unlikely (!u.format1.sanitize (c))) { return_trace (false); } break;
  ------------------
  |  |  259|      7|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 5]
  |  |  ------------------
  ------------------
                  case 1: if (unlikely (!u.format1.sanitize (c))) { return_trace (false); } break;
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (286:5): [True: 7, False: 8]
  ------------------
  287|      5|    default:return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (287:5): [True: 2, False: 13]
  ------------------
  288|     15|    }
  289|      9|    return_trace (likely (!has_supplement () || suppEncData ().sanitize (c)));
  ------------------
  |  |  349|     16|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2, False: 7]
  |  |  |  Branch (349:45): [True: 2, False: 5]
  |  |  ------------------
  ------------------
  290|     15|  }
_ZNK3CFF8Encoding11suppEncDataEv:
  294|      7|  {
  295|      7|    switch (table_format ())
  296|      7|    {
  297|      2|    case 0: return StructAfter<CFF1SuppEncData> (u.format0.codes[u.format0.nCodes ()-1]);
  ------------------
  |  Branch (297:5): [True: 2, False: 5]
  ------------------
  298|      5|    case 1: return StructAfter<CFF1SuppEncData> (u.format1.ranges[u.format1.nRanges ()-1]);
  ------------------
  |  Branch (298:5): [True: 5, False: 2]
  ------------------
  299|      0|    default:return Null (CFF1SuppEncData);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (299:5): [True: 0, False: 7]
  ------------------
  300|      7|    }
  301|      7|  }
_ZNK3CFF8Charset08sanitizeEP21hb_sanitize_context_tj:
  318|    365|  {
  319|    365|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    365|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  320|    365|    return_trace (sids.sanitize (c, num_glyphs - 1));
  ------------------
  |  |  349|    365|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    365|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  321|    365|  }
_ZNK3CFF8Charset07get_sidEjj:
  324|  21.5k|  {
  325|  21.5k|    if (unlikely (glyph >= num_glyphs)) return 0;
  ------------------
  |  |  259|  21.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 21.5k]
  |  |  ------------------
  ------------------
  326|  21.5k|    if (unlikely (glyph == 0))
  ------------------
  |  |  259|  21.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 225, False: 21.3k]
  |  |  ------------------
  ------------------
  327|    225|      return 0;
  328|  21.3k|    else
  329|  21.3k|      return sids[glyph - 1];
  330|  21.5k|  }
_ZNK3CFF8Charset09get_glyphEjj:
  340|  3.05k|  {
  341|  3.05k|    if (sid == 0)
  ------------------
  |  Branch (341:9): [True: 1.25k, False: 1.80k]
  ------------------
  342|  1.25k|      return 0;
  343|       |
  344|  16.9k|    for (unsigned int glyph = 1; glyph < num_glyphs; glyph++)
  ------------------
  |  Branch (344:34): [True: 15.9k, False: 1.04k]
  ------------------
  345|  15.9k|    {
  346|  15.9k|      if (sids[glyph-1] == sid)
  ------------------
  |  Branch (346:11): [True: 754, False: 15.1k]
  ------------------
  347|    754|	return glyph;
  348|  15.9k|    }
  349|  1.04k|    return 0;
  350|  1.80k|  }
_ZNK3CFF7Charset7get_sidEjjPNS_11code_pair_tE:
  578|   112k|  {
  579|   112k|    switch (format)
  580|   112k|    {
  581|  21.5k|    case 0: return u.format0.get_sid (glyph, num_glyphs);
  ------------------
  |  Branch (581:5): [True: 21.5k, False: 91.2k]
  ------------------
  582|  27.8k|    case 1: return u.format1.get_sid (glyph, num_glyphs, cache);
  ------------------
  |  Branch (582:5): [True: 27.8k, False: 84.9k]
  ------------------
  583|  63.3k|    case 2: return u.format2.get_sid (glyph, num_glyphs, cache);
  ------------------
  |  Branch (583:5): [True: 63.3k, False: 49.4k]
  ------------------
  584|      0|    default:return 0;
  ------------------
  |  Branch (584:5): [True: 0, False: 112k]
  ------------------
  585|   112k|    }
  586|   112k|  }
_ZNK3CFF7Charset9get_glyphEjj:
  600|  4.23k|  {
  601|  4.23k|    switch (format)
  602|  4.23k|    {
  603|  3.05k|    case 0: return u.format0.get_glyph (sid, num_glyphs);
  ------------------
  |  Branch (603:5): [True: 3.05k, False: 1.18k]
  ------------------
  604|    902|    case 1: return u.format1.get_glyph (sid, num_glyphs);
  ------------------
  |  Branch (604:5): [True: 902, False: 3.33k]
  ------------------
  605|    278|    case 2: return u.format2.get_glyph (sid, num_glyphs);
  ------------------
  |  Branch (605:5): [True: 278, False: 3.95k]
  ------------------
  606|      0|    default:return 0;
  ------------------
  |  Branch (606:5): [True: 0, False: 4.23k]
  ------------------
  607|  4.23k|    }
  608|  4.23k|  }
_ZNK3CFF7Charset8sanitizeEP21hb_sanitize_context_t:
  611|  1.03k|  {
  612|  1.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  613|  1.03k|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|  1.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.02k]
  |  |  ------------------
  ------------------
  614|      2|      return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  615|       |
  616|  1.02k|    switch (format)
  617|  1.02k|    {
  618|    365|    case 0: return_trace (u.format0.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|    365|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    365|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (618:5): [True: 365, False: 664]
  ------------------
  619|    559|    case 1: return_trace (u.format1.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|    559|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    559|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (619:5): [True: 559, False: 470]
  ------------------
  620|    103|    case 2: return_trace (u.format2.sanitize (c, c->get_num_glyphs ()));
  ------------------
  |  |  349|    103|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    103|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (620:5): [True: 103, False: 926]
  ------------------
  621|      2|    default:return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (621:5): [True: 2, False: 1.02k]
  ------------------
  622|  1.02k|    }
  623|  1.02k|  }
_ZN3CFF26cff1_top_dict_interp_env_tC2ERK10hb_array_tIKhE:
  667|  25.2k|    : num_interp_env_t(bytes), prev_offset(0), last_offset(0) {}
_ZN3CFF18name_dict_values_t4initEv:
  693|  34.4k|  {
  694|   413k|    for (unsigned int i = 0; i < ValCount; i++)
  ------------------
  |  Branch (694:30): [True: 378k, False: 34.4k]
  ------------------
  695|   378k|      values[i] = CFF_UNDEF_SID;
  ------------------
  |  |   49|   378k|#define CFF_UNDEF_SID   CFF_UNDEF_CODE
  |  |  ------------------
  |  |  |  |   39|   378k|#define CFF_UNDEF_CODE  0xFFFFFFFF
  |  |  ------------------
  ------------------
  696|  34.4k|  }
_ZN3CFF18name_dict_values_tixEj:
  699|  4.64k|  { assert (i < ValCount); return values[i]; }
_ZNK3CFF18name_dict_values_tixEj:
  702|  7.58k|  { assert (i < ValCount); return values[i]; }
_ZN3CFF18name_dict_values_t16name_op_to_indexEj:
  705|  4.29k|  {
  706|  4.29k|    switch (op) {
  707|      0|      default: // can't happen - just make some compiler happy
  ------------------
  |  Branch (707:7): [True: 0, False: 4.29k]
  ------------------
  708|    844|      case OpCode_version:
  ------------------
  |  |   41|    844|#define OpCode_version		  0 /* CFF Top */
  ------------------
  |  Branch (708:7): [True: 844, False: 3.45k]
  ------------------
  709|    844|	return version;
  710|    792|      case OpCode_Notice:
  ------------------
  |  |   42|    792|#define OpCode_Notice		  1 /* CFF Top */
  ------------------
  |  Branch (710:7): [True: 792, False: 3.50k]
  ------------------
  711|    792|	return notice;
  712|    116|      case OpCode_Copyright:
  ------------------
  |  |   99|    116|#define OpCode_Copyright	Make_OpCode_ESC(0) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|    116|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    116|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (712:7): [True: 116, False: 4.17k]
  ------------------
  713|    116|	return copyright;
  714|  1.43k|      case OpCode_FullName:
  ------------------
  |  |   43|  1.43k|#define OpCode_FullName		  2 /* CFF Top */
  ------------------
  |  Branch (714:7): [True: 1.43k, False: 2.85k]
  ------------------
  715|  1.43k|	return fullName;
  716|    723|      case OpCode_FamilyName:
  ------------------
  |  |   44|    723|#define OpCode_FamilyName	  3 /* CFF Top */
  ------------------
  |  Branch (716:7): [True: 723, False: 3.57k]
  ------------------
  717|    723|	return familyName;
  718|    354|      case OpCode_Weight:
  ------------------
  |  |   45|    354|#define OpCode_Weight		  4 /* CFF Top */
  ------------------
  |  Branch (718:7): [True: 354, False: 3.94k]
  ------------------
  719|    354|	return weight;
  720|     10|      case OpCode_PostScript:
  ------------------
  |  |  120|     10|#define OpCode_PostScript	Make_OpCode_ESC(21) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|     10|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     10|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (720:7): [True: 10, False: 4.28k]
  ------------------
  721|     10|	return postscript;
  722|     11|      case OpCode_FontName:
  ------------------
  |  |  137|     11|#define OpCode_FontName		Make_OpCode_ESC(38) /* CFF Top_CID */
  |  |  ------------------
  |  |  |  |   93|     11|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     11|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (722:7): [True: 11, False: 4.28k]
  ------------------
  723|     11|	return fontName;
  724|      7|      case OpCode_BaseFontName:
  ------------------
  |  |  121|      7|#define OpCode_BaseFontName	Make_OpCode_ESC(22) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|      7|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|      7|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (724:7): [True: 7, False: 4.28k]
  ------------------
  725|      7|	return baseFontName;
  726|  4.29k|    }
  727|  4.29k|  }
_ZN3CFF22cff1_top_dict_values_t4initEv:
  740|  34.4k|  {
  741|  34.4k|    top_dict_values_t<cff1_top_dict_val_t>::init ();
  742|       |
  743|  34.4k|    nameSIDs.init ();
  744|  34.4k|    ros_supplement = 0;
  745|  34.4k|    cidCount = 8720;
  746|  34.4k|    EncodingOffset = 0;
  747|  34.4k|    CharsetOffset = 0;
  748|  34.4k|    FDSelectOffset = 0;
  749|  34.4k|    privateDictInfo.init ();
  750|  34.4k|  }
_ZNK3CFF22cff1_top_dict_values_t6is_CIDEv:
  754|  7.58k|  { return nameSIDs[name_dict_values_t::registry] != CFF_UNDEF_SID; }
  ------------------
  |  |   49|  7.58k|#define CFF_UNDEF_SID   CFF_UNDEF_CODE
  |  |  ------------------
  |  |  |  |   39|  7.58k|#define CFF_UNDEF_CODE  0xFFFFFFFF
  |  |  ------------------
  ------------------
_ZN3CFF21cff1_top_dict_opset_t10process_opEjRNS_26cff1_top_dict_interp_env_tERNS_22cff1_top_dict_values_tE:
  770|  42.3k|  {
  771|  42.3k|    cff1_top_dict_val_t  val;
  772|  42.3k|    val.last_arg_offset = (env.last_offset-1) - dictval.opStart;  /* offset to the last argument */
  773|       |
  774|  42.3k|    switch (op) {
  775|    844|      case OpCode_version:
  ------------------
  |  |   41|    844|#define OpCode_version		  0 /* CFF Top */
  ------------------
  |  Branch (775:7): [True: 844, False: 41.5k]
  ------------------
  776|  1.63k|      case OpCode_Notice:
  ------------------
  |  |   42|  1.63k|#define OpCode_Notice		  1 /* CFF Top */
  ------------------
  |  Branch (776:7): [True: 792, False: 41.5k]
  ------------------
  777|  1.75k|      case OpCode_Copyright:
  ------------------
  |  |   99|  1.75k|#define OpCode_Copyright	Make_OpCode_ESC(0) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|  1.75k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.75k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (777:7): [True: 116, False: 42.2k]
  ------------------
  778|  3.18k|      case OpCode_FullName:
  ------------------
  |  |   43|  3.18k|#define OpCode_FullName		  2 /* CFF Top */
  ------------------
  |  Branch (778:7): [True: 1.43k, False: 40.9k]
  ------------------
  779|  3.20k|      case OpCode_FontName:
  ------------------
  |  |  137|  3.20k|#define OpCode_FontName		Make_OpCode_ESC(38) /* CFF Top_CID */
  |  |  ------------------
  |  |  |  |   93|  3.20k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  3.20k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (779:7): [True: 11, False: 42.3k]
  ------------------
  780|  3.92k|      case OpCode_FamilyName:
  ------------------
  |  |   44|  3.92k|#define OpCode_FamilyName	  3 /* CFF Top */
  ------------------
  |  Branch (780:7): [True: 723, False: 41.6k]
  ------------------
  781|  4.27k|      case OpCode_Weight:
  ------------------
  |  |   45|  4.27k|#define OpCode_Weight		  4 /* CFF Top */
  ------------------
  |  Branch (781:7): [True: 354, False: 42.0k]
  ------------------
  782|  4.28k|      case OpCode_PostScript:
  ------------------
  |  |  120|  4.28k|#define OpCode_PostScript	Make_OpCode_ESC(21) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|  4.28k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.28k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (782:7): [True: 10, False: 42.3k]
  ------------------
  783|  4.29k|      case OpCode_BaseFontName:
  ------------------
  |  |  121|  4.29k|#define OpCode_BaseFontName	Make_OpCode_ESC(22) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|  4.29k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.29k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (783:7): [True: 7, False: 42.3k]
  ------------------
  784|  4.29k|	dictval.nameSIDs[name_dict_values_t::name_op_to_index (op)] = env.argStack.pop_uint ();
  785|  4.29k|	env.clear_args ();
  786|  4.29k|	break;
  787|     84|      case OpCode_isFixedPitch:
  ------------------
  |  |  100|     84|#define OpCode_isFixedPitch	Make_OpCode_ESC(1) /* CFF Top (false) */
  |  |  ------------------
  |  |  |  |   93|     84|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     84|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (787:7): [True: 84, False: 42.2k]
  ------------------
  788|    172|      case OpCode_ItalicAngle:
  ------------------
  |  |  101|    172|#define OpCode_ItalicAngle	Make_OpCode_ESC(2) /* CFF Top (0) */
  |  |  ------------------
  |  |  |  |   93|    172|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    172|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (788:7): [True: 88, False: 42.2k]
  ------------------
  789|    469|      case OpCode_UnderlinePosition:
  ------------------
  |  |  102|    469|#define OpCode_UnderlinePosition Make_OpCode_ESC(3) /* CFF Top (-100) */
  |  |  ------------------
  |  |  |  |   93|    469|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    469|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (789:7): [True: 297, False: 42.0k]
  ------------------
  790|    690|      case OpCode_UnderlineThickness:
  ------------------
  |  |  103|    690|#define OpCode_UnderlineThickness Make_OpCode_ESC(4) /* CFF Top (50) */
  |  |  ------------------
  |  |  |  |   93|    690|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    690|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (790:7): [True: 221, False: 42.1k]
  ------------------
  791|    792|      case OpCode_PaintType:
  ------------------
  |  |  104|    792|#define OpCode_PaintType	Make_OpCode_ESC(5) /* CFF Top (0) */
  |  |  ------------------
  |  |  |  |   93|    792|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    792|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (791:7): [True: 102, False: 42.2k]
  ------------------
  792|    873|      case OpCode_CharstringType:
  ------------------
  |  |  105|    873|#define OpCode_CharstringType	Make_OpCode_ESC(6) /* CFF Top (2) */
  |  |  ------------------
  |  |  |  |   93|    873|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    873|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (792:7): [True: 81, False: 42.2k]
  ------------------
  793|  1.36k|      case OpCode_UniqueID:
  ------------------
  |  |   54|  1.36k|#define OpCode_UniqueID		 13 /* CFF Top */
  ------------------
  |  Branch (793:7): [True: 496, False: 41.8k]
  ------------------
  794|  1.37k|      case OpCode_StrokeWidth:
  ------------------
  |  |  107|  1.37k|#define OpCode_StrokeWidth	Make_OpCode_ESC(8) /* CFF Top (0) */
  |  |  ------------------
  |  |  |  |   93|  1.37k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.37k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (794:7): [True: 10, False: 42.3k]
  ------------------
  795|  1.39k|      case OpCode_SyntheticBase:
  ------------------
  |  |  119|  1.39k|#define OpCode_SyntheticBase	Make_OpCode_ESC(20) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|  1.39k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.39k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (795:7): [True: 12, False: 42.3k]
  ------------------
  796|  1.57k|      case OpCode_CIDFontVersion:
  ------------------
  |  |  130|  1.57k|#define OpCode_CIDFontVersion	Make_OpCode_ESC(31) /* CFF Top_CID (0) */
  |  |  ------------------
  |  |  |  |   93|  1.57k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.57k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (796:7): [True: 188, False: 42.1k]
  ------------------
  797|  1.60k|      case OpCode_CIDFontRevision:
  ------------------
  |  |  131|  1.60k|#define OpCode_CIDFontRevision	Make_OpCode_ESC(32) /* CFF Top_CID (0) */
  |  |  ------------------
  |  |  |  |   93|  1.60k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.60k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (797:7): [True: 23, False: 42.3k]
  ------------------
  798|  1.67k|      case OpCode_CIDFontType:
  ------------------
  |  |  132|  1.67k|#define OpCode_CIDFontType	Make_OpCode_ESC(33) /* CFF Top_CID (0) */
  |  |  ------------------
  |  |  |  |   93|  1.67k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.67k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (798:7): [True: 74, False: 42.2k]
  ------------------
  799|  1.79k|      case OpCode_UIDBase:
  ------------------
  |  |  134|  1.79k|#define OpCode_UIDBase		Make_OpCode_ESC(35) /* CFF Top_CID */
  |  |  ------------------
  |  |  |  |   93|  1.79k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.79k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (799:7): [True: 119, False: 42.2k]
  ------------------
  800|  3.30k|      case OpCode_FontBBox:
  ------------------
  |  |   46|  3.30k|#define OpCode_FontBBox		  5 /* CFF Top */
  ------------------
  |  Branch (800:7): [True: 1.51k, False: 40.8k]
  ------------------
  801|  4.05k|      case OpCode_XUID:
  ------------------
  |  |   55|  4.05k|#define OpCode_XUID		 14 /* CFF Top */
  ------------------
  |  Branch (801:7): [True: 747, False: 41.6k]
  ------------------
  802|  4.06k|      case OpCode_BaseFontBlend:
  ------------------
  |  |  122|  4.06k|#define OpCode_BaseFontBlend	Make_OpCode_ESC(23) /* CFF Top */
  |  |  ------------------
  |  |  |  |   93|  4.06k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.06k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (802:7): [True: 13, False: 42.3k]
  ------------------
  803|  4.06k|	env.clear_args ();
  804|  4.06k|	break;
  805|       |
  806|    152|      case OpCode_CIDCount:
  ------------------
  |  |  133|    152|#define OpCode_CIDCount		Make_OpCode_ESC(34) /* CFF Top_CID (8720) */
  |  |  ------------------
  |  |  |  |   93|    152|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    152|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (806:7): [True: 152, False: 42.2k]
  ------------------
  807|    152|	dictval.cidCount = env.argStack.pop_uint ();
  808|    152|	env.clear_args ();
  809|    152|	break;
  810|       |
  811|    173|      case OpCode_ROS:
  ------------------
  |  |  129|    173|#define OpCode_ROS		Make_OpCode_ESC(30) /* CFF Top_CID */
  |  |  ------------------
  |  |  |  |   93|    173|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    173|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:7): [True: 173, False: 42.1k]
  ------------------
  812|    173|	dictval.ros_supplement = env.argStack.pop_uint ();
  813|    173|	dictval.nameSIDs[name_dict_values_t::ordering] = env.argStack.pop_uint ();
  814|    173|	dictval.nameSIDs[name_dict_values_t::registry] = env.argStack.pop_uint ();
  815|    173|	env.clear_args ();
  816|    173|	break;
  817|       |
  818|     51|      case OpCode_Encoding:
  ------------------
  |  |   57|     51|#define OpCode_Encoding		 16 /* CFF Top (0) */
  ------------------
  |  Branch (818:7): [True: 51, False: 42.3k]
  ------------------
  819|     51|	dictval.EncodingOffset = env.argStack.pop_uint ();
  820|     51|	env.clear_args ();
  821|     51|	if (unlikely (dictval.EncodingOffset == 0)) return;
  ------------------
  |  |  259|     51|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 32]
  |  |  ------------------
  ------------------
  822|     32|	break;
  823|       |
  824|  1.12k|      case OpCode_charset:
  ------------------
  |  |   56|  1.12k|#define OpCode_charset		 15 /* CFF Top (0) */
  ------------------
  |  Branch (824:7): [True: 1.12k, False: 41.2k]
  ------------------
  825|  1.12k|	dictval.CharsetOffset = env.argStack.pop_uint ();
  826|  1.12k|	env.clear_args ();
  827|  1.12k|	if (unlikely (dictval.CharsetOffset == 0)) return;
  ------------------
  |  |  259|  1.12k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 1.11k]
  |  |  ------------------
  ------------------
  828|  1.11k|	break;
  829|       |
  830|  1.11k|      case OpCode_FDSelect:
  ------------------
  |  |  136|    159|#define OpCode_FDSelect		Make_OpCode_ESC(37) /* CFF Top_CID, CFF2 Top */
  |  |  ------------------
  |  |  |  |   93|    159|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    159|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (830:7): [True: 159, False: 42.1k]
  ------------------
  831|    159|	dictval.FDSelectOffset = env.argStack.pop_uint ();
  832|    159|	env.clear_args ();
  833|    159|	break;
  834|       |
  835|    204|      case OpCode_Private:
  ------------------
  |  |   59|    204|#define OpCode_Private		 18 /* CFF Top, CFF2 FD */
  ------------------
  |  Branch (835:7): [True: 204, False: 42.1k]
  ------------------
  836|    204|	dictval.privateDictInfo.offset = env.argStack.pop_uint ();
  837|    204|	dictval.privateDictInfo.size = env.argStack.pop_uint ();
  838|    204|	env.clear_args ();
  839|    204|	break;
  840|       |
  841|  32.1k|      default:
  ------------------
  |  Branch (841:7): [True: 32.1k, False: 10.2k]
  ------------------
  842|  32.1k|	env.last_offset = env.str_ref.get_offset ();
  843|  32.1k|	top_dict_opset_t<cff1_top_dict_val_t>::process_op (op, env, dictval);
  844|       |	/* Record this operand below if stack is empty, otherwise done */
  845|  32.1k|	if (!env.argStack.is_empty ()) return;
  ------------------
  |  Branch (845:6): [True: 30.4k, False: 1.72k]
  ------------------
  846|  1.72k|	break;
  847|  42.3k|    }
  848|       |
  849|  11.9k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  11.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 141, False: 11.7k]
  |  |  ------------------
  ------------------
  850|       |
  851|  11.7k|    dictval.add_op (op, env.str_ref, val);
  852|  11.7k|  }
_ZN3CFF23cff1_font_dict_values_t4initEv:
  858|  47.1k|  {
  859|  47.1k|    dict_values_t<op_str_t>::init ();
  860|  47.1k|    privateDictInfo.init ();
  861|  47.1k|    fontName = CFF_UNDEF_SID;
  ------------------
  |  |   49|  47.1k|#define CFF_UNDEF_SID   CFF_UNDEF_CODE
  |  |  ------------------
  |  |  |  |   39|  47.1k|#define CFF_UNDEF_CODE  0xFFFFFFFF
  |  |  ------------------
  ------------------
  862|  47.1k|  }
_ZN3CFF22cff1_font_dict_opset_t10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_23cff1_font_dict_values_tE:
  872|  50.9k|  {
  873|  50.9k|    switch (op) {
  874|    537|      case OpCode_FontName:
  ------------------
  |  |  137|    537|#define OpCode_FontName		Make_OpCode_ESC(38) /* CFF Top_CID */
  |  |  ------------------
  |  |  |  |   93|    537|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    537|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (874:7): [True: 537, False: 50.3k]
  ------------------
  875|    537|	dictval.fontName = env.argStack.pop_uint ();
  876|    537|	env.clear_args ();
  877|    537|	break;
  878|     80|      case OpCode_FontMatrix:
  ------------------
  |  |  106|     80|#define OpCode_FontMatrix	Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/
  |  |  ------------------
  |  |  |  |   93|     80|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|     80|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (878:7): [True: 80, False: 50.8k]
  ------------------
  879|    180|      case OpCode_PaintType:
  ------------------
  |  |  104|    180|#define OpCode_PaintType	Make_OpCode_ESC(5) /* CFF Top (0) */
  |  |  ------------------
  |  |  |  |   93|    180|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    180|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (879:7): [True: 100, False: 50.8k]
  ------------------
  880|    180|	env.clear_args ();
  881|    180|	break;
  882|    904|      case OpCode_Private:
  ------------------
  |  |   59|    904|#define OpCode_Private		 18 /* CFF Top, CFF2 FD */
  ------------------
  |  Branch (882:7): [True: 904, False: 49.9k]
  ------------------
  883|    904|	dictval.privateDictInfo.offset = env.argStack.pop_uint ();
  884|    904|	dictval.privateDictInfo.size = env.argStack.pop_uint ();
  885|    904|	env.clear_args ();
  886|    904|	break;
  887|       |
  888|  49.2k|      default:
  ------------------
  |  Branch (888:7): [True: 49.2k, False: 1.62k]
  ------------------
  889|  49.2k|	dict_opset_t::process_op (op, env);
  890|  49.2k|	if (!env.argStack.is_empty ()) return;
  ------------------
  |  Branch (890:6): [True: 49.2k, False: 35]
  ------------------
  891|     35|	break;
  892|  50.9k|    }
  893|       |
  894|  1.65k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  1.65k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 51, False: 1.60k]
  |  |  ------------------
  ------------------
  895|       |
  896|  1.60k|    dictval.add_op (op, env.str_ref);
  897|  1.60k|  }
_ZN3CFF25cff1_private_dict_opset_t10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_31cff1_private_dict_values_base_tINS_10dict_val_tEEE:
  921|  22.4k|  {
  922|  22.4k|    num_dict_val_t val;
  923|  22.4k|    val.init ();
  924|       |
  925|  22.4k|    switch (op) {
  926|    586|      case OpCode_BlueValues:
  ------------------
  |  |   47|    586|#define OpCode_BlueValues	  6 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (926:7): [True: 586, False: 21.9k]
  ------------------
  927|    850|      case OpCode_OtherBlues:
  ------------------
  |  |   48|    850|#define OpCode_OtherBlues	  7 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (927:7): [True: 264, False: 22.2k]
  ------------------
  928|  1.83k|      case OpCode_FamilyBlues:
  ------------------
  |  |   49|  1.83k|#define OpCode_FamilyBlues	  8 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (928:7): [True: 989, False: 21.4k]
  ------------------
  929|  2.03k|      case OpCode_FamilyOtherBlues:
  ------------------
  |  |   50|  2.03k|#define OpCode_FamilyOtherBlues	  9 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (929:7): [True: 195, False: 22.2k]
  ------------------
  930|  2.50k|      case OpCode_StemSnapH:
  ------------------
  |  |  111|  2.50k|#define OpCode_StemSnapH	Make_OpCode_ESC(12) /* CFF Private, CFF2 Private */
  |  |  ------------------
  |  |  |  |   93|  2.50k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  2.50k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (930:7): [True: 467, False: 22.0k]
  ------------------
  931|  2.85k|      case OpCode_StemSnapV:
  ------------------
  |  |  112|  2.85k|#define OpCode_StemSnapV	Make_OpCode_ESC(13) /* CFF Private, CFF2 Private */
  |  |  ------------------
  |  |  |  |   93|  2.85k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  2.85k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (931:7): [True: 358, False: 22.1k]
  ------------------
  932|  3.30k|      case OpCode_StdHW:
  ------------------
  |  |   51|  3.30k|#define OpCode_StdHW		 10 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (932:7): [True: 441, False: 22.0k]
  ------------------
  933|  4.02k|      case OpCode_StdVW:
  ------------------
  |  |   52|  4.02k|#define OpCode_StdVW		 11 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (933:7): [True: 729, False: 21.7k]
  ------------------
  934|  4.05k|      case OpCode_BlueScale:
  ------------------
  |  |  108|  4.05k|#define OpCode_BlueScale	Make_OpCode_ESC(9) /* CFF Private, CFF2 Private (0.039625) */
  |  |  ------------------
  |  |  |  |   93|  4.05k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.05k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (934:7): [True: 23, False: 22.4k]
  ------------------
  935|  4.13k|      case OpCode_BlueShift:
  ------------------
  |  |  109|  4.13k|#define OpCode_BlueShift	Make_OpCode_ESC(10) /* CFF Private, CFF2 Private (7) */
  |  |  ------------------
  |  |  |  |   93|  4.13k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.13k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (935:7): [True: 84, False: 22.4k]
  ------------------
  936|  4.32k|      case OpCode_BlueFuzz:
  ------------------
  |  |  110|  4.32k|#define OpCode_BlueFuzz		Make_OpCode_ESC(11) /* CFF Private, CFF2 Private (1) */
  |  |  ------------------
  |  |  |  |   93|  4.32k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.32k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (936:7): [True: 186, False: 22.3k]
  ------------------
  937|  4.32k|      case OpCode_ForceBold:
  ------------------
  |  |  113|  4.32k|#define OpCode_ForceBold	Make_OpCode_ESC(14) /* CFF Private (false) */
  |  |  ------------------
  |  |  |  |   93|  4.32k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.32k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (937:7): [True: 3, False: 22.4k]
  ------------------
  938|  4.33k|      case OpCode_LanguageGroup:
  ------------------
  |  |  116|  4.33k|#define OpCode_LanguageGroup	Make_OpCode_ESC(17) /* CFF Private, CFF2 Private (0) */
  |  |  ------------------
  |  |  |  |   93|  4.33k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.33k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (938:7): [True: 12, False: 22.4k]
  ------------------
  939|  4.34k|      case OpCode_ExpansionFactor:
  ------------------
  |  |  117|  4.34k|#define OpCode_ExpansionFactor	Make_OpCode_ESC(18) /* CFF Private, CFF2 Private (0.06) */
  |  |  ------------------
  |  |  |  |   93|  4.34k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.34k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (939:7): [True: 10, False: 22.4k]
  ------------------
  940|  4.35k|      case OpCode_initialRandomSeed:
  ------------------
  |  |  118|  4.35k|#define OpCode_initialRandomSeed Make_OpCode_ESC(19) /* CFF Private (0) */
  |  |  ------------------
  |  |  |  |   93|  4.35k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  4.35k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (940:7): [True: 11, False: 22.4k]
  ------------------
  941|  4.92k|      case OpCode_defaultWidthX:
  ------------------
  |  |   61|  4.92k|#define OpCode_defaultWidthX	 20 /* CFF Private (0) */
  ------------------
  |  Branch (941:7): [True: 566, False: 21.9k]
  ------------------
  942|  5.06k|      case OpCode_nominalWidthX:
  ------------------
  |  |   62|  5.06k|#define OpCode_nominalWidthX	 21 /* CFF Private (0) */
  ------------------
  |  Branch (942:7): [True: 145, False: 22.3k]
  ------------------
  943|  5.06k|	env.clear_args ();
  944|  5.06k|	break;
  945|    471|      case OpCode_Subrs:
  ------------------
  |  |   60|    471|#define OpCode_Subrs		 19 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (945:7): [True: 471, False: 22.0k]
  ------------------
  946|    471|	dictval.subrsOffset = env.argStack.pop_uint ();
  947|    471|	env.clear_args ();
  948|    471|	break;
  949|       |
  950|  16.9k|      default:
  ------------------
  |  Branch (950:7): [True: 16.9k, False: 5.54k]
  ------------------
  951|  16.9k|	dict_opset_t::process_op (op, env);
  952|  16.9k|	if (!env.argStack.is_empty ()) return;
  ------------------
  |  Branch (952:6): [True: 16.9k, False: 44]
  ------------------
  953|     44|	break;
  954|  22.4k|    }
  955|       |
  956|  5.58k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  5.58k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47, False: 5.53k]
  |  |  ------------------
  ------------------
  957|       |
  958|  5.53k|    dictval.add_op (op, env.str_ref, val);
  959|  5.53k|  }
_ZNK2OT4cff18sanitizeEP21hb_sanitize_context_t:
 1052|  1.71k|  {
 1053|  1.71k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.71k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1054|  1.71k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  3.43k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.71k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.71k, False: 2]
  |  |  |  Branch (349:45): [True: 1.69k, False: 25]
  |  |  ------------------
  ------------------
 1055|  1.71k|		  likely (version.major == 1));
 1056|  1.71k|  }
_ZN2OT4cff113accelerator_tC2EP9hb_face_t:
 1351|  32.7k|    {
 1352|  32.7k|      SUPER::init (face);
 1353|       |
 1354|  32.7k|      glyph_names.set_relaxed (nullptr);
 1355|       |
 1356|  32.7k|      if (!is_valid ()) return;
  ------------------
  |  Branch (1356:11): [True: 31.5k, False: 1.23k]
  ------------------
 1357|  1.23k|      if (is_CID ()) return;
  ------------------
  |  Branch (1357:11): [True: 32, False: 1.20k]
  ------------------
 1358|       |
 1359|  1.23k|    }
_ZNK2OT4cff113accelerator_t14get_glyph_nameEjPcj:
 1374|  33.0k|    {
 1375|  33.0k|      if (unlikely (glyph >= num_glyphs)) return false;
  ------------------
  |  |  259|  33.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.1k, False: 888]
  |  |  ------------------
  ------------------
 1376|    888|      if (unlikely (!is_valid ())) return false;
  ------------------
  |  |  259|    888|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 844]
  |  |  ------------------
  ------------------
 1377|    844|      if (is_CID()) return false;
  ------------------
  |  Branch (1377:11): [True: 8, False: 836]
  ------------------
 1378|    836|      if (unlikely (!buf_len)) return true;
  ------------------
  |  |  259|    836|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 836]
  |  |  ------------------
  ------------------
 1379|    836|      hb_codepoint_t sid = glyph_to_sid (glyph);
 1380|    836|      const char *str;
 1381|    836|      size_t str_len;
 1382|    836|      if (sid < cff1_std_strings_length)
  ------------------
  |  Branch (1382:11): [True: 815, False: 21]
  ------------------
 1383|    815|      {
 1384|    815|	hb_bytes_t byte_str = cff1_std_strings (sid);
 1385|    815|	str = byte_str.arrayZ;
 1386|    815|	str_len = byte_str.length;
 1387|    815|      }
 1388|     21|      else
 1389|     21|      {
 1390|     21|	hb_ubytes_t ubyte_str = (*stringIndex)[sid - cff1_std_strings_length];
 1391|     21|	str = (const char *)ubyte_str.arrayZ;
 1392|     21|	str_len = ubyte_str.length;
 1393|     21|      }
 1394|    836|      if (!str_len) return false;
  ------------------
  |  Branch (1394:11): [True: 6, False: 830]
  ------------------
 1395|    830|      unsigned int len = hb_min (buf_len - 1, str_len);
 1396|    830|      strncpy (buf, (const char*)str, len);
 1397|    830|      buf[len] = '\0';
 1398|    830|      return true;
 1399|    836|    }
_ZNK2OT4cff113accelerator_t19get_glyph_from_nameEPKciPj:
 1403|  33.1k|    {
 1404|  33.1k|      if (unlikely (!is_valid ())) return false;
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.9k, False: 1.23k]
  |  |  ------------------
  ------------------
 1405|  1.23k|      if (is_CID()) return false;
  ------------------
  |  Branch (1405:11): [True: 32, False: 1.20k]
  ------------------
 1406|  1.20k|      if (len < 0) len = strlen (name);
  ------------------
  |  Branch (1406:11): [True: 0, False: 1.20k]
  ------------------
 1407|  1.20k|      if (unlikely (!len)) return false;
  ------------------
  |  |  259|  1.20k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 374, False: 829]
  |  |  ------------------
  ------------------
 1408|       |
 1409|    829|    retry:
 1410|    829|      hb_sorted_vector_t<gname_t> *names = glyph_names.get_acquire ();
 1411|    829|      if (unlikely (!names))
  ------------------
  |  |  259|    829|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 829, False: 0]
  |  |  ------------------
  ------------------
 1412|    829|      {
 1413|    829|	names = (hb_sorted_vector_t<gname_t> *) hb_calloc (sizeof (hb_sorted_vector_t<gname_t>), 1);
  ------------------
  |  |  234|    829|#define hb_calloc hb_calloc_impl
  ------------------
 1414|    829|	if (likely (names))
  ------------------
  |  |  258|    829|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 829, False: 0]
  |  |  ------------------
  ------------------
 1415|    829|	{
 1416|    829|	  names->init ();
 1417|       |	  /* TODO */
 1418|       |
 1419|       |	  /* fill glyph names */
 1420|    829|	  code_pair_t glyph_to_sid_cache {0, HB_CODEPOINT_INVALID};
  ------------------
  |  |  115|    829|#define HB_CODEPOINT_INVALID ((hb_codepoint_t) -1)
  ------------------
 1421|   118k|	  for (hb_codepoint_t gid = 0; gid < num_glyphs; gid++)
  ------------------
  |  Branch (1421:33): [True: 117k, False: 829]
  ------------------
 1422|   117k|	  {
 1423|   117k|	    hb_codepoint_t	sid = glyph_to_sid (gid, &glyph_to_sid_cache);
 1424|   117k|	    gname_t	gname;
 1425|   117k|	    gname.sid = sid;
 1426|   117k|	    if (sid < cff1_std_strings_length)
  ------------------
  |  Branch (1426:10): [True: 49.5k, False: 68.1k]
  ------------------
 1427|  49.5k|	      gname.name = cff1_std_strings (sid);
 1428|  68.1k|	    else
 1429|  68.1k|	    {
 1430|  68.1k|	      hb_ubytes_t	ustr = (*stringIndex)[sid - cff1_std_strings_length];
 1431|  68.1k|	      gname.name = hb_bytes_t ((const char*) ustr.arrayZ, ustr.length);
 1432|  68.1k|	    }
 1433|   117k|	    if (unlikely (!gname.name.arrayZ))
  ------------------
  |  |  259|   117k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.4k, False: 96.2k]
  |  |  ------------------
  ------------------
 1434|  21.4k|	      gname.name = hb_bytes_t ("", 0); /* To avoid nullptr. */
 1435|   117k|	    names->push (gname);
 1436|   117k|	  }
 1437|    829|	  names->qsort ();
 1438|    829|	}
 1439|    829|	if (unlikely (!glyph_names.cmpexch (nullptr, names)))
  ------------------
  |  |  259|    829|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 829]
  |  |  ------------------
  ------------------
 1440|      0|	{
 1441|      0|	  if (names)
  ------------------
  |  Branch (1441:8): [True: 0, False: 0]
  ------------------
 1442|      0|	  {
 1443|      0|	    names->fini ();
 1444|      0|	    hb_free (names);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
 1445|      0|	  }
 1446|      0|	  goto retry;
 1447|      0|	}
 1448|    829|      }
 1449|       |
 1450|    829|      gname_t key = { hb_bytes_t (name, len), 0 };
 1451|    829|      const gname_t *gname = names ? names->bsearch (key) : nullptr;
  ------------------
  |  Branch (1451:30): [True: 829, False: 0]
  ------------------
 1452|    829|      if (!gname) return false;
  ------------------
  |  Branch (1452:11): [True: 808, False: 21]
  ------------------
 1453|     21|      hb_codepoint_t gid = sid_to_glyph (gname->sid);
 1454|     21|      if (!gid && gname->sid) return false;
  ------------------
  |  Branch (1454:11): [True: 0, False: 21]
  |  Branch (1454:19): [True: 0, False: 0]
  ------------------
 1455|     21|      *glyph = gid;
 1456|     21|      return true;
 1457|     21|    }
_ZN2OT4cff113accelerator_t7gname_t3cmpEPKvS4_:
 1471|   836k|      {
 1472|   836k|	const gname_t *a = (const gname_t *)a_;
 1473|   836k|	const gname_t *b = (const gname_t *)b_;
 1474|   836k|	unsigned minlen = hb_min (a->name.length, b->name.length);
 1475|   836k|	int ret = strncmp (a->name.arrayZ, b->name.arrayZ, minlen);
 1476|   836k|	if (ret) return ret;
  ------------------
  |  Branch (1476:6): [True: 632k, False: 204k]
  ------------------
 1477|   204k|	return a->name.length - b->name.length;
 1478|   836k|      }
_ZNK2OT4cff113accelerator_t7gname_t3cmpERKS2_:
 1480|  3.15k|      int cmp (const gname_t &a) const { return cmp (&a, this); }
_ZN2OT18cff1_accelerator_tC2EP9hb_face_t:
 1511|  32.7k|  cff1_accelerator_t (hb_face_t *face) : cff1::accelerator_t (face) {}
_ZNK3CFF10Charset1_2IN2OT7IntTypeIhLj1EEEE7get_sidEjjPNS_11code_pair_tE:
  396|  27.8k|  {
  397|  27.8k|    if (unlikely (glyph >= num_glyphs)) return 0;
  ------------------
  |  |  259|  27.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 27.8k]
  |  |  ------------------
  ------------------
  398|  27.8k|    unsigned i;
  399|  27.8k|    hb_codepoint_t start_glyph;
  400|  27.8k|    if (cache && likely (cache->glyph <= glyph))
  ------------------
  |  |  258|  27.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 26.6k, False: 768]
  |  |  ------------------
  ------------------
  |  Branch (400:9): [True: 27.4k, False: 427]
  ------------------
  401|  26.6k|    {
  402|  26.6k|      i = cache->code;
  403|  26.6k|      start_glyph = cache->glyph;
  404|  26.6k|    }
  405|  1.19k|    else
  406|  1.19k|    {
  407|  1.19k|      if (unlikely (glyph == 0)) return 0;
  ------------------
  |  |  259|  1.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 827, False: 368]
  |  |  ------------------
  ------------------
  408|    368|      i = 0;
  409|    368|      start_glyph = 1;
  410|    368|    }
  411|  27.0k|    glyph -= start_glyph;
  412|  27.0k|    for (;; i++)
  413|  29.9k|    {
  414|  29.9k|      unsigned count = ranges[i].nLeft;
  415|  29.9k|      if (glyph <= count)
  ------------------
  |  Branch (415:11): [True: 27.0k, False: 2.85k]
  ------------------
  416|  27.0k|      {
  417|  27.0k|        if (cache)
  ------------------
  |  Branch (417:13): [True: 27.0k, False: 25]
  ------------------
  418|  27.0k|	  *cache = {i, start_glyph};
  419|  27.0k|	return ranges[i].first + glyph;
  420|  27.0k|      }
  421|  2.85k|      count++;
  422|  2.85k|      start_glyph += count;
  423|  2.85k|      glyph -= count;
  424|  2.85k|    }
  425|       |
  426|      0|    return 0;
  427|  27.0k|  }
_ZNK3CFF10Charset1_2IN2OT7IntTypeItLj2EEEE7get_sidEjjPNS_11code_pair_tE:
  396|  63.3k|  {
  397|  63.3k|    if (unlikely (glyph >= num_glyphs)) return 0;
  ------------------
  |  |  259|  63.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 63.3k]
  |  |  ------------------
  ------------------
  398|  63.3k|    unsigned i;
  399|  63.3k|    hb_codepoint_t start_glyph;
  400|  63.3k|    if (cache && likely (cache->glyph <= glyph))
  ------------------
  |  |  258|  63.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 63.1k, False: 124]
  |  |  ------------------
  ------------------
  |  Branch (400:9): [True: 63.2k, False: 66]
  ------------------
  401|  63.1k|    {
  402|  63.1k|      i = cache->code;
  403|  63.1k|      start_glyph = cache->glyph;
  404|  63.1k|    }
  405|    190|    else
  406|    190|    {
  407|    190|      if (unlikely (glyph == 0)) return 0;
  ------------------
  |  |  259|    190|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 95, False: 95]
  |  |  ------------------
  ------------------
  408|     95|      i = 0;
  409|     95|      start_glyph = 1;
  410|     95|    }
  411|  63.2k|    glyph -= start_glyph;
  412|  63.2k|    for (;; i++)
  413|  67.2k|    {
  414|  67.2k|      unsigned count = ranges[i].nLeft;
  415|  67.2k|      if (glyph <= count)
  ------------------
  |  Branch (415:11): [True: 63.2k, False: 4.04k]
  ------------------
  416|  63.2k|      {
  417|  63.2k|        if (cache)
  ------------------
  |  Branch (417:13): [True: 63.2k, False: 34]
  ------------------
  418|  63.2k|	  *cache = {i, start_glyph};
  419|  63.2k|	return ranges[i].first + glyph;
  420|  63.2k|      }
  421|  4.04k|      count++;
  422|  4.04k|      start_glyph += count;
  423|  4.04k|      glyph -= count;
  424|  4.04k|    }
  425|       |
  426|      0|    return 0;
  427|  63.2k|  }
_ZNK3CFF10Charset1_2IN2OT7IntTypeIhLj1EEEE9get_glyphEjj:
  448|    902|  {
  449|    902|    if (sid == 0) return 0;
  ------------------
  |  Branch (449:9): [True: 309, False: 593]
  ------------------
  450|    593|    hb_codepoint_t  glyph = 1;
  451|  3.05k|    for (unsigned int i = 0;; i++)
  452|  3.64k|    {
  453|  3.64k|      if (glyph >= num_glyphs)
  ------------------
  |  Branch (453:11): [True: 433, False: 3.21k]
  ------------------
  454|    433|	return 0;
  455|  3.21k|      if ((ranges[i].first <= sid) && (sid <= ranges[i].first + ranges[i].nLeft))
  ------------------
  |  Branch (455:11): [True: 1.04k, False: 2.16k]
  |  Branch (455:39): [True: 160, False: 881]
  ------------------
  456|    160|	return glyph + (sid - ranges[i].first);
  457|  3.05k|      glyph += (ranges[i].nLeft + 1);
  458|  3.05k|    }
  459|       |
  460|      0|    return 0;
  461|    593|  }
_ZNK3CFF10Charset1_2IN2OT7IntTypeItLj2EEEE9get_glyphEjj:
  448|    278|  {
  449|    278|    if (sid == 0) return 0;
  ------------------
  |  Branch (449:9): [True: 126, False: 152]
  ------------------
  450|    152|    hb_codepoint_t  glyph = 1;
  451|    695|    for (unsigned int i = 0;; i++)
  452|    847|    {
  453|    847|      if (glyph >= num_glyphs)
  ------------------
  |  Branch (453:11): [True: 100, False: 747]
  ------------------
  454|    100|	return 0;
  455|    747|      if ((ranges[i].first <= sid) && (sid <= ranges[i].first + ranges[i].nLeft))
  ------------------
  |  Branch (455:11): [True: 459, False: 288]
  |  Branch (455:39): [True: 52, False: 407]
  ------------------
  456|     52|	return glyph + (sid - ranges[i].first);
  457|    695|      glyph += (ranges[i].nLeft + 1);
  458|    695|    }
  459|       |
  460|      0|    return 0;
  461|    152|  }
_ZNK3CFF10Charset1_2IN2OT7IntTypeIhLj1EEEE8sanitizeEP21hb_sanitize_context_tj:
  380|    559|  {
  381|    559|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    559|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  382|    559|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|    559|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 559]
  |  |  ------------------
  ------------------
  383|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  384|    559|    num_glyphs--;
  385|  29.9k|    for (unsigned int i = 0; num_glyphs > 0; i++)
  ------------------
  |  Branch (385:30): [True: 29.3k, False: 538]
  ------------------
  386|  29.3k|    {
  387|  29.3k|      if (unlikely (!ranges[i].sanitize (c) || (num_glyphs < ranges[i].nLeft + 1)))
  ------------------
  |  |  259|  58.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21, False: 29.3k]
  |  |  |  Branch (259:47): [True: 18, False: 29.3k]
  |  |  |  Branch (259:47): [True: 3, False: 29.3k]
  |  |  ------------------
  ------------------
  388|     21|	return_trace (false);
  ------------------
  |  |  349|     21|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     21|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  389|  29.3k|      num_glyphs -= (ranges[i].nLeft + 1);
  390|  29.3k|    }
  391|    538|    return_trace (true);
  ------------------
  |  |  349|    538|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    538|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  392|    559|  }
_ZNK3CFF13Charset_RangeIN2OT7IntTypeIhLj1EEEE8sanitizeEP21hb_sanitize_context_t:
  366|  29.3k|  {
  367|  29.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  29.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  368|  29.3k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  29.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  29.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|  29.3k|  }
_ZNK3CFF10Charset1_2IN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_tj:
  380|    103|  {
  381|    103|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    103|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  382|    103|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|    103|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 103]
  |  |  ------------------
  ------------------
  383|      0|      return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  384|    103|    num_glyphs--;
  385|   289k|    for (unsigned int i = 0; num_glyphs > 0; i++)
  ------------------
  |  Branch (385:30): [True: 289k, False: 87]
  ------------------
  386|   289k|    {
  387|   289k|      if (unlikely (!ranges[i].sanitize (c) || (num_glyphs < ranges[i].nLeft + 1)))
  ------------------
  |  |  259|   578k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 289k]
  |  |  |  Branch (259:47): [True: 12, False: 289k]
  |  |  |  Branch (259:47): [True: 4, False: 289k]
  |  |  ------------------
  ------------------
  388|     16|	return_trace (false);
  ------------------
  |  |  349|     16|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     16|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  389|   289k|      num_glyphs -= (ranges[i].nLeft + 1);
  390|   289k|    }
  391|     87|    return_trace (true);
  ------------------
  |  |  349|     87|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     87|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  392|    103|  }
_ZNK3CFF13Charset_RangeIN2OT7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  366|   289k|  {
  367|   289k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   289k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  368|   289k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|   289k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   289k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|   289k|  }
_ZN2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE4initEP9hb_face_t:
 1062|  32.7k|    {
 1063|  32.7k|      topDict.init ();
 1064|  32.7k|      fontDicts.init ();
 1065|  32.7k|      privateDicts.init ();
 1066|       |
 1067|  32.7k|      this->blob = sc.reference_table<cff1> (face);
 1068|       |
 1069|       |      /* setup for run-time santization */
 1070|  32.7k|      sc.init (this->blob);
 1071|  32.7k|      sc.start_processing ();
 1072|       |
 1073|  32.7k|      const OT::cff1 *cff = this->blob->template as<OT::cff1> ();
 1074|       |
 1075|  32.7k|      if (cff == &Null (OT::cff1))
  ------------------
  |  |  124|  32.7k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1075:11): [True: 31.0k, False: 1.69k]
  ------------------
 1076|  31.0k|      { fini (); return; }
 1077|       |
 1078|  1.69k|      nameIndex = &cff->nameIndex (cff);
 1079|  1.69k|      if ((nameIndex == &Null (CFF1NameIndex)) || !nameIndex->sanitize (&sc))
  ------------------
  |  |  124|  1.69k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1079:11): [True: 0, False: 1.69k]
  |  Branch (1079:51): [True: 10, False: 1.68k]
  ------------------
 1080|     10|      { fini (); return; }
 1081|       |
 1082|  1.68k|      topDictIndex = &StructAtOffset<CFF1TopDictIndex> (nameIndex, nameIndex->get_size ());
 1083|  1.68k|      if ((topDictIndex == &Null (CFF1TopDictIndex)) || !topDictIndex->sanitize (&sc) || (topDictIndex->count == 0))
  ------------------
  |  |  124|  1.68k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1083:11): [True: 0, False: 1.68k]
  |  Branch (1083:57): [True: 12, False: 1.66k]
  |  Branch (1083:90): [True: 2, False: 1.66k]
  ------------------
 1084|     14|      { fini (); return; }
 1085|       |
 1086|  1.66k|      { /* parse top dict */
 1087|  1.66k|	const hb_ubytes_t topDictStr = (*topDictIndex)[0];
 1088|  1.66k|	if (unlikely (!topDictStr.sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|  1.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.66k]
  |  |  ------------------
  ------------------
 1089|  1.66k|	cff1_top_dict_interp_env_t env (topDictStr);
 1090|  1.66k|	cff1_top_dict_interpreter_t top_interp (env);
 1091|  1.66k|	if (unlikely (!top_interp.interpret (topDict))) { fini (); return; }
  ------------------
  |  |  259|  1.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 161, False: 1.50k]
  |  |  ------------------
  ------------------
 1092|  1.66k|      }
 1093|       |
 1094|  1.50k|      if (is_predef_charset ())
  ------------------
  |  Branch (1094:11): [True: 474, False: 1.03k]
  ------------------
 1095|    474|	charset = &Null (Charset);
  ------------------
  |  |  124|    474|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1096|  1.03k|      else
 1097|  1.03k|      {
 1098|  1.03k|	charset = &StructAtOffsetOrNull<Charset> (cff, topDict.CharsetOffset);
 1099|  1.03k|	if (unlikely ((charset == &Null (Charset)) || !charset->sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|  2.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 987]
  |  |  |  Branch (259:47): [True: 0, False: 1.03k]
  |  |  |  Branch (259:47): [True: 44, False: 987]
  |  |  ------------------
  ------------------
 1100|  1.03k|      }
 1101|       |
 1102|  1.46k|      fdCount = 1;
 1103|  1.46k|      if (is_CID ())
  ------------------
  |  Branch (1103:11): [True: 149, False: 1.31k]
  ------------------
 1104|    149|      {
 1105|    149|	fdArray = &StructAtOffsetOrNull<CFF1FDArray> (cff, topDict.FDArrayOffset);
 1106|    149|	fdSelect = &StructAtOffsetOrNull<CFF1FDSelect> (cff, topDict.FDSelectOffset);
 1107|    149|	if (unlikely ((fdArray == &Null (CFF1FDArray)) || !fdArray->sanitize (&sc) ||
  ------------------
  |  |  259|    872|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 123]
  |  |  |  Branch (259:47): [True: 3, False: 146]
  |  |  |  Branch (259:47): [True: 6, False: 140]
  |  |  |  Branch (259:47): [True: 1, False: 139]
  |  |  |  Branch (259:47): [True: 16, False: 123]
  |  |  ------------------
  ------------------
 1108|    149|	    (fdSelect == &Null (CFF1FDSelect)) || !fdSelect->sanitize (&sc, fdArray->count)))
 1109|     26|	{ fini (); return; }
 1110|       |
 1111|    123|	fdCount = fdArray->count;
 1112|    123|      }
 1113|  1.31k|      else
 1114|  1.31k|      {
 1115|  1.31k|	fdArray = &Null (CFF1FDArray);
  ------------------
  |  |  124|  1.31k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1116|  1.31k|	fdSelect = &Null (CFF1FDSelect);
  ------------------
  |  |  124|  1.31k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1117|  1.31k|      }
 1118|       |
 1119|  1.43k|      encoding = &Null (Encoding);
  ------------------
  |  |  124|  1.43k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1120|  1.43k|      if (is_CID ())
  ------------------
  |  Branch (1120:11): [True: 123, False: 1.31k]
  ------------------
 1121|    123|      {
 1122|    123|	if (unlikely (charset == &Null (Charset))) { fini (); return; }
  ------------------
  |  |  259|    123|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 121]
  |  |  ------------------
  ------------------
 1123|    123|      }
 1124|  1.31k|      else
 1125|  1.31k|      {
 1126|  1.31k|	if (!is_predef_encoding ())
  ------------------
  |  Branch (1126:6): [True: 17, False: 1.29k]
  ------------------
 1127|     17|	{
 1128|     17|	  encoding = &StructAtOffsetOrNull<Encoding> (cff, topDict.EncodingOffset);
 1129|     17|	  if (unlikely ((encoding == &Null (Encoding)) || !encoding->sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|     34|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 4]
  |  |  |  Branch (259:47): [True: 0, False: 17]
  |  |  |  Branch (259:47): [True: 13, False: 4]
  |  |  ------------------
  ------------------
 1130|     17|	}
 1131|  1.31k|      }
 1132|       |
 1133|  1.42k|      stringIndex = &StructAtOffset<CFF1StringIndex> (topDictIndex, topDictIndex->get_size ());
 1134|  1.42k|      if ((stringIndex == &Null (CFF1StringIndex)) || !stringIndex->sanitize (&sc))
  ------------------
  |  |  124|  1.42k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1134:11): [True: 0, False: 1.42k]
  |  Branch (1134:55): [True: 24, False: 1.39k]
  ------------------
 1135|     24|      { fini (); return; }
 1136|       |
 1137|  1.39k|      globalSubrs = &StructAtOffset<CFF1Subrs> (stringIndex, stringIndex->get_size ());
 1138|  1.39k|      if ((globalSubrs != &Null (CFF1Subrs)) && !globalSubrs->sanitize (&sc))
  ------------------
  |  |  124|  1.39k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1138:11): [True: 1.39k, False: 0]
  |  Branch (1138:49): [True: 9, False: 1.38k]
  ------------------
 1139|      9|      { fini (); return; }
 1140|       |
 1141|  1.38k|      charStrings = &StructAtOffsetOrNull<CFF1CharStrings> (cff, topDict.charStringsOffset);
 1142|       |
 1143|  1.38k|      if ((charStrings == &Null (CFF1CharStrings)) || unlikely (!charStrings->sanitize (&sc)))
  ------------------
  |  |  124|  1.38k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
                    if ((charStrings == &Null (CFF1CharStrings)) || unlikely (!charStrings->sanitize (&sc)))
  ------------------
  |  |  259|  1.38k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 1.37k]
  |  |  ------------------
  ------------------
  |  Branch (1143:11): [True: 6, False: 1.38k]
  ------------------
 1144|     13|      { fini (); return; }
 1145|       |
 1146|  1.37k|      num_glyphs = charStrings->count;
 1147|  1.37k|      if (num_glyphs != sc.get_num_glyphs ())
  ------------------
  |  Branch (1147:11): [True: 2, False: 1.37k]
  ------------------
 1148|      2|      { fini (); return; }
 1149|       |
 1150|  1.37k|      if (unlikely (!privateDicts.resize (fdCount)))
  ------------------
  |  |  259|  1.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.37k]
  |  |  ------------------
  ------------------
 1151|      1|      { fini (); return; }
 1152|  47.7k|      for (unsigned int i = 0; i < fdCount; i++)
  ------------------
  |  Branch (1152:32): [True: 46.3k, False: 1.37k]
  ------------------
 1153|  46.3k|	privateDicts[i].init ();
 1154|       |
 1155|       |      // parse CID font dicts and gather private dicts
 1156|  1.37k|      if (is_CID ())
  ------------------
  |  Branch (1156:11): [True: 119, False: 1.25k]
  ------------------
 1157|    119|      {
 1158|  23.6k|	for (unsigned int i = 0; i < fdCount; i++)
  ------------------
  |  Branch (1158:27): [True: 23.5k, False: 32]
  ------------------
 1159|  23.5k|	{
 1160|  23.5k|	  hb_ubytes_t fontDictStr = (*fdArray)[i];
 1161|  23.5k|	  if (unlikely (!fontDictStr.sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 23.5k]
  |  |  ------------------
  ------------------
 1162|  23.5k|	  cff1_font_dict_values_t *font;
 1163|  23.5k|	  cff1_top_dict_interp_env_t env (fontDictStr);
 1164|  23.5k|	  cff1_font_dict_interpreter_t font_interp (env);
 1165|  23.5k|	  font = fontDicts.push ();
 1166|  23.5k|	  if (unlikely (fontDicts.in_error ())) { fini (); return; }
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 23.5k]
  |  |  ------------------
  ------------------
 1167|       |
 1168|  23.5k|	  font->init ();
 1169|  23.5k|	  if (unlikely (!font_interp.interpret (*font))) { fini (); return; }
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 67, False: 23.5k]
  |  |  ------------------
  ------------------
 1170|  23.5k|	  PRIVDICTVAL *priv = &privateDicts[i];
 1171|  23.5k|	  const hb_ubytes_t privDictStr = StructAtOffset<UnsizedByteStr> (cff, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size);
 1172|  23.5k|	  if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 23.5k]
  |  |  ------------------
  ------------------
 1173|  23.5k|	  num_interp_env_t env2 (privDictStr);
 1174|  23.5k|	  dict_interpreter_t<PRIVOPSET, PRIVDICTVAL> priv_interp (env2);
 1175|  23.5k|	  priv->init ();
 1176|  23.5k|	  if (unlikely (!priv_interp.interpret (*priv))) { fini (); return; }
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 8, False: 23.5k]
  |  |  ------------------
  ------------------
 1177|       |
 1178|  23.5k|	  priv->localSubrs = &StructAtOffsetOrNull<CFF1Subrs> (&privDictStr, priv->subrsOffset);
 1179|  23.5k|	  if (priv->localSubrs != &Null (CFF1Subrs) &&
  ------------------
  |  |  124|  47.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1179:8): [True: 383, False: 23.1k]
  ------------------
 1180|  23.5k|	      unlikely (!priv->localSubrs->sanitize (&sc)))
  ------------------
  |  |  259|    383|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 378]
  |  |  ------------------
  ------------------
 1181|      5|	  { fini (); return; }
 1182|  23.5k|	}
 1183|    119|      }
 1184|  1.25k|      else  /* non-CID */
 1185|  1.25k|      {
 1186|  1.25k|	cff1_top_dict_values_t *font = &topDict;
 1187|  1.25k|	PRIVDICTVAL *priv = &privateDicts[0];
 1188|       |
 1189|  1.25k|	const hb_ubytes_t privDictStr = StructAtOffset<UnsizedByteStr> (cff, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size);
 1190|  1.25k|	if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
  ------------------
  |  |  259|  1.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 1.24k]
  |  |  ------------------
  ------------------
 1191|  1.24k|	num_interp_env_t env (privDictStr);
 1192|  1.24k|	dict_interpreter_t<PRIVOPSET, PRIVDICTVAL> priv_interp (env);
 1193|  1.24k|	priv->init ();
 1194|  1.24k|	if (unlikely (!priv_interp.interpret (*priv))) { fini (); return; }
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40, False: 1.20k]
  |  |  ------------------
  ------------------
 1195|       |
 1196|  1.20k|	priv->localSubrs = &StructAtOffsetOrNull<CFF1Subrs> (&privDictStr, priv->subrsOffset);
 1197|  1.20k|	if (priv->localSubrs != &Null (CFF1Subrs) &&
  ------------------
  |  |  124|  2.41k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1197:6): [True: 46, False: 1.16k]
  ------------------
 1198|  1.20k|	    unlikely (!priv->localSubrs->sanitize (&sc)))
  ------------------
  |  |  259|     46|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 40]
  |  |  ------------------
  ------------------
 1199|      6|	{ fini (); return; }
 1200|  1.20k|      }
 1201|  1.37k|    }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE17is_predef_charsetEv:
 1216|  1.50k|    bool is_predef_charset () const { return topDict.CharsetOffset <= ExpertSubsetCharset; }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE18is_predef_encodingEv:
 1231|  1.31k|    bool is_predef_encoding () const { return topDict.EncodingOffset <= ExpertEncoding; }
_ZN3CFF31cff1_private_dict_values_base_tINS_10dict_val_tEE4initEv:
  904|  95.8k|  {
  905|  95.8k|    dict_values_t<VAL>::init ();
  906|  95.8k|    subrsOffset = 0;
  907|  95.8k|    localSubrs = &Null (CFF1Subrs);
  ------------------
  |  |  124|  95.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  908|  95.8k|  }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE8is_validEv:
 1213|   782k|    bool is_valid () const { return blob; }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE6is_CIDEv:
 1214|  7.58k|    bool   is_CID () const { return topDict.is_CID (); }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE12glyph_to_sidEjPNS2_11code_pair_tE:
 1275|   118k|    {
 1276|   118k|      if (charset != &Null (Charset))
  ------------------
  |  |  124|   118k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1276:11): [True: 112k, False: 5.70k]
  ------------------
 1277|   112k|	return charset->get_sid (glyph, num_glyphs, cache);
 1278|  5.70k|      else
 1279|  5.70k|      {
 1280|  5.70k|	hb_codepoint_t sid = 0;
 1281|  5.70k|	switch (topDict.CharsetOffset)
 1282|  5.70k|	{
 1283|  5.49k|	  case ISOAdobeCharset:
  ------------------
  |  Branch (1283:4): [True: 5.49k, False: 212]
  ------------------
 1284|  5.49k|	    if (glyph <= 228 /*zcaron*/) sid = glyph;
  ------------------
  |  Branch (1284:10): [True: 3.37k, False: 2.11k]
  ------------------
 1285|  5.49k|	    break;
 1286|    118|	  case ExpertCharset:
  ------------------
  |  Branch (1286:4): [True: 118, False: 5.58k]
  ------------------
 1287|    118|	    sid = lookup_expert_charset_for_sid (glyph);
 1288|    118|	    break;
 1289|     94|	  case ExpertSubsetCharset:
  ------------------
  |  Branch (1289:4): [True: 94, False: 5.61k]
  ------------------
 1290|     94|	      sid = lookup_expert_subset_charset_for_sid (glyph);
 1291|     94|	    break;
 1292|      0|	  default:
  ------------------
  |  Branch (1292:4): [True: 0, False: 5.70k]
  ------------------
 1293|      0|	    break;
 1294|  5.70k|	}
 1295|  5.70k|	return sid;
 1296|  5.70k|      }
 1297|   118k|    }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE12sid_to_glyphEj:
 1300|     21|    {
 1301|     21|      if (charset != &Null (Charset))
  ------------------
  |  |  124|     21|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1301:11): [True: 20, False: 1]
  ------------------
 1302|     20|	return charset->get_glyph (sid, num_glyphs);
 1303|      1|      else
 1304|      1|      {
 1305|      1|	hb_codepoint_t glyph = 0;
 1306|      1|	switch (topDict.CharsetOffset)
 1307|      1|	{
 1308|      1|	  case ISOAdobeCharset:
  ------------------
  |  Branch (1308:4): [True: 1, False: 0]
  ------------------
 1309|      1|	    if (sid <= 228 /*zcaron*/) glyph = sid;
  ------------------
  |  Branch (1309:10): [True: 1, False: 0]
  ------------------
 1310|      1|	    break;
 1311|      0|	  case ExpertCharset:
  ------------------
  |  Branch (1311:4): [True: 0, False: 1]
  ------------------
 1312|      0|	    glyph = lookup_expert_charset_for_glyph (sid);
 1313|      0|	    break;
 1314|      0|	  case ExpertSubsetCharset:
  ------------------
  |  Branch (1314:4): [True: 0, False: 1]
  ------------------
 1315|      0|	    glyph = lookup_expert_subset_charset_for_glyph (sid);
 1316|      0|	    break;
 1317|      0|	  default:
  ------------------
  |  Branch (1317:4): [True: 0, False: 1]
  ------------------
 1318|      0|	    break;
 1319|      1|	}
 1320|      1|	return glyph;
 1321|      1|      }
 1322|     21|    }
_ZNK2OT4cff119accelerator_templ_tIN3CFF25cff1_private_dict_opset_tENS2_31cff1_private_dict_values_base_tINS2_10dict_val_tEEEE17std_code_to_glyphEj:
 1219|  21.5k|    {
 1220|  21.5k|      hb_codepoint_t sid = lookup_standard_encoding_for_sid (code);
 1221|  21.5k|      if (unlikely (sid == CFF_UNDEF_SID))
  ------------------
  |  |  259|  21.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.04k, False: 15.5k]
  |  |  ------------------
  ------------------
 1222|  6.04k|	return 0;
 1223|       |
 1224|  15.5k|      if (charset != &Null (Charset))
  ------------------
  |  |  124|  15.5k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1224:11): [True: 4.21k, False: 11.2k]
  ------------------
 1225|  4.21k|	return charset->get_glyph (sid, num_glyphs);
 1226|  11.2k|      else if ((topDict.CharsetOffset == ISOAdobeCharset)
  ------------------
  |  Branch (1226:16): [True: 10.6k, False: 632]
  ------------------
 1227|  11.2k|	      && (code <= 228 /*zcaron*/)) return sid;
  ------------------
  |  Branch (1227:11): [True: 9.36k, False: 1.30k]
  ------------------
 1228|  1.93k|      return 0;
 1229|  15.5k|    }

_ZNK2OT4cff213accelerator_t11get_extentsEP9hb_font_tjP18hb_glyph_extents_t:
  105|   423k|{
  106|       |#ifdef HB_NO_OT_FONT_CFF
  107|       |  /* XXX Remove check when this code moves to .hh file. */
  108|       |  return true;
  109|       |#endif
  110|       |
  111|   423k|  if (unlikely (!is_valid () || (glyph >= num_glyphs))) return false;
  ------------------
  |  |  259|   425k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 422k, False: 1.37k]
  |  |  |  Branch (259:47): [True: 422k, False: 1.55k]
  |  |  |  Branch (259:47): [True: 180, False: 1.37k]
  |  |  ------------------
  ------------------
  112|       |
  113|  1.37k|  unsigned int fd = fdSelect->get_fd (glyph);
  114|  1.37k|  const hb_ubytes_t str = (*charStrings)[glyph];
  115|  1.37k|  cff2_cs_interp_env_t<number_t> env (str, *this, fd, font->coords, font->num_coords);
  116|  1.37k|  cff2_cs_interpreter_t<cff2_cs_opset_extents_t, cff2_extents_param_t, number_t> interp (env);
  117|  1.37k|  cff2_extents_param_t  param;
  118|  1.37k|  if (unlikely (!interp.interpret (param))) return false;
  ------------------
  |  |  259|  1.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 991, False: 388]
  |  |  ------------------
  ------------------
  119|       |
  120|    388|  if (param.min_x >= param.max_x)
  ------------------
  |  Branch (120:7): [True: 208, False: 180]
  ------------------
  121|    208|  {
  122|    208|    extents->width = 0;
  123|    208|    extents->x_bearing = 0;
  124|    208|  }
  125|    180|  else
  126|    180|  {
  127|    180|    extents->x_bearing = roundf (param.min_x.to_real ());
  ------------------
  |  |  207|    180|#define roundf(x) _hb_roundf(x)
  ------------------
  128|    180|    extents->width = roundf (param.max_x.to_real () - extents->x_bearing);
  ------------------
  |  |  207|    180|#define roundf(x) _hb_roundf(x)
  ------------------
  129|    180|  }
  130|    388|  if (param.min_y >= param.max_y)
  ------------------
  |  Branch (130:7): [True: 208, False: 180]
  ------------------
  131|    208|  {
  132|    208|    extents->height = 0;
  133|    208|    extents->y_bearing = 0;
  134|    208|  }
  135|    180|  else
  136|    180|  {
  137|    180|    extents->y_bearing = roundf (param.max_y.to_real ());
  ------------------
  |  |  207|    180|#define roundf(x) _hb_roundf(x)
  ------------------
  138|    180|    extents->height = roundf (param.min_y.to_real () - extents->y_bearing);
  ------------------
  |  |  207|    180|#define roundf(x) _hb_roundf(x)
  ------------------
  139|    180|  }
  140|       |
  141|    388|  font->scale_glyph_extents (extents);
  142|       |
  143|    388|  return true;
  144|  1.37k|}
_ZNK2OT4cff213accelerator_t8get_pathEP9hb_font_tjR17hb_draw_session_t:
  205|   137k|{
  206|       |#ifdef HB_NO_OT_FONT_CFF
  207|       |  /* XXX Remove check when this code moves to .hh file. */
  208|       |  return true;
  209|       |#endif
  210|       |
  211|   137k|  if (unlikely (!is_valid () || (glyph >= num_glyphs))) return false;
  ------------------
  |  |  259|   150k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 127k, False: 10.6k]
  |  |  |  Branch (259:47): [True: 124k, False: 12.9k]
  |  |  |  Branch (259:47): [True: 2.29k, False: 10.6k]
  |  |  ------------------
  ------------------
  212|       |
  213|  10.6k|  unsigned int fd = fdSelect->get_fd (glyph);
  214|  10.6k|  const hb_ubytes_t str = (*charStrings)[glyph];
  215|  10.6k|  cff2_cs_interp_env_t<number_t> env (str, *this, fd, font->coords, font->num_coords);
  216|  10.6k|  cff2_cs_interpreter_t<cff2_cs_opset_path_t, cff2_path_param_t, number_t> interp (env);
  217|  10.6k|  cff2_path_param_t param (font, draw_session);
  218|  10.6k|  if (unlikely (!interp.interpret (param))) return false;
  ------------------
  |  |  259|  10.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7.29k, False: 3.38k]
  |  |  ------------------
  ------------------
  219|  3.38k|  return true;
  220|  10.6k|}
_ZN20cff2_extents_param_tC2Ev:
   40|  1.37k|  {
   41|  1.37k|    min_x.set_int (INT_MAX);
   42|  1.37k|    min_y.set_int (INT_MAX);
   43|  1.37k|    max_x.set_int (INT_MIN);
   44|  1.37k|    max_y.set_int (INT_MIN);
   45|  1.37k|  }
_ZN17cff2_path_param_tC2EP9hb_font_tR17hb_draw_session_t:
  158|  10.6k|  {
  159|  10.6k|    draw_session = &draw_session_;
  160|  10.6k|    font = font_;
  161|  10.6k|  }
_ZN25cff2_path_procs_extents_t6movetoERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER20cff2_extents_param_tRKNS0_7point_tE:
   69|  22.5k|  {
   70|  22.5k|    param.end_path ();
   71|  22.5k|    env.moveto (pt);
   72|  22.5k|  }
_ZN20cff2_extents_param_t8end_pathEv:
   48|  22.5k|  void     end_path ()       { path_open = false; }
_ZN25cff2_path_procs_extents_t4lineERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER20cff2_extents_param_tRKNS0_7point_tE:
   75|  99.9k|  {
   76|  99.9k|    if (!param.is_path_open ())
  ------------------
  |  Branch (76:9): [True: 9.77k, False: 90.1k]
  ------------------
   77|  9.77k|    {
   78|  9.77k|      param.start_path ();
   79|  9.77k|      param.update_bounds (env.get_pt ());
   80|  9.77k|    }
   81|  99.9k|    env.moveto (pt1);
   82|  99.9k|    param.update_bounds (env.get_pt ());
   83|  99.9k|  }
_ZNK20cff2_extents_param_t12is_path_openEv:
   49|   132k|  bool is_path_open () const { return path_open; }
_ZN20cff2_extents_param_t10start_pathEv:
   47|  14.0k|  void   start_path ()       { path_open = true; }
_ZN20cff2_extents_param_t13update_boundsERKN3CFF7point_tE:
   52|   210k|  {
   53|   210k|    if (pt.x < min_x) min_x = pt.x;
  ------------------
  |  Branch (53:9): [True: 47.3k, False: 163k]
  ------------------
   54|   210k|    if (pt.x > max_x) max_x = pt.x;
  ------------------
  |  Branch (54:9): [True: 19.4k, False: 191k]
  ------------------
   55|   210k|    if (pt.y < min_y) min_y = pt.y;
  ------------------
  |  Branch (55:9): [True: 33.7k, False: 176k]
  ------------------
   56|   210k|    if (pt.y > max_y) max_y = pt.y;
  ------------------
  |  Branch (56:9): [True: 27.6k, False: 182k]
  ------------------
   57|   210k|  }
_ZN25cff2_path_procs_extents_t5curveERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER20cff2_extents_param_tRKNS0_7point_tES9_S9_:
   86|  32.2k|  {
   87|  32.2k|    if (!param.is_path_open ())
  ------------------
  |  Branch (87:9): [True: 4.27k, False: 27.9k]
  ------------------
   88|  4.27k|    {
   89|  4.27k|      param.start_path ();
   90|  4.27k|      param.update_bounds (env.get_pt ());
   91|  4.27k|    }
   92|       |    /* include control points */
   93|  32.2k|    param.update_bounds (pt1);
   94|  32.2k|    param.update_bounds (pt2);
   95|  32.2k|    env.moveto (pt3);
   96|  32.2k|    param.update_bounds (env.get_pt ());
   97|  32.2k|  }
_ZN22cff2_path_procs_path_t6movetoERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER17cff2_path_param_tRKNS0_7point_tE:
  184|  23.8k|  {
  185|  23.8k|    param.move_to (pt);
  186|  23.8k|    env.moveto (pt);
  187|  23.8k|  }
_ZN17cff2_path_param_t7move_toERKN3CFF7point_tE:
  164|  23.8k|  { draw_session->move_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
_ZN22cff2_path_procs_path_t4lineERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER17cff2_path_param_tRKNS0_7point_tE:
  190|  94.1k|  {
  191|  94.1k|    param.line_to (pt1);
  192|  94.1k|    env.moveto (pt1);
  193|  94.1k|  }
_ZN17cff2_path_param_t7line_toERKN3CFF7point_tE:
  167|  94.1k|  { draw_session->line_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
_ZN22cff2_path_procs_path_t5curveERN3CFF20cff2_cs_interp_env_tINS0_8number_tEEER17cff2_path_param_tRKNS0_7point_tES9_S9_:
  196|  40.2k|  {
  197|  40.2k|    param.cubic_to (pt1, pt2, pt3);
  198|  40.2k|    env.moveto (pt3);
  199|  40.2k|  }
_ZN17cff2_path_param_t8cubic_toERKN3CFF7point_tES3_S3_:
  170|  40.2k|  {
  171|  40.2k|    draw_session->cubic_to (font->em_fscalef_x (p1.x.to_real ()), font->em_fscalef_y (p1.y.to_real ()),
  172|  40.2k|			   font->em_fscalef_x (p2.x.to_real ()), font->em_fscalef_y (p2.y.to_real ()),
  173|  40.2k|			   font->em_fscalef_x (p3.x.to_real ()), font->em_fscalef_y (p3.y.to_real ()));
  174|  40.2k|  }

_ZN2OT4cff219accelerator_templ_tIN3CFF25cff2_private_dict_opset_tENS2_31cff2_private_dict_values_base_tINS2_10dict_val_tEEEED2Ev:
  472|  31.9k|    ~accelerator_templ_t () { _fini (); }
_ZN2OT4cff219accelerator_templ_tIN3CFF25cff2_private_dict_opset_tENS2_31cff2_private_dict_values_base_tINS2_10dict_val_tEEEE5_finiEv:
  474|  63.0k|    {
  475|  63.0k|      sc.end_processing ();
  476|  63.0k|      topDict.fini ();
  477|  63.0k|      fontDicts.fini ();
  478|  63.0k|      privateDicts.fini ();
  479|  63.0k|      hb_blob_destroy (blob);
  480|  63.0k|      blob = nullptr;
  481|  63.0k|    }
_ZN3CFF22cff2_top_dict_values_t4finiEv:
  147|  63.0k|  void fini () { top_dict_values_t<>::fini (); }
_ZNK3CFF12CFF2FDSelect6get_fdEj:
   75|  12.0k|  {
   76|  12.0k|    if (this == &Null (CFF2FDSelect))
  ------------------
  |  |  124|  12.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (76:9): [True: 12.0k, False: 53]
  ------------------
   77|  12.0k|      return 0;
   78|       |
   79|     53|    switch (format)
   80|     53|    {
   81|     53|    case 0: return u.format0.get_fd (glyph);
  ------------------
  |  Branch (81:5): [True: 53, False: 0]
  ------------------
   82|      0|    case 3: return u.format3.get_fd (glyph);
  ------------------
  |  Branch (82:5): [True: 0, False: 53]
  ------------------
   83|      0|    case 4: return u.format4.get_fd (glyph);
  ------------------
  |  Branch (83:5): [True: 0, False: 53]
  ------------------
   84|      0|    default:return 0;
  ------------------
  |  Branch (84:5): [True: 0, False: 53]
  ------------------
   85|     53|    }
   86|     53|  }
_ZNK3CFF12CFF2FDSelect8sanitizeEP21hb_sanitize_context_tj:
   89|     52|  {
   90|     52|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     52|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   91|     52|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|     52|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 49]
  |  |  ------------------
  ------------------
   92|      3|      return_trace (false);
  ------------------
  |  |  349|      3|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   93|       |
   94|     49|    switch (format)
   95|     49|    {
   96|     18|    case 0: return_trace (u.format0.sanitize (c, fdcount));
  ------------------
  |  |  349|     18|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     18|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (96:5): [True: 18, False: 31]
  ------------------
   97|      6|    case 3: return_trace (u.format3.sanitize (c, fdcount));
  ------------------
  |  |  349|      6|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      6|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (97:5): [True: 6, False: 43]
  ------------------
   98|     24|    case 4: return_trace (u.format4.sanitize (c, fdcount));
  ------------------
  |  |  349|     24|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     24|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (98:5): [True: 24, False: 25]
  ------------------
   99|      1|    default:return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (99:5): [True: 1, False: 48]
  ------------------
  100|     49|    }
  101|     49|  }
_ZNK3CFF18CFF2VariationStore8sanitizeEP21hb_sanitize_context_t:
  116|     64|  {
  117|     64|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     64|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  118|     64|    return_trace (likely (c->check_struct (this)) && c->check_range (&varStore, size) && varStore.sanitize (c));
  ------------------
  |  |  349|    247|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     64|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 61, False: 3]
  |  |  |  Branch (349:45): [True: 58, False: 3]
  |  |  |  Branch (349:45): [True: 55, False: 3]
  |  |  ------------------
  ------------------
  119|     64|  }
_ZN3CFF22cff2_top_dict_values_t4initEv:
  142|  34.4k|  {
  143|  34.4k|    top_dict_values_t<>::init ();
  144|  34.4k|    vstoreOffset = 0;
  145|  34.4k|    FDSelectOffset = 0;
  146|  34.4k|  }
_ZN3CFF21cff2_top_dict_opset_t10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_22cff2_top_dict_values_tE:
  156|  12.1k|  {
  157|  12.1k|    switch (op) {
  158|    307|      case OpCode_FontMatrix:
  ------------------
  |  |  106|    307|#define OpCode_FontMatrix	Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/
  |  |  ------------------
  |  |  |  |   93|    307|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    307|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (158:7): [True: 307, False: 11.8k]
  ------------------
  159|    307|	{
  160|    307|	  dict_val_t val;
  161|    307|	  val.init ();
  162|    307|	  dictval.add_op (op, env.str_ref);
  163|    307|	  env.clear_args ();
  164|    307|	}
  165|    307|	break;
  166|       |
  167|    173|      case OpCode_vstore:
  ------------------
  |  |   65|    173|#define OpCode_vstore		 24 /* CFF2 Top */
  ------------------
  |  Branch (167:7): [True: 173, False: 12.0k]
  ------------------
  168|    173|	dictval.vstoreOffset = env.argStack.pop_uint ();
  169|    173|	env.clear_args ();
  170|    173|	break;
  171|    111|      case OpCode_FDSelect:
  ------------------
  |  |  136|    111|#define OpCode_FDSelect		Make_OpCode_ESC(37) /* CFF Top_CID, CFF2 Top */
  |  |  ------------------
  |  |  |  |   93|    111|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    111|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (171:7): [True: 111, False: 12.0k]
  ------------------
  172|    111|	dictval.FDSelectOffset = env.argStack.pop_uint ();
  173|    111|	env.clear_args ();
  174|    111|	break;
  175|       |
  176|  11.5k|      default:
  ------------------
  |  Branch (176:7): [True: 11.5k, False: 591]
  ------------------
  177|  11.5k|	SUPER::process_op (op, env, dictval);
  178|       |	/* Record this operand below if stack is empty, otherwise done */
  179|  11.5k|	if (!env.argStack.is_empty ()) return;
  ------------------
  |  Branch (179:6): [True: 9.26k, False: 2.32k]
  ------------------
  180|  12.1k|    }
  181|       |
  182|  2.91k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  2.91k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 104, False: 2.80k]
  |  |  ------------------
  ------------------
  183|       |
  184|  2.80k|    dictval.add_op (op, env.str_ref);
  185|  2.80k|  }
_ZN3CFF23cff2_font_dict_values_t4initEv:
  193|  92.5k|  {
  194|  92.5k|    dict_values_t<op_str_t>::init ();
  195|  92.5k|    privateDictInfo.init ();
  196|  92.5k|  }
_ZN3CFF22cff2_font_dict_opset_t10process_opEjRNS_12interp_env_tINS_8number_tEEERNS_23cff2_font_dict_values_tE:
  205|  71.1k|  {
  206|  71.1k|    switch (op) {
  207|  1.21k|      case OpCode_Private:
  ------------------
  |  |   59|  1.21k|#define OpCode_Private		 18 /* CFF Top, CFF2 FD */
  ------------------
  |  Branch (207:7): [True: 1.21k, False: 69.9k]
  ------------------
  208|  1.21k|	dictval.privateDictInfo.offset = env.argStack.pop_uint ();
  209|  1.21k|	dictval.privateDictInfo.size = env.argStack.pop_uint ();
  210|  1.21k|	env.clear_args ();
  211|  1.21k|	break;
  212|       |
  213|  69.9k|      default:
  ------------------
  |  Branch (213:7): [True: 69.9k, False: 1.21k]
  ------------------
  214|  69.9k|	SUPER::process_op (op, env);
  215|  69.9k|	if (!env.argStack.is_empty ())
  ------------------
  |  Branch (215:6): [True: 69.9k, False: 32]
  ------------------
  216|  69.9k|	  return;
  217|  71.1k|    }
  218|       |
  219|  1.24k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 54, False: 1.18k]
  |  |  ------------------
  ------------------
  220|       |
  221|  1.18k|    dictval.add_op (op, env.str_ref);
  222|  1.18k|  }
_ZN3CFF27cff2_priv_dict_interp_env_tC2ERK10hb_array_tIKhE:
  251|  46.1k|    num_interp_env_t (str) {}
_ZN3CFF27cff2_priv_dict_interp_env_t15process_vsindexEv:
  254|    432|  {
  255|    432|    if (likely (!seen_vsindex))
  ------------------
  |  |  258|    432|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 77, False: 355]
  |  |  ------------------
  ------------------
  256|     77|    {
  257|     77|      set_ivs (argStack.pop_uint ());
  258|     77|    }
  259|    432|    seen_vsindex = true;
  260|    432|  }
_ZNK3CFF27cff2_priv_dict_interp_env_t7get_ivsEv:
  262|    432|  unsigned int get_ivs () const { return ivs; }
_ZN3CFF27cff2_priv_dict_interp_env_t7set_ivsEj:
  263|     77|  void	 set_ivs (unsigned int ivs_) { ivs = ivs_; }
_ZN3CFF25cff2_private_dict_opset_t10process_opEjRNS_27cff2_priv_dict_interp_env_tERNS_31cff2_private_dict_values_base_tINS_10dict_val_tEEE:
  273|  25.7k|  {
  274|  25.7k|    num_dict_val_t val;
  275|  25.7k|    val.init ();
  276|       |
  277|  25.7k|    switch (op) {
  278|    156|      case OpCode_StdHW:
  ------------------
  |  |   51|    156|#define OpCode_StdHW		 10 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (278:7): [True: 156, False: 25.6k]
  ------------------
  279|    308|      case OpCode_StdVW:
  ------------------
  |  |   52|    308|#define OpCode_StdVW		 11 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (279:7): [True: 152, False: 25.6k]
  ------------------
  280|    660|      case OpCode_BlueScale:
  ------------------
  |  |  108|    660|#define OpCode_BlueScale	Make_OpCode_ESC(9) /* CFF Private, CFF2 Private (0.039625) */
  |  |  ------------------
  |  |  |  |   93|    660|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    660|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (280:7): [True: 352, False: 25.4k]
  ------------------
  281|    697|      case OpCode_BlueShift:
  ------------------
  |  |  109|    697|#define OpCode_BlueShift	Make_OpCode_ESC(10) /* CFF Private, CFF2 Private (7) */
  |  |  ------------------
  |  |  |  |   93|    697|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|    697|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (281:7): [True: 37, False: 25.7k]
  ------------------
  282|  1.21k|      case OpCode_BlueFuzz:
  ------------------
  |  |  110|  1.21k|#define OpCode_BlueFuzz		Make_OpCode_ESC(11) /* CFF Private, CFF2 Private (1) */
  |  |  ------------------
  |  |  |  |   93|  1.21k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.21k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (282:7): [True: 520, False: 25.2k]
  ------------------
  283|  1.23k|      case OpCode_ExpansionFactor:
  ------------------
  |  |  117|  1.23k|#define OpCode_ExpansionFactor	Make_OpCode_ESC(18) /* CFF Private, CFF2 Private (0.06) */
  |  |  ------------------
  |  |  |  |   93|  1.23k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.23k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (283:7): [True: 22, False: 25.7k]
  ------------------
  284|  1.30k|      case OpCode_LanguageGroup:
  ------------------
  |  |  116|  1.30k|#define OpCode_LanguageGroup	Make_OpCode_ESC(17) /* CFF Private, CFF2 Private (0) */
  |  |  ------------------
  |  |  |  |   93|  1.30k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  1.30k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (284:7): [True: 63, False: 25.7k]
  ------------------
  285|  1.38k|      case OpCode_BlueValues:
  ------------------
  |  |   47|  1.38k|#define OpCode_BlueValues	  6 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (285:7): [True: 87, False: 25.6k]
  ------------------
  286|  2.54k|      case OpCode_OtherBlues:
  ------------------
  |  |   48|  2.54k|#define OpCode_OtherBlues	  7 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (286:7): [True: 1.15k, False: 24.6k]
  ------------------
  287|  5.49k|      case OpCode_FamilyBlues:
  ------------------
  |  |   49|  5.49k|#define OpCode_FamilyBlues	  8 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (287:7): [True: 2.94k, False: 22.8k]
  ------------------
  288|  5.99k|      case OpCode_FamilyOtherBlues:
  ------------------
  |  |   50|  5.99k|#define OpCode_FamilyOtherBlues	  9 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (288:7): [True: 499, False: 25.2k]
  ------------------
  289|  6.35k|      case OpCode_StemSnapH:
  ------------------
  |  |  111|  6.35k|#define OpCode_StemSnapH	Make_OpCode_ESC(12) /* CFF Private, CFF2 Private */
  |  |  ------------------
  |  |  |  |   93|  6.35k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  6.35k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (289:7): [True: 367, False: 25.4k]
  ------------------
  290|  6.44k|      case OpCode_StemSnapV:
  ------------------
  |  |  112|  6.44k|#define OpCode_StemSnapV	Make_OpCode_ESC(13) /* CFF Private, CFF2 Private */
  |  |  ------------------
  |  |  |  |   93|  6.44k|#define Make_OpCode_ESC(byte2)	((op_code_t)(OpCode_ESC_Base + (byte2)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   92|  6.44k|#define OpCode_ESC_Base		256
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (290:7): [True: 83, False: 25.7k]
  ------------------
  291|  6.44k|	env.clear_args ();
  292|  6.44k|	break;
  293|    250|      case OpCode_Subrs:
  ------------------
  |  |   60|    250|#define OpCode_Subrs		 19 /* CFF Private, CFF2 Private */
  ------------------
  |  Branch (293:7): [True: 250, False: 25.5k]
  ------------------
  294|    250|	dictval.subrsOffset = env.argStack.pop_uint ();
  295|    250|	env.clear_args ();
  296|    250|	break;
  297|    432|      case OpCode_vsindexdict:
  ------------------
  |  |   63|    432|#define OpCode_vsindexdict	 22 /* CFF2 Private/CS */
  ------------------
  |  Branch (297:7): [True: 432, False: 25.3k]
  ------------------
  298|    432|	env.process_vsindex ();
  299|    432|	dictval.ivs = env.get_ivs ();
  300|    432|	env.clear_args ();
  301|    432|	break;
  302|    503|      case OpCode_blenddict:
  ------------------
  |  |   64|    503|#define OpCode_blenddict	 23 /* CFF2 Private/CS */
  ------------------
  |  Branch (302:7): [True: 503, False: 25.2k]
  ------------------
  303|    503|	break;
  304|       |
  305|  18.1k|      default:
  ------------------
  |  Branch (305:7): [True: 18.1k, False: 7.62k]
  ------------------
  306|  18.1k|	dict_opset_t::process_op (op, env);
  307|  18.1k|	if (!env.argStack.is_empty ()) return;
  ------------------
  |  Branch (307:6): [True: 18.1k, False: 29]
  ------------------
  308|     29|	break;
  309|  25.7k|    }
  310|       |
  311|  7.65k|    if (unlikely (env.in_error ())) return;
  ------------------
  |  |  259|  7.65k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33, False: 7.62k]
  |  |  ------------------
  ------------------
  312|       |
  313|  7.62k|    dictval.add_op (op, env.str_ref, val);
  314|  7.62k|  }
_ZNK2OT4cff28sanitizeEP21hb_sanitize_context_t:
  384|  1.29k|  {
  385|  1.29k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.29k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  386|  1.29k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.29k, False: 1]
  |  |  |  Branch (349:45): [True: 1.24k, False: 50]
  |  |  ------------------
  ------------------
  387|  1.29k|		  likely (version.major == 2));
  388|  1.29k|  }
_ZN2OT4cff213accelerator_tC2EP9hb_face_t:
  511|  31.9k|    accelerator_t (hb_face_t *face) : accelerator_templ_t (face) {}
_ZN2OT18cff2_accelerator_tC2EP9hb_face_t:
  534|  31.9k|  cff2_accelerator_t (hb_face_t *face) : cff2::accelerator_t (face) {}
_ZN3CFF31cff2_private_dict_values_base_tINS_10dict_val_tEE4initEv:
  232|  92.3k|  {
  233|  92.3k|    dict_values_t<VAL>::init ();
  234|  92.3k|    subrsOffset = 0;
  235|  92.3k|    localSubrs = &Null (CFF2Subrs);
  ------------------
  |  |  124|  92.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  236|  92.3k|    ivs = 0;
  237|  92.3k|  }
_ZN2OT4cff219accelerator_templ_tIN3CFF25cff2_private_dict_opset_tENS2_31cff2_private_dict_values_base_tINS2_10dict_val_tEEEEC2EP9hb_face_t:
  394|  31.9k|    {
  395|  31.9k|      topDict.init ();
  396|  31.9k|      fontDicts.init ();
  397|  31.9k|      privateDicts.init ();
  398|       |
  399|  31.9k|      this->blob = sc.reference_table<cff2> (face);
  400|       |
  401|       |      /* setup for run-time santization */
  402|  31.9k|      sc.init (this->blob);
  403|  31.9k|      sc.start_processing ();
  404|       |
  405|  31.9k|      const OT::cff2 *cff2 = this->blob->template as<OT::cff2> ();
  406|       |
  407|  31.9k|      if (cff2 == &Null (OT::cff2))
  ------------------
  |  |  124|  31.9k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (407:11): [True: 30.7k, False: 1.24k]
  ------------------
  408|  30.7k|        goto fail;
  409|       |
  410|  1.24k|      { /* parse top dict */
  411|  1.24k|	hb_ubytes_t topDictStr = (cff2 + cff2->topDict).as_ubytes (cff2->topDictSize);
  412|  1.24k|	if (unlikely (!topDictStr.sanitize (&sc))) goto fail;
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 1.24k]
  |  |  ------------------
  ------------------
  413|  1.24k|	num_interp_env_t env (topDictStr);
  414|  1.24k|	cff2_top_dict_interpreter_t top_interp (env);
  415|  1.24k|	topDict.init ();
  416|  1.24k|	if (unlikely (!top_interp.interpret (topDict))) goto fail;
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 136, False: 1.10k]
  |  |  ------------------
  ------------------
  417|  1.24k|      }
  418|       |
  419|  1.10k|      globalSubrs = &StructAtOffset<CFF2Subrs> (cff2, cff2->topDict + cff2->topDictSize);
  420|  1.10k|      varStore = &StructAtOffsetOrNull<CFF2VariationStore> (cff2, topDict.vstoreOffset);
  421|  1.10k|      charStrings = &StructAtOffsetOrNull<CFF2CharStrings> (cff2, topDict.charStringsOffset);
  422|  1.10k|      fdArray = &StructAtOffsetOrNull<CFF2FDArray> (cff2, topDict.FDArrayOffset);
  423|  1.10k|      fdSelect = &StructAtOffsetOrNull<CFF2FDSelect> (cff2, topDict.FDSelectOffset);
  424|       |
  425|  1.10k|      if (((varStore != &Null (CFF2VariationStore)) && unlikely (!varStore->sanitize (&sc))) ||
  ------------------
  |  |  124|  1.10k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
                    if (((varStore != &Null (CFF2VariationStore)) && unlikely (!varStore->sanitize (&sc))) ||
  ------------------
  |  |  259|     64|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 55]
  |  |  ------------------
  ------------------
  |  Branch (425:12): [True: 64, False: 1.04k]
  ------------------
  426|  1.10k|	  (charStrings == &Null (CFF2CharStrings)) || unlikely (!charStrings->sanitize (&sc)) ||
  ------------------
  |  |  124|  1.09k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
              	  (charStrings == &Null (CFF2CharStrings)) || unlikely (!charStrings->sanitize (&sc)) ||
  ------------------
  |  |  259|  2.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 1.07k]
  |  |  ------------------
  ------------------
  |  Branch (426:4): [True: 9, False: 1.09k]
  ------------------
  427|  1.10k|	  (globalSubrs == &Null (CFF2Subrs)) || unlikely (!globalSubrs->sanitize (&sc)) ||
  ------------------
  |  |  124|  1.07k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
              	  (globalSubrs == &Null (CFF2Subrs)) || unlikely (!globalSubrs->sanitize (&sc)) ||
  ------------------
  |  |  259|  2.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 1.06k]
  |  |  ------------------
  ------------------
  |  Branch (427:4): [True: 0, False: 1.07k]
  ------------------
  428|  1.10k|	  (fdArray == &Null (CFF2FDArray)) || unlikely (!fdArray->sanitize (&sc)) ||
  ------------------
  |  |  124|  1.06k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
              	  (fdArray == &Null (CFF2FDArray)) || unlikely (!fdArray->sanitize (&sc)) ||
  ------------------
  |  |  259|  2.17k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 1.05k]
  |  |  ------------------
  ------------------
  |  Branch (428:4): [True: 1, False: 1.06k]
  ------------------
  429|  1.10k|	  (((fdSelect != &Null (CFF2FDSelect)) && unlikely (!fdSelect->sanitize (&sc, fdArray->count)))))
  ------------------
  |  |  124|  1.05k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
              	  (((fdSelect != &Null (CFF2FDSelect)) && unlikely (!fdSelect->sanitize (&sc, fdArray->count)))))
  ------------------
  |  |  259|     52|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 35, False: 17]
  |  |  ------------------
  ------------------
  |  Branch (429:6): [True: 52, False: 998]
  ------------------
  430|     93|        goto fail;
  431|       |
  432|  1.01k|      num_glyphs = charStrings->count;
  433|  1.01k|      if (num_glyphs != sc.get_num_glyphs ())
  ------------------
  |  Branch (433:11): [True: 11, False: 1.00k]
  ------------------
  434|     11|        goto fail;
  435|       |
  436|  1.00k|      fdCount = fdArray->count;
  437|  1.00k|      if (!privateDicts.resize (fdCount))
  ------------------
  |  Branch (437:11): [True: 2, False: 1.00k]
  ------------------
  438|      2|        goto fail;
  439|       |
  440|       |      /* parse font dicts and gather private dicts */
  441|  47.1k|      for (unsigned int i = 0; i < fdCount; i++)
  ------------------
  |  Branch (441:32): [True: 46.2k, False: 883]
  ------------------
  442|  46.2k|      {
  443|  46.2k|	const hb_ubytes_t fontDictStr = (*fdArray)[i];
  444|  46.2k|	if (unlikely (!fontDictStr.sanitize (&sc))) goto fail;
  ------------------
  |  |  259|  46.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 46.2k]
  |  |  ------------------
  ------------------
  445|  46.2k|	cff2_font_dict_values_t  *font;
  446|  46.2k|	num_interp_env_t env (fontDictStr);
  447|  46.2k|	cff2_font_dict_interpreter_t font_interp (env);
  448|  46.2k|	font = fontDicts.push ();
  449|  46.2k|	if (unlikely (font == &Crap (cff2_font_dict_values_t))) goto fail;
  ------------------
  |  |  259|  46.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 46.2k]
  |  |  ------------------
  ------------------
  450|  46.2k|	font->init ();
  451|  46.2k|	if (unlikely (!font_interp.interpret (*font))) goto fail;
  ------------------
  |  |  259|  46.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 73, False: 46.1k]
  |  |  ------------------
  ------------------
  452|       |
  453|  46.1k|	const hb_ubytes_t privDictStr = StructAtOffsetOrNull<UnsizedByteStr> (cff2, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size);
  454|  46.1k|	if (unlikely (!privDictStr.sanitize (&sc))) goto fail;
  ------------------
  |  |  259|  46.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 46.1k]
  |  |  ------------------
  ------------------
  455|  46.1k|	cff2_priv_dict_interp_env_t env2 (privDictStr);
  456|  46.1k|	dict_interpreter_t<PRIVOPSET, PRIVDICTVAL, cff2_priv_dict_interp_env_t> priv_interp (env2);
  457|  46.1k|	privateDicts[i].init ();
  458|  46.1k|	if (unlikely (!priv_interp.interpret (privateDicts[i]))) goto fail;
  ------------------
  |  |  259|  46.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33, False: 46.1k]
  |  |  ------------------
  ------------------
  459|       |
  460|  46.1k|	privateDicts[i].localSubrs = &StructAtOffsetOrNull<CFF2Subrs> (&privDictStr[0], privateDicts[i].subrsOffset);
  461|  46.1k|	if (privateDicts[i].localSubrs != &Null (CFF2Subrs) &&
  ------------------
  |  |  124|  92.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (461:6): [True: 248, False: 45.9k]
  ------------------
  462|  46.1k|	  unlikely (!privateDicts[i].localSubrs->sanitize (&sc)))
  ------------------
  |  |  259|    248|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 247]
  |  |  ------------------
  ------------------
  463|      1|	  goto fail;
  464|  46.1k|      }
  465|       |
  466|       |
  467|    883|      return;
  468|       |
  469|  31.0k|      fail:
  470|  31.0k|        _fini ();
  471|  31.0k|    }
_ZNK2OT4cff219accelerator_templ_tIN3CFF25cff2_private_dict_opset_tENS2_31cff2_private_dict_values_base_tINS2_10dict_val_tEEEE8is_validEv:
  488|   561k|    bool is_valid () const { return blob; }

_ZNK2OT19CmapSubtableFormat09get_glyphEjPj:
   48|  2.27M|  {
   49|  2.27M|    hb_codepoint_t gid = codepoint < 256 ? glyphIdArray[codepoint] : 0;
  ------------------
  |  Branch (49:26): [True: 1.69M, False: 587k]
  ------------------
   50|  2.27M|    if (unlikely (!gid))
  ------------------
  |  |  259|  2.27M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.27M, False: 3.78k]
  |  |  ------------------
  ------------------
   51|  2.27M|      return false;
   52|  3.78k|    *glyph = gid;
   53|  3.78k|    return true;
   54|  2.27M|  }
_ZNK2OT19CmapSubtableFormat016collect_unicodesEP8hb_set_t:
   62|  31.1k|  {
   63|  8.00M|    for (unsigned int i = 0; i < 256; i++)
  ------------------
  |  Branch (63:30): [True: 7.97M, False: 31.1k]
  ------------------
   64|  7.97M|      if (glyphIdArray[i])
  ------------------
  |  Branch (64:11): [True: 42.4k, False: 7.92M]
  ------------------
   65|  42.4k|	out->add (i);
   66|  31.1k|  }
_ZNK2OT19CmapSubtableFormat08sanitizeEP21hb_sanitize_context_t:
   81|  2.18k|  {
   82|  2.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   83|  2.18k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  2.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   84|  2.18k|  }
_ZN2OT19CmapSubtableFormat413accelerator_tC2Ev:
  385|  32.8k|    accelerator_t () {}
_ZN2OT19CmapSubtableFormat413accelerator_tC2EPKS0_:
  386|  37.1k|    accelerator_t (const CmapSubtableFormat4 *subtable) { init (subtable); }
_ZN2OT19CmapSubtableFormat413accelerator_t4initEPKS0_:
  389|  38.0k|    {
  390|  38.0k|      segCount = subtable->segCountX2 / 2;
  391|  38.0k|      endCount = subtable->values.arrayZ;
  392|  38.0k|      startCount = endCount + segCount + 1;
  393|  38.0k|      idDelta = startCount + segCount;
  394|  38.0k|      idRangeOffset = idDelta + segCount;
  395|  38.0k|      glyphIdArray = idRangeOffset + segCount;
  396|  38.0k|      glyphIdArrayLength = (subtable->length - 16 - 8 * segCount) / 2;
  397|  38.0k|    }
_ZZNK2OT19CmapSubtableFormat413accelerator_t9get_glyphEjPjENK11CustomRange3cmpEjj:
  405|   301k|	{
  406|   301k|	  if (k > last) return +1;
  ------------------
  |  Branch (406:8): [True: 120k, False: 181k]
  ------------------
  407|   181k|	  if (k < (&last)[distance]/*first*/) return -1;
  ------------------
  |  Branch (407:8): [True: 98.3k, False: 82.7k]
  ------------------
  408|  82.7k|	  return 0;
  409|   181k|	}
_ZNK2OT19CmapSubtableFormat413accelerator_t9get_glyphEjPj:
  400|   148k|    {
  401|   148k|      struct CustomRange
  402|   148k|      {
  403|   148k|	int cmp (hb_codepoint_t k,
  404|   148k|		 unsigned distance) const
  405|   148k|	{
  406|   148k|	  if (k > last) return +1;
  407|   148k|	  if (k < (&last)[distance]/*first*/) return -1;
  408|   148k|	  return 0;
  409|   148k|	}
  410|   148k|	HBUINT16 last;
  411|   148k|      };
  412|       |
  413|   148k|      const HBUINT16 *found = hb_bsearch (codepoint,
  414|   148k|					  this->endCount,
  415|   148k|					  this->segCount,
  416|   148k|					  sizeof (CustomRange),
  417|   148k|					  _hb_cmp_method<hb_codepoint_t, CustomRange, unsigned>,
  418|   148k|					  this->segCount + 1);
  419|   148k|      if (unlikely (!found))
  ------------------
  |  |  259|   148k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 65.6k, False: 82.7k]
  |  |  ------------------
  ------------------
  420|  65.6k|	return false;
  421|  82.7k|      unsigned int i = found - endCount;
  422|       |
  423|  82.7k|      hb_codepoint_t gid;
  424|  82.7k|      unsigned int rangeOffset = this->idRangeOffset[i];
  425|  82.7k|      if (rangeOffset == 0)
  ------------------
  |  Branch (425:11): [True: 39.8k, False: 42.9k]
  ------------------
  426|  39.8k|	gid = codepoint + this->idDelta[i];
  427|  42.9k|      else
  428|  42.9k|      {
  429|       |	/* Somebody has been smoking... */
  430|  42.9k|	unsigned int index = rangeOffset / 2 + (codepoint - this->startCount[i]) + i - this->segCount;
  431|  42.9k|	if (unlikely (index >= this->glyphIdArrayLength))
  ------------------
  |  |  259|  42.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.0k, False: 10.8k]
  |  |  ------------------
  ------------------
  432|  32.0k|	  return false;
  433|  10.8k|	gid = this->glyphIdArray[index];
  434|  10.8k|	if (unlikely (!gid))
  ------------------
  |  |  259|  10.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.88k, False: 7.00k]
  |  |  ------------------
  ------------------
  435|  3.88k|	  return false;
  436|  7.00k|	gid += this->idDelta[i];
  437|  7.00k|      }
  438|  46.8k|      gid &= 0xFFFFu;
  439|  46.8k|      if (unlikely (!gid))
  ------------------
  |  |  259|  46.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 856, False: 45.9k]
  |  |  ------------------
  ------------------
  440|    856|	return false;
  441|  45.9k|      *glyph = gid;
  442|  45.9k|      return true;
  443|  46.8k|    }
_ZN2OT19CmapSubtableFormat413accelerator_t14get_glyph_funcEPKvjPj:
  446|   148k|    { return ((const accelerator_t *) obj)->get_glyph (codepoint, glyph); }
_ZNK2OT19CmapSubtableFormat413accelerator_t16collect_unicodesEP8hb_set_t:
  449|  1.01k|    {
  450|  1.01k|      unsigned int count = this->segCount;
  451|  1.01k|      if (count && this->startCount[count - 1] == 0xFFFFu)
  ------------------
  |  Branch (451:11): [True: 1.01k, False: 2]
  |  Branch (451:20): [True: 211, False: 802]
  ------------------
  452|    211|	count--; /* Skip sentinel segment. */
  453|  58.5k|      for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (453:32): [True: 57.5k, False: 1.01k]
  ------------------
  454|  57.5k|      {
  455|  57.5k|	hb_codepoint_t start = this->startCount[i];
  456|  57.5k|	hb_codepoint_t end = this->endCount[i];
  457|  57.5k|	unsigned int rangeOffset = this->idRangeOffset[i];
  458|  57.5k|        out->add_range(start, end);
  459|  57.5k|	if (rangeOffset == 0)
  ------------------
  |  Branch (459:6): [True: 13.9k, False: 43.5k]
  ------------------
  460|  13.9k|	{
  461|   137M|	  for (hb_codepoint_t codepoint = start; codepoint <= end; codepoint++)
  ------------------
  |  Branch (461:43): [True: 137M, False: 13.9k]
  ------------------
  462|   137M|	  {
  463|   137M|	    hb_codepoint_t gid = (codepoint + this->idDelta[i]) & 0xFFFFu;
  464|   137M|	    if (unlikely (!gid))
  ------------------
  |  |  259|   137M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.01k, False: 137M]
  |  |  ------------------
  ------------------
  465|  2.01k|              out->del(codepoint);
  466|   137M|	  }
  467|  13.9k|	}
  468|  43.5k|	else
  469|  43.5k|	{
  470|  17.4M|	  for (hb_codepoint_t codepoint = start; codepoint <= end; codepoint++)
  ------------------
  |  Branch (470:43): [True: 17.4M, False: 18.9k]
  ------------------
  471|  17.4M|	  {
  472|  17.4M|	    unsigned int index = rangeOffset / 2 + (codepoint - this->startCount[i]) + i - this->segCount;
  473|  17.4M|	    if (unlikely (index >= this->glyphIdArrayLength))
  ------------------
  |  |  259|  17.4M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24.6k, False: 17.4M]
  |  |  ------------------
  ------------------
  474|  24.6k|            {
  475|  24.6k|              out->del_range (codepoint, end);
  476|  24.6k|	      break;
  477|  24.6k|            }
  478|  17.4M|	    hb_codepoint_t gid = this->glyphIdArray[index];
  479|  17.4M|	    if (unlikely (!gid))
  ------------------
  |  |  259|  17.4M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.82M, False: 11.5M]
  |  |  ------------------
  ------------------
  480|  5.82M|              out->del(codepoint);
  481|  17.4M|	  }
  482|  43.5k|	}
  483|  57.5k|      }
  484|  1.01k|    }
_ZNK2OT19CmapSubtableFormat49get_glyphEjPj:
  537|  36.1k|  {
  538|  36.1k|    accelerator_t accel (this);
  539|  36.1k|    return accel.get_glyph_func (&accel, codepoint, glyph);
  540|  36.1k|  }
_ZNK2OT19CmapSubtableFormat416collect_unicodesEP8hb_set_t:
  542|  1.01k|  {
  543|  1.01k|    accelerator_t accel (this);
  544|  1.01k|    accel.collect_unicodes (out);
  545|  1.01k|  }
_ZNK2OT19CmapSubtableFormat48sanitizeEP21hb_sanitize_context_t:
  555|  3.48k|  {
  556|  3.48k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.48k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  557|  3.48k|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|  3.48k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 40, False: 3.44k]
  |  |  ------------------
  ------------------
  558|     40|      return_trace (false);
  ------------------
  |  |  349|     40|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     40|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  559|       |
  560|  3.44k|    if (unlikely (!c->check_range (this, length)))
  ------------------
  |  |  259|  3.44k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.06k, False: 2.37k]
  |  |  ------------------
  ------------------
  561|  1.06k|    {
  562|       |      /* Some broken fonts have too long of a "length" value.
  563|       |       * If that is the case, just change the value to truncate
  564|       |       * the subtable at the end of the blob. */
  565|  1.06k|      uint16_t new_length = (uint16_t) hb_min ((uintptr_t) 65535,
  566|  1.06k|					       (uintptr_t) (c->end -
  567|  1.06k|							    (char *) this));
  568|  1.06k|      if (!c->try_set (&length, new_length))
  ------------------
  |  Branch (568:11): [True: 375, False: 694]
  ------------------
  569|    375|	return_trace (false);
  ------------------
  |  |  349|    375|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    375|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  570|  1.06k|    }
  571|       |
  572|  3.06k|    return_trace (16 + 4 * (unsigned int) segCountX2 <= length);
  ------------------
  |  |  349|  3.06k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.06k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  573|  3.44k|  }
_ZNK2OT21CmapSubtableLongGroup3cmpEj:
  613|   365k|  {
  614|   365k|    if (codepoint < startCharCode) return -1;
  ------------------
  |  Branch (614:9): [True: 135k, False: 229k]
  ------------------
  615|   229k|    if (codepoint > endCharCode)   return +1;
  ------------------
  |  Branch (615:9): [True: 84.7k, False: 144k]
  ------------------
  616|   144k|    return 0;
  617|   229k|  }
_ZN2OT20CmapSubtableFormat1215group_get_glyphERKNS_21CmapSubtableLongGroupEj:
  803|   103k|  { return likely (group.startCharCode <= group.endCharCode) ?
  ------------------
  |  |  258|   103k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 72.0k, False: 31.1k]
  |  |  ------------------
  ------------------
  804|  72.0k|	   group.glyphID + (u - group.startCharCode) : 0; }
_ZN2OT20CmapSubtableFormat1315group_get_glyphERKNS_21CmapSubtableLongGroupEj:
  878|   115k|  { return group.glyphID; }
_ZNK2OT17UnicodeValueRange3cmpERKj:
  891|    582|  {
  892|    582|    if (codepoint < startUnicodeValue) return -1;
  ------------------
  |  Branch (892:9): [True: 250, False: 332]
  ------------------
  893|    332|    if (codepoint > startUnicodeValue + additionalCount) return +1;
  ------------------
  |  Branch (893:9): [True: 277, False: 55]
  ------------------
  894|     55|    return 0;
  895|    332|  }
_ZNK2OT10DefaultUVS16collect_unicodesEP8hb_set_t:
  913|  33.3k|  {
  914|  33.3k|    unsigned int count = len;
  915|  43.1k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (915:30): [True: 9.78k, False: 33.3k]
  ------------------
  916|  9.78k|    {
  917|  9.78k|      hb_codepoint_t first = arrayZ[i].startUnicodeValue;
  918|  9.78k|      hb_codepoint_t last = hb_min ((hb_codepoint_t) (first + arrayZ[i].additionalCount),
  919|  9.78k|				    (hb_codepoint_t) HB_UNICODE_MAX);
  ------------------
  |  |   50|  9.78k|#define HB_UNICODE_MAX 0x10FFFFu
  ------------------
  920|  9.78k|      out->add_range (first, last);
  921|  9.78k|    }
  922|  33.3k|  }
_ZNK2OT10UVSMapping3cmpERKj:
 1027|    162|  { return unicodeValue.cmp (codepoint); }
_ZNK2OT13NonDefaultUVS16collect_unicodesEP8hb_set_t:
 1044|  33.3k|  {
 1045|  33.3k|    for (const auto& a : as_array ())
  ------------------
  |  Branch (1045:24): [True: 363, False: 33.3k]
  ------------------
 1046|    363|      out->add (a.unicodeValue);
 1047|  33.3k|  }
_ZNK2OT23VariationSelectorRecord9get_glyphEjPjPKv:
 1111|  34.3k|  {
 1112|  34.3k|    if ((base+defaultUVS).bfind (codepoint))
  ------------------
  |  Branch (1112:9): [True: 55, False: 34.3k]
  ------------------
 1113|     55|      return GLYPH_VARIANT_USE_DEFAULT;
 1114|  34.3k|    const UVSMapping &nonDefault = (base+nonDefaultUVS).bsearch (codepoint);
 1115|  34.3k|    if (nonDefault.glyphID)
  ------------------
  |  Branch (1115:9): [True: 19, False: 34.3k]
  ------------------
 1116|     19|    {
 1117|     19|      *glyph = nonDefault.glyphID;
 1118|     19|       return GLYPH_VARIANT_FOUND;
 1119|     19|    }
 1120|  34.3k|    return GLYPH_VARIANT_NOT_FOUND;
 1121|  34.3k|  }
_ZNK2OT23VariationSelectorRecord16collect_unicodesEP8hb_set_tPKv:
 1138|  33.3k|  {
 1139|  33.3k|    (base+defaultUVS).collect_unicodes (out);
 1140|  33.3k|    (base+nonDefaultUVS).collect_unicodes (out);
 1141|  33.3k|  }
_ZNK2OT23VariationSelectorRecord3cmpERKj:
 1152|  1.20k|  { return varSelector.cmp (variation_selector); }
_ZNK2OT23VariationSelectorRecord8sanitizeEP21hb_sanitize_context_tPKv:
 1155|  14.6k|  {
 1156|  14.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  14.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1157|  14.6k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  58.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 14.6k, False: 2]
  |  |  |  Branch (349:45): [True: 14.5k, False: 70]
  |  |  |  Branch (349:45): [True: 14.5k, False: 31]
  |  |  ------------------
  ------------------
 1158|  14.6k|		  defaultUVS.sanitize (c, base) &&
 1159|  14.6k|		  nonDefaultUVS.sanitize (c, base));
 1160|  14.6k|  }
_ZNK2OT20CmapSubtableFormat1417get_glyph_variantEjjPj:
 1215|  34.3k|  { return record.bsearch (variation_selector).get_glyph (codepoint, glyph, this); }
_ZNK2OT20CmapSubtableFormat1427collect_variation_selectorsEP8hb_set_t:
 1218|  33.3k|  {
 1219|  33.3k|    for (const auto& a : record.as_array ())
  ------------------
  |  Branch (1219:24): [True: 3.96k, False: 33.3k]
  ------------------
 1220|  3.96k|      out->add (a.varSelector);
 1221|  33.3k|  }
_ZNK2OT20CmapSubtableFormat1426collect_variation_unicodesEjP8hb_set_t:
 1224|  33.3k|  { record.bsearch (variation_selector).collect_unicodes (out, this); }
_ZNK2OT20CmapSubtableFormat148sanitizeEP21hb_sanitize_context_t:
 1333|  1.16k|  {
 1334|  1.16k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.16k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1335|  1.16k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.32k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.15k, False: 10]
  |  |  |  Branch (349:45): [True: 863, False: 292]
  |  |  ------------------
  ------------------
 1336|  1.16k|		  record.sanitize (c, this));
 1337|  1.16k|  }
_ZNK2OT12CmapSubtable9get_glyphEjPj:
 1355|  2.47M|  {
 1356|  2.47M|    switch (u.format) {
 1357|  2.27M|    case  0: return u.format0 .get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1357:5): [True: 2.27M, False: 198k]
  ------------------
 1358|  36.1k|    case  4: return u.format4 .get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1358:5): [True: 36.1k, False: 2.44M]
  ------------------
 1359|  4.74k|    case  6: return u.format6 .get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1359:5): [True: 4.74k, False: 2.47M]
  ------------------
 1360|  3.64k|    case 10: return u.format10.get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1360:5): [True: 3.64k, False: 2.47M]
  ------------------
 1361|  37.0k|    case 12: return u.format12.get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1361:5): [True: 37.0k, False: 2.43M]
  ------------------
 1362|   109k|    case 13: return u.format13.get_glyph (codepoint, glyph);
  ------------------
  |  Branch (1362:5): [True: 109k, False: 2.36M]
  ------------------
 1363|    791|    case 14:
  ------------------
  |  Branch (1363:5): [True: 791, False: 2.47M]
  ------------------
 1364|  6.86k|    default: return false;
  ------------------
  |  Branch (1364:5): [True: 6.07k, False: 2.47M]
  ------------------
 1365|  2.47M|    }
 1366|  2.47M|  }
_ZNK2OT12CmapSubtable16collect_unicodesEP8hb_set_tj:
 1368|  33.3k|  {
 1369|  33.3k|    switch (u.format) {
 1370|  31.1k|    case  0: u.format0 .collect_unicodes (out); return;
  ------------------
  |  Branch (1370:5): [True: 31.1k, False: 2.19k]
  ------------------
 1371|  1.01k|    case  4: u.format4 .collect_unicodes (out); return;
  ------------------
  |  Branch (1371:5): [True: 1.01k, False: 32.3k]
  ------------------
 1372|     53|    case  6: u.format6 .collect_unicodes (out); return;
  ------------------
  |  Branch (1372:5): [True: 53, False: 33.2k]
  ------------------
 1373|     49|    case 10: u.format10.collect_unicodes (out); return;
  ------------------
  |  Branch (1373:5): [True: 49, False: 33.2k]
  ------------------
 1374|    444|    case 12: u.format12.collect_unicodes (out, num_glyphs); return;
  ------------------
  |  Branch (1374:5): [True: 444, False: 32.8k]
  ------------------
 1375|    553|    case 13: u.format13.collect_unicodes (out, num_glyphs); return;
  ------------------
  |  Branch (1375:5): [True: 553, False: 32.7k]
  ------------------
 1376|     10|    case 14:
  ------------------
  |  Branch (1376:5): [True: 10, False: 33.3k]
  ------------------
 1377|     84|    default: return;
  ------------------
  |  Branch (1377:5): [True: 74, False: 33.2k]
  ------------------
 1378|  33.3k|    }
 1379|  33.3k|  }
_ZNK2OT12CmapSubtable8sanitizeEP21hb_sanitize_context_t:
 1428|  24.6k|  {
 1429|  24.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1430|  24.6k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  8.11k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.11k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1430:9): [True: 8.11k, False: 16.5k]
  ------------------
 1431|  16.5k|    switch (u.format) {
 1432|  2.18k|    case  0: return_trace (u.format0 .sanitize (c));
  ------------------
  |  |  349|  2.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1432:5): [True: 2.18k, False: 14.3k]
  ------------------
 1433|  3.48k|    case  4: return_trace (u.format4 .sanitize (c));
  ------------------
  |  |  349|  3.48k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.48k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1433:5): [True: 3.48k, False: 13.0k]
  ------------------
 1434|    668|    case  6: return_trace (u.format6 .sanitize (c));
  ------------------
  |  |  349|    668|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    668|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1434:5): [True: 668, False: 15.8k]
  ------------------
 1435|    628|    case 10: return_trace (u.format10.sanitize (c));
  ------------------
  |  |  349|    628|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    628|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1435:5): [True: 628, False: 15.8k]
  ------------------
 1436|  1.24k|    case 12: return_trace (u.format12.sanitize (c));
  ------------------
  |  |  349|  1.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1436:5): [True: 1.24k, False: 15.2k]
  ------------------
 1437|  1.17k|    case 13: return_trace (u.format13.sanitize (c));
  ------------------
  |  |  349|  1.17k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1437:5): [True: 1.17k, False: 15.3k]
  ------------------
 1438|  1.16k|    case 14: return_trace (u.format14.sanitize (c));
  ------------------
  |  |  349|  1.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1438:5): [True: 1.16k, False: 15.3k]
  ------------------
 1439|  5.96k|    default:return_trace (true);
  ------------------
  |  |  349|  5.96k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.96k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1439:5): [True: 5.96k, False: 10.5k]
  ------------------
 1440|  16.5k|    }
 1441|  16.5k|  }
_ZNK2OT14EncodingRecord3cmpERKS0_:
 1462|  35.6k|  {
 1463|  35.6k|    int ret;
 1464|  35.6k|    ret = platformID.cmp (other.platformID);
 1465|  35.6k|    if (ret) return ret;
  ------------------
  |  Branch (1465:9): [True: 19.7k, False: 15.8k]
  ------------------
 1466|  15.8k|    ret = encodingID.cmp (other.encodingID);
 1467|  15.8k|    if (ret) return ret;
  ------------------
  |  Branch (1467:9): [True: 12.6k, False: 3.25k]
  ------------------
 1468|  3.25k|    return 0;
 1469|  15.8k|  }
_ZNK2OT14EncodingRecord8sanitizeEP21hb_sanitize_context_tPKv:
 1472|  36.3k|  {
 1473|  36.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  36.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1474|  36.3k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  72.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  36.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 36.3k, False: 9]
  |  |  |  Branch (349:45): [True: 34.4k, False: 1.81k]
  |  |  ------------------
  ------------------
 1475|  36.3k|		  subtable.sanitize (c, base));
 1476|  36.3k|  }
_ZNK2OT4cmap18find_best_subtableEPb:
 1816|  32.8k|  {
 1817|  32.8k|    if (symbol) *symbol = false;
  ------------------
  |  Branch (1817:9): [True: 32.8k, False: 0]
  ------------------
 1818|       |
 1819|  32.8k|    const CmapSubtable *subtable;
 1820|       |
 1821|       |    /* Symbol subtable.
 1822|       |     * Prefer symbol if available.
 1823|       |     * https://github.com/harfbuzz/harfbuzz/issues/1918 */
 1824|  32.8k|    if ((subtable = this->find_subtable (3, 0)))
  ------------------
  |  Branch (1824:9): [True: 709, False: 32.1k]
  ------------------
 1825|    709|    {
 1826|    709|      if (symbol) *symbol = true;
  ------------------
  |  Branch (1826:11): [True: 709, False: 0]
  ------------------
 1827|    709|      return subtable;
 1828|    709|    }
 1829|       |
 1830|       |    /* 32-bit subtables. */
 1831|  32.1k|    if ((subtable = this->find_subtable (3, 10))) return subtable;
  ------------------
  |  Branch (1831:9): [True: 136, False: 31.9k]
  ------------------
 1832|  31.9k|    if ((subtable = this->find_subtable (0, 6))) return subtable;
  ------------------
  |  Branch (1832:9): [True: 22, False: 31.9k]
  ------------------
 1833|  31.9k|    if ((subtable = this->find_subtable (0, 4))) return subtable;
  ------------------
  |  Branch (1833:9): [True: 423, False: 31.5k]
  ------------------
 1834|       |
 1835|       |    /* 16-bit subtables. */
 1836|  31.5k|    if ((subtable = this->find_subtable (3, 1))) return subtable;
  ------------------
  |  Branch (1836:9): [True: 564, False: 30.9k]
  ------------------
 1837|  30.9k|    if ((subtable = this->find_subtable (0, 3))) return subtable;
  ------------------
  |  Branch (1837:9): [True: 325, False: 30.6k]
  ------------------
 1838|  30.6k|    if ((subtable = this->find_subtable (0, 2))) return subtable;
  ------------------
  |  Branch (1838:9): [True: 15, False: 30.6k]
  ------------------
 1839|  30.6k|    if ((subtable = this->find_subtable (0, 1))) return subtable;
  ------------------
  |  Branch (1839:9): [True: 51, False: 30.5k]
  ------------------
 1840|  30.5k|    if ((subtable = this->find_subtable (0, 0))) return subtable;
  ------------------
  |  Branch (1840:9): [True: 244, False: 30.3k]
  ------------------
 1841|       |
 1842|       |    /* Meh. */
 1843|  30.3k|    return &Null (CmapSubtable);
  ------------------
  |  |  124|  30.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1844|  30.5k|  }
_ZN2OT4cmap13accelerator_tC2EP9hb_face_t:
 1851|  32.8k|    {
 1852|  32.8k|      this->table = hb_sanitize_context_t ().reference_table<cmap> (face);
 1853|  32.8k|      bool symbol;
 1854|  32.8k|      this->subtable = table->find_best_subtable (&symbol);
 1855|  32.8k|      this->subtable_uvs = &Null (CmapSubtableFormat14);
  ------------------
  |  |  124|  32.8k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1856|  32.8k|      {
 1857|  32.8k|	const CmapSubtable *st = table->find_subtable (0, 5);
 1858|  32.8k|	if (st && st->u.format == 14)
  ------------------
  |  Branch (1858:6): [True: 193, False: 32.6k]
  |  Branch (1858:12): [True: 184, False: 9]
  ------------------
 1859|    184|	  subtable_uvs = &st->u.format14;
 1860|  32.8k|      }
 1861|       |
 1862|  32.8k|      this->get_glyph_data = subtable;
 1863|  32.8k|      if (unlikely (symbol))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 709, False: 32.1k]
  |  |  ------------------
  ------------------
 1864|    709|      {
 1865|    709|	switch ((unsigned) face->table.OS2->get_font_page ()) {
 1866|    659|	case OS2::font_page_t::FONT_PAGE_NONE:
  ------------------
  |  Branch (1866:2): [True: 659, False: 50]
  ------------------
 1867|    659|	  this->get_glyph_funcZ = get_glyph_from_symbol<CmapSubtable, _hb_symbol_pua_map>;
 1868|    659|	  break;
 1869|      0|#ifndef HB_NO_OT_SHAPER_ARABIC_FALLBACK
 1870|     22|	case OS2::font_page_t::FONT_PAGE_SIMP_ARABIC:
  ------------------
  |  Branch (1870:2): [True: 22, False: 687]
  ------------------
 1871|     22|	  this->get_glyph_funcZ = get_glyph_from_symbol<CmapSubtable, _hb_arabic_pua_simp_map>;
 1872|     22|	  break;
 1873|     26|	case OS2::font_page_t::FONT_PAGE_TRAD_ARABIC:
  ------------------
  |  Branch (1873:2): [True: 26, False: 683]
  ------------------
 1874|     26|	  this->get_glyph_funcZ = get_glyph_from_symbol<CmapSubtable, _hb_arabic_pua_trad_map>;
 1875|     26|	  break;
 1876|      0|#endif
 1877|      2|	default:
  ------------------
  |  Branch (1877:2): [True: 2, False: 707]
  ------------------
 1878|      2|	  this->get_glyph_funcZ = get_glyph_from<CmapSubtable>;
 1879|      2|	  break;
 1880|    709|	}
 1881|    709|      }
 1882|  32.1k|      else
 1883|  32.1k|      {
 1884|  32.1k|	switch (subtable->u.format) {
 1885|       |	/* Accelerate format 4 and format 12. */
 1886|  30.9k|	default:
  ------------------
  |  Branch (1886:2): [True: 30.9k, False: 1.12k]
  ------------------
 1887|  30.9k|	  this->get_glyph_funcZ = get_glyph_from<CmapSubtable>;
 1888|  30.9k|	  break;
 1889|    299|	case 12:
  ------------------
  |  Branch (1889:2): [True: 299, False: 31.8k]
  ------------------
 1890|    299|	  this->get_glyph_funcZ = get_glyph_from<CmapSubtableFormat12>;
 1891|    299|	  break;
 1892|    826|	case  4:
  ------------------
  |  Branch (1892:2): [True: 826, False: 31.2k]
  ------------------
 1893|    826|	{
 1894|    826|	  this->format4_accel.init (&subtable->u.format4);
 1895|    826|	  this->get_glyph_data = &this->format4_accel;
 1896|    826|	  this->get_glyph_funcZ = this->format4_accel.get_glyph_func;
 1897|    826|	  break;
 1898|      0|	}
 1899|  32.1k|	}
 1900|  32.1k|      }
 1901|  32.8k|    }
_ZN2OT4cmap13accelerator_tD2Ev:
 1902|  32.8k|    ~accelerator_t () { this->table.destroy (); }
_ZNK2OT4cmap13accelerator_t11_cached_getEjPjP10hb_cache_tILj21ELj16ELj8ELb1EE:
 1907|  2.72M|    {
 1908|  2.72M|      unsigned v;
 1909|  2.72M|      if (cache && cache->get (unicode, &v))
  ------------------
  |  Branch (1909:11): [True: 2.68M, False: 34.6k]
  |  Branch (1909:20): [True: 96.3k, False: 2.59M]
  ------------------
 1910|  96.3k|      {
 1911|  96.3k|        *glyph = v;
 1912|  96.3k|	return true;
 1913|  96.3k|      }
 1914|  2.62M|      bool ret  = this->get_glyph_funcZ (this->get_glyph_data, unicode, glyph);
 1915|       |
 1916|  2.62M|      if (cache && ret)
  ------------------
  |  Branch (1916:11): [True: 2.59M, False: 34.6k]
  |  Branch (1916:20): [True: 189k, False: 2.40M]
  ------------------
 1917|   189k|        cache->set (unicode, *glyph);
 1918|  2.62M|      return ret;
 1919|  2.72M|    }
_ZNK2OT4cmap13accelerator_t17get_nominal_glyphEjPjP10hb_cache_tILj21ELj16ELj8ELb1EE:
 1924|  2.15M|    {
 1925|  2.15M|      if (unlikely (!this->get_glyph_funcZ)) return 0;
  ------------------
  |  |  259|  2.15M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20.4k, False: 2.13M]
  |  |  ------------------
  ------------------
 1926|  2.13M|      return _cached_get (unicode, glyph, cache);
 1927|  2.15M|    }
_ZNK2OT4cmap13accelerator_t18get_nominal_glyphsEjPKjjPjjP10hb_cache_tILj21ELj16ELj8ELb1EE:
 1935|   570k|    {
 1936|   570k|      if (unlikely (!this->get_glyph_funcZ)) return 0;
  ------------------
  |  |  259|   570k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.12k, False: 565k]
  |  |  ------------------
  ------------------
 1937|       |
 1938|   565k|      unsigned int done;
 1939|   565k|      for (done = 0;
 1940|   615k|	   done < count && _cached_get (*first_unicode, first_glyph, cache);
  ------------------
  |  Branch (1940:5): [True: 589k, False: 26.1k]
  |  Branch (1940:21): [True: 49.7k, False: 539k]
  ------------------
 1941|   565k|	   done++)
 1942|  49.7k|      {
 1943|  49.7k|	first_unicode = &StructAtOffsetUnaligned<hb_codepoint_t> (first_unicode, unicode_stride);
 1944|  49.7k|	first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
 1945|  49.7k|      }
 1946|   565k|      return done;
 1947|   570k|    }
_ZNK2OT4cmap13accelerator_t19get_variation_glyphEjjPjP10hb_cache_tILj21ELj16ELj8ELb1EE:
 1953|  34.3k|    {
 1954|  34.3k|      switch (this->subtable_uvs->get_glyph_variant (unicode,
  ------------------
  |  Branch (1954:15): [True: 0, False: 34.3k]
  ------------------
 1955|  34.3k|						     variation_selector,
 1956|  34.3k|						     glyph))
 1957|  34.3k|      {
 1958|  34.3k|	case GLYPH_VARIANT_NOT_FOUND:	return false;
  ------------------
  |  Branch (1958:2): [True: 34.3k, False: 74]
  ------------------
 1959|     19|	case GLYPH_VARIANT_FOUND:	return true;
  ------------------
  |  Branch (1959:2): [True: 19, False: 34.3k]
  ------------------
 1960|     55|	case GLYPH_VARIANT_USE_DEFAULT:	break;
  ------------------
  |  Branch (1960:2): [True: 55, False: 34.3k]
  ------------------
 1961|  34.3k|      }
 1962|       |
 1963|     55|      return get_nominal_glyph (unicode, glyph, cache);
 1964|  34.3k|    }
_ZNK2OT4cmap13accelerator_t16collect_unicodesEP8hb_set_tj:
 1967|  33.3k|    { subtable->collect_unicodes (out, num_glyphs); }
_ZNK2OT4cmap13accelerator_t27collect_variation_selectorsEP8hb_set_t:
 1972|  33.3k|    { subtable_uvs->collect_variation_selectors (out); }
_ZNK2OT4cmap13accelerator_t26collect_variation_unicodesEjP8hb_set_t:
 1975|  33.3k|    { subtable_uvs->collect_variation_unicodes (variation_selector, out); }
_ZNK2OT4cmap13find_subtableEjj:
 2024|   316k|  {
 2025|   316k|    EncodingRecord key;
 2026|   316k|    key.platformID = platform_id;
 2027|   316k|    key.encodingID = encoding_id;
 2028|       |
 2029|   316k|    const EncodingRecord &result = encodingRecord.bsearch (key);
 2030|   316k|    if (!result.subtable)
  ------------------
  |  Branch (2030:9): [True: 313k, False: 2.68k]
  ------------------
 2031|   313k|      return nullptr;
 2032|       |
 2033|  2.68k|    return &(this+result.subtable);
 2034|   316k|  }
_ZNK2OT4cmap8sanitizeEP21hb_sanitize_context_t:
 2061|  7.01k|  {
 2062|  7.01k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.01k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2063|  7.01k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  27.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.01k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.01k, False: 5]
  |  |  |  Branch (349:45): [True: 6.61k, False: 404]
  |  |  |  Branch (349:45): [True: 4.72k, False: 1.88k]
  |  |  ------------------
  ------------------
 2064|  7.01k|		  likely (version == 0) &&
 2065|  7.01k|		  encodingRecord.sanitize (c, this));
 2066|  7.01k|  }
_ZN2OT18cmap_accelerator_tC2EP9hb_face_t:
 2090|  32.8k|  cmap_accelerator_t (hb_face_t *face) : cmap::accelerator_t (face) {}
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeItLj2EEEE9get_glyphEjPj:
  639|  4.74k|  {
  640|       |    /* Rely on our implicit array bound-checking. */
  641|  4.74k|    hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode];
  642|  4.74k|    if (unlikely (!gid))
  ------------------
  |  |  259|  4.74k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.37k, False: 369]
  |  |  ------------------
  ------------------
  643|  4.37k|      return false;
  644|    369|    *glyph = gid;
  645|    369|    return true;
  646|  4.74k|  }
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeIjLj4EEEE9get_glyphEjPj:
  639|  3.64k|  {
  640|       |    /* Rely on our implicit array bound-checking. */
  641|  3.64k|    hb_codepoint_t gid = glyphIdArray[codepoint - startCharCode];
  642|  3.64k|    if (unlikely (!gid))
  ------------------
  |  |  259|  3.64k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.43k, False: 206]
  |  |  ------------------
  ------------------
  643|  3.43k|      return false;
  644|    206|    *glyph = gid;
  645|    206|    return true;
  646|  3.64k|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat12EE9get_glyphEjPj:
  704|  89.6k|  {
  705|  89.6k|    hb_codepoint_t gid = T::group_get_glyph (groups.bsearch (codepoint), codepoint);
  706|  89.6k|    if (unlikely (!gid))
  ------------------
  |  |  259|  89.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29.6k, False: 59.9k]
  |  |  ------------------
  ------------------
  707|  29.6k|      return false;
  708|  59.9k|    *glyph = gid;
  709|  59.9k|    return true;
  710|  89.6k|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat13EE9get_glyphEjPj:
  704|   109k|  {
  705|   109k|    hb_codepoint_t gid = T::group_get_glyph (groups.bsearch (codepoint), codepoint);
  706|   109k|    if (unlikely (!gid))
  ------------------
  |  |  259|   109k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 27.0k, False: 82.8k]
  |  |  ------------------
  ------------------
  707|  27.0k|      return false;
  708|  82.8k|    *glyph = gid;
  709|  82.8k|    return true;
  710|   109k|  }
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeItLj2EEEE16collect_unicodesEP8hb_set_t:
  654|     53|  {
  655|     53|    hb_codepoint_t start = startCharCode;
  656|     53|    unsigned int count = glyphIdArray.len;
  657|  5.39k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (657:30): [True: 5.33k, False: 53]
  ------------------
  658|  5.33k|      if (glyphIdArray[i])
  ------------------
  |  Branch (658:11): [True: 3.68k, False: 1.64k]
  ------------------
  659|  3.68k|	out->add (start + i);
  660|     53|  }
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeIjLj4EEEE16collect_unicodesEP8hb_set_t:
  654|     49|  {
  655|     49|    hb_codepoint_t start = startCharCode;
  656|     49|    unsigned int count = glyphIdArray.len;
  657|  3.10k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (657:30): [True: 3.05k, False: 49]
  ------------------
  658|  3.05k|      if (glyphIdArray[i])
  ------------------
  |  Branch (658:11): [True: 2.05k, False: 998]
  ------------------
  659|  2.05k|	out->add (start + i);
  660|     49|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat12EE16collect_unicodesEP8hb_set_tj:
  718|    444|  {
  719|  93.5k|    for (unsigned int i = 0; i < this->groups.len; i++)
  ------------------
  |  Branch (719:30): [True: 93.0k, False: 444]
  ------------------
  720|  93.0k|    {
  721|  93.0k|      hb_codepoint_t start = this->groups[i].startCharCode;
  722|  93.0k|      hb_codepoint_t end = hb_min ((hb_codepoint_t) this->groups[i].endCharCode,
  723|  93.0k|				   (hb_codepoint_t) HB_UNICODE_MAX);
  ------------------
  |  |   50|  93.0k|#define HB_UNICODE_MAX 0x10FFFFu
  ------------------
  724|  93.0k|      hb_codepoint_t gid = this->groups[i].glyphID;
  725|  93.0k|      if (!gid)
  ------------------
  |  Branch (725:11): [True: 13.5k, False: 79.5k]
  ------------------
  726|  13.5k|      {
  727|       |	/* Intention is: if (hb_is_same (T, CmapSubtableFormat13)) continue; */
  728|  13.5k|	if (! T::group_get_glyph (this->groups[i], end)) continue;
  ------------------
  |  Branch (728:6): [True: 11.8k, False: 1.60k]
  ------------------
  729|  1.60k|	start++;
  730|  1.60k|	gid++;
  731|  1.60k|      }
  732|  81.1k|      if (unlikely ((unsigned int) gid >= num_glyphs)) continue;
  ------------------
  |  |  259|  81.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 64.7k, False: 16.4k]
  |  |  ------------------
  ------------------
  733|  16.4k|      if (unlikely ((unsigned int) (gid + end - start) >= num_glyphs))
  ------------------
  |  |  259|  16.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.30k, False: 11.1k]
  |  |  ------------------
  ------------------
  734|  5.30k|	end = start + (hb_codepoint_t) num_glyphs - gid;
  735|       |
  736|  16.4k|      out->add_range (start, hb_min (end, 0x10FFFFu));
  737|  16.4k|    }
  738|    444|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat13EE16collect_unicodesEP8hb_set_tj:
  718|    553|  {
  719|  33.9k|    for (unsigned int i = 0; i < this->groups.len; i++)
  ------------------
  |  Branch (719:30): [True: 33.3k, False: 553]
  ------------------
  720|  33.3k|    {
  721|  33.3k|      hb_codepoint_t start = this->groups[i].startCharCode;
  722|  33.3k|      hb_codepoint_t end = hb_min ((hb_codepoint_t) this->groups[i].endCharCode,
  723|  33.3k|				   (hb_codepoint_t) HB_UNICODE_MAX);
  ------------------
  |  |   50|  33.3k|#define HB_UNICODE_MAX 0x10FFFFu
  ------------------
  724|  33.3k|      hb_codepoint_t gid = this->groups[i].glyphID;
  725|  33.3k|      if (!gid)
  ------------------
  |  Branch (725:11): [True: 5.85k, False: 27.5k]
  ------------------
  726|  5.85k|      {
  727|       |	/* Intention is: if (hb_is_same (T, CmapSubtableFormat13)) continue; */
  728|  5.85k|	if (! T::group_get_glyph (this->groups[i], end)) continue;
  ------------------
  |  Branch (728:6): [True: 5.85k, False: 0]
  ------------------
  729|      0|	start++;
  730|      0|	gid++;
  731|      0|      }
  732|  27.5k|      if (unlikely ((unsigned int) gid >= num_glyphs)) continue;
  ------------------
  |  |  259|  27.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24.2k, False: 3.29k]
  |  |  ------------------
  ------------------
  733|  3.29k|      if (unlikely ((unsigned int) (gid + end - start) >= num_glyphs))
  ------------------
  |  |  259|  3.29k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.62k, False: 679]
  |  |  ------------------
  ------------------
  734|  2.62k|	end = start + (hb_codepoint_t) num_glyphs - gid;
  735|       |
  736|  3.29k|      out->add_range (start, hb_min (end, 0x10FFFFu));
  737|  3.29k|    }
  738|    553|  }
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  678|    668|  {
  679|    668|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    668|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  680|    668|    return_trace (c->check_struct (this) && glyphIdArray.sanitize (c));
  ------------------
  |  |  349|  1.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    668|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 634, False: 34]
  |  |  |  Branch (349:45): [True: 595, False: 39]
  |  |  ------------------
  ------------------
  681|    668|  }
_ZNK2OT19CmapSubtableTrimmedINS_7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  678|    628|  {
  679|    628|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    628|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  680|    628|    return_trace (c->check_struct (this) && glyphIdArray.sanitize (c));
  ------------------
  |  |  349|  1.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    628|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 613, False: 15]
  |  |  |  Branch (349:45): [True: 474, False: 139]
  |  |  ------------------
  ------------------
  681|    628|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat12EE8sanitizeEP21hb_sanitize_context_t:
  780|  1.24k|  {
  781|  1.24k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.24k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  782|  1.24k|    return_trace (c->check_struct (this) && groups.sanitize (c));
  ------------------
  |  |  349|  2.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.21k, False: 38]
  |  |  |  Branch (349:45): [True: 984, False: 227]
  |  |  ------------------
  ------------------
  783|  1.24k|  }
_ZNK2OT25CmapSubtableLongSegmentedINS_20CmapSubtableFormat13EE8sanitizeEP21hb_sanitize_context_t:
  780|  1.17k|  {
  781|  1.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  782|  1.17k|    return_trace (c->check_struct (this) && groups.sanitize (c));
  ------------------
  |  |  349|  2.31k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.14k, False: 22]
  |  |  |  Branch (349:45): [True: 893, False: 255]
  |  |  ------------------
  ------------------
  783|  1.17k|  }
_ZN2OT4cmap13accelerator_t14get_glyph_fromINS_12CmapSubtableEEEbPKvjPj:
 1987|  2.35M|    {
 1988|  2.35M|      const Type *typed_obj = (const Type *) obj;
 1989|  2.35M|      return typed_obj->get_glyph (codepoint, glyph);
 1990|  2.35M|    }
_ZN2OT4cmap13accelerator_t14get_glyph_fromINS_20CmapSubtableFormat12EEEbPKvjPj:
 1987|  52.6k|    {
 1988|  52.6k|      const Type *typed_obj = (const Type *) obj;
 1989|  52.6k|      return typed_obj->get_glyph (codepoint, glyph);
 1990|  52.6k|    }
hb-face.cc:_ZN2OT4cmap13accelerator_t21get_glyph_from_symbolINS_12CmapSubtableEXadL_ZNS_L18_hb_symbol_pua_mapEjEEEEbPKvjPj:
 1996|  99.4k|    {
 1997|  99.4k|      const Type *typed_obj = (const Type *) obj;
 1998|  99.4k|      if (likely (typed_obj->get_glyph (codepoint, glyph)))
  ------------------
  |  |  258|  99.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 69.3k, False: 30.1k]
  |  |  ------------------
  ------------------
 1999|  69.3k|	return true;
 2000|       |
 2001|  30.1k|      if (hb_codepoint_t c = remap (codepoint))
  ------------------
  |  Branch (2001:26): [True: 14.3k, False: 15.7k]
  ------------------
 2002|  14.3k|	return typed_obj->get_glyph (c, glyph);
 2003|       |
 2004|  15.7k|      return false;
 2005|  30.1k|    }
hb-face.cc:_ZN2OTL18_hb_symbol_pua_mapEj:
 1600|  30.1k|{
 1601|  30.1k|  if (codepoint <= 0x00FFu)
  ------------------
  |  Branch (1601:7): [True: 14.3k, False: 15.7k]
  ------------------
 1602|  14.3k|  {
 1603|       |    /* For symbol-encoded OpenType fonts, we duplicate the
 1604|       |     * U+F000..F0FF range at U+0000..U+00FF.  That's what
 1605|       |     * Windows seems to do, and that's hinted about at:
 1606|       |     * https://docs.microsoft.com/en-us/typography/opentype/spec/recom
 1607|       |     * under "Non-Standard (Symbol) Fonts". */
 1608|  14.3k|    return 0xF000u + codepoint;
 1609|  14.3k|  }
 1610|  15.7k|  return 0;
 1611|  30.1k|}
hb-face.cc:_ZN2OT4cmap13accelerator_t21get_glyph_from_symbolINS_12CmapSubtableEXadL_ZL23_hb_arabic_pua_simp_mapjEEEEbPKvjPj:
 1996|  3.45k|    {
 1997|  3.45k|      const Type *typed_obj = (const Type *) obj;
 1998|  3.45k|      if (likely (typed_obj->get_glyph (codepoint, glyph)))
  ------------------
  |  |  258|  3.45k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.39k, False: 2.06k]
  |  |  ------------------
  ------------------
 1999|  1.39k|	return true;
 2000|       |
 2001|  2.06k|      if (hb_codepoint_t c = remap (codepoint))
  ------------------
  |  Branch (2001:26): [True: 648, False: 1.41k]
  ------------------
 2002|    648|	return typed_obj->get_glyph (c, glyph);
 2003|       |
 2004|  1.41k|      return false;
 2005|  2.06k|    }
hb-face.cc:_ZN2OT4cmap13accelerator_t21get_glyph_from_symbolINS_12CmapSubtableEXadL_ZL23_hb_arabic_pua_trad_mapjEEEEbPKvjPj:
 1996|  3.06k|    {
 1997|  3.06k|      const Type *typed_obj = (const Type *) obj;
 1998|  3.06k|      if (likely (typed_obj->get_glyph (codepoint, glyph)))
  ------------------
  |  |  258|  3.06k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 911, False: 2.15k]
  |  |  ------------------
  ------------------
 1999|    911|	return true;
 2000|       |
 2001|  2.15k|      if (hb_codepoint_t c = remap (codepoint))
  ------------------
  |  Branch (2001:26): [True: 564, False: 1.58k]
  ------------------
 2002|    564|	return typed_obj->get_glyph (c, glyph);
 2003|       |
 2004|  1.58k|      return false;
 2005|  2.15k|    }

hb_ot_color_has_palettes:
   70|  33.3k|{
   71|  33.3k|  return face->table.CPAL->has_data ();
   72|  33.3k|}
hb_ot_color_palette_get_count:
   86|  33.3k|{
   87|  33.3k|  return face->table.CPAL->get_palette_count ();
   88|  33.3k|}
hb_ot_color_palette_get_name_id:
  109|  33.3k|{
  110|  33.3k|  return face->table.CPAL->get_palette_name_id (palette_index);
  111|  33.3k|}
hb_ot_color_palette_color_get_name_id:
  131|  33.3k|{
  132|  33.3k|  return face->table.CPAL->get_color_name_id (color_index);
  133|  33.3k|}
hb_ot_color_palette_get_flags:
  149|  33.3k|{
  150|  33.3k|  return face->table.CPAL->get_palette_flags (palette_index);
  151|  33.3k|}
hb_ot_color_palette_get_colors:
  184|  80.9k|{
  185|  80.9k|  return face->table.CPAL->get_palette_colors (palette_index, start_offset, colors_count, colors);
  186|  80.9k|}
hb_ot_color_has_layers:
  206|  33.3k|{
  207|  33.3k|  return face->table.COLR->has_v0_data ();
  208|  33.3k|}
hb_ot_color_glyph_get_layers:
  268|  33.3k|{
  269|  33.3k|  return face->table.COLR->get_glyph_layers (glyph, start_offset, layer_count, layers);
  270|  33.3k|}
hb_ot_color_has_svg:
  289|  33.3k|{
  290|  33.3k|  return face->table.SVG->has_data ();
  291|  33.3k|}
hb_ot_color_glyph_reference_svg:
  308|  33.3k|{
  309|  33.3k|  return face->table.SVG->reference_blob_for_glyph (glyph);
  310|  33.3k|}
hb_ot_color_has_png:
  329|  33.3k|{
  330|  33.3k|  return face->table.CBDT->has_data () || face->table.sbix->has_data ();
  ------------------
  |  Branch (330:10): [True: 114, False: 33.2k]
  |  Branch (330:43): [True: 178, False: 33.0k]
  ------------------
  331|  33.3k|}
hb_ot_color_glyph_reference_png:
  350|  33.3k|{
  351|  33.3k|  hb_blob_t *blob = hb_blob_get_empty ();
  352|       |
  353|  33.3k|  if (font->face->table.sbix->has_data ())
  ------------------
  |  Branch (353:7): [True: 178, False: 33.1k]
  ------------------
  354|    178|    blob = font->face->table.sbix->reference_png (font, glyph, nullptr, nullptr, nullptr);
  355|       |
  356|  33.3k|  if (!blob->length && font->face->table.CBDT->has_data ())
  ------------------
  |  Branch (356:7): [True: 33.3k, False: 12]
  |  Branch (356:24): [True: 114, False: 33.2k]
  ------------------
  357|    114|    blob = font->face->table.CBDT->reference_png (font, glyph);
  358|       |
  359|  33.3k|  return blob;
  360|  33.3k|}

_ZN12hb_ot_face_t5init0EP9hb_face_t:
   47|  33.3k|{
   48|  33.3k|  this->face = face;
   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
   50|  33.3k|#include "hb-ot-face-table-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2007,2008,2009  Red Hat, Inc.
  |  |    3|       | * Copyright © 2012,2013  Google, Inc.
  |  |    4|       | * Copyright © 2019, Facebook Inc.
  |  |    5|       | *
  |  |    6|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    7|       | *
  |  |    8|       | * Permission is hereby granted, without written agreement and without
  |  |    9|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |   10|       | * software and its documentation for any purpose, provided that the
  |  |   11|       | * above copyright notice and the following two paragraphs appear in
  |  |   12|       | * all copies of this software.
  |  |   13|       | *
  |  |   14|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   15|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   16|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   17|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   18|       | * DAMAGE.
  |  |   19|       | *
  |  |   20|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   21|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   22|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   23|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   24|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   25|       | *
  |  |   26|       | * Red Hat Author(s): Behdad Esfahbod
  |  |   27|       | * Google Author(s): Behdad Esfahbod
  |  |   28|       | * Facebook Author(s): Behdad Esfahbod
  |  |   29|       | */
  |  |   30|       |
  |  |   31|       |#ifndef HB_OT_FACE_TABLE_LIST_HH
  |  |   32|       |#define HB_OT_FACE_TABLE_LIST_HH
  |  |   33|       |#endif /* HB_OT_FACE_TABLE_LIST_HH */ /* Dummy header guards */
  |  |   34|       |
  |  |   35|  33.3k|#ifndef HB_OT_CORE_TABLE
  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |   37|  33.3k|#define _HB_OT_CORE_TABLE_UNDEF
  |  |   38|  33.3k|#endif
  |  |   39|       |
  |  |   40|  33.3k|#ifndef HB_OT_ACCELERATOR
  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |   42|  33.3k|#define _HB_OT_ACCELERATOR_UNDEF
  |  |   43|  33.3k|#endif
  |  |   44|       |
  |  |   45|       |
  |  |   46|       |/* This lists font tables that the hb_face_t will contain and lazily
  |  |   47|       | * load.  Don't add a table unless it's used though.  This is not
  |  |   48|       | * exactly zero-cost. */
  |  |   49|       |
  |  |   50|       |/* v--- Add new tables in the right place here. */
  |  |   51|       |
  |  |   52|       |
  |  |   53|       |/* OpenType fundamentals. */
  |  |   54|  33.3k|HB_OT_CORE_TABLE (OT, head)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  33.3k|HB_OT_CORE_TABLE (OT, maxp)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  33.3k|#if !defined(HB_NO_FACE_COLLECT_UNICODES) || !defined(HB_NO_OT_FONT)
  |  |   57|  33.3k|HB_OT_ACCELERATOR (OT, cmap)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  33.3k|#endif
  |  |   59|  33.3k|HB_OT_CORE_TABLE (OT, hhea)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  33.3k|HB_OT_ACCELERATOR (OT, hmtx)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  33.3k|HB_OT_CORE_TABLE (OT, OS2)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  33.3k|#if !defined(HB_NO_OT_FONT_GLYPH_NAMES) || !defined(HB_NO_METRICS) || !defined(HB_NO_STYLE)
  |  |   63|  33.3k|HB_OT_ACCELERATOR (OT, post)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|  33.3k|#endif
  |  |   65|  33.3k|#ifndef HB_NO_NAME
  |  |   66|  33.3k|HB_OT_ACCELERATOR (OT, name)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|  33.3k|#endif
  |  |   68|  33.3k|#ifndef HB_NO_STYLE
  |  |   69|  33.3k|HB_OT_CORE_TABLE (OT, STAT)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|  33.3k|#endif
  |  |   71|  33.3k|#ifndef HB_NO_META
  |  |   72|  33.3k|HB_OT_ACCELERATOR (OT, meta)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  33.3k|#endif
  |  |   74|       |
  |  |   75|       |/* Vertical layout. */
  |  |   76|  33.3k|#ifndef HB_NO_VERTICAL
  |  |   77|  33.3k|HB_OT_CORE_TABLE (OT, vhea)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  33.3k|HB_OT_ACCELERATOR (OT, vmtx)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  33.3k|HB_OT_CORE_TABLE (OT, VORG)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  33.3k|#endif
  |  |   81|       |
  |  |   82|       |/* TrueType outlines. */
  |  |   83|  33.3k|HB_OT_CORE_TABLE (OT, loca) // Also used to determine number of glyphs
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  33.3k|HB_OT_ACCELERATOR (OT, glyf)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|       |
  |  |   86|       |/* CFF outlines. */
  |  |   87|  33.3k|#ifndef HB_NO_CFF
  |  |   88|  33.3k|HB_OT_ACCELERATOR (OT, cff1)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  33.3k|HB_OT_ACCELERATOR (OT, cff2)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  33.3k|#endif
  |  |   91|       |
  |  |   92|       |/* OpenType variations. */
  |  |   93|  33.3k|#ifndef HB_NO_VAR
  |  |   94|  33.3k|HB_OT_CORE_TABLE (OT, fvar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  33.3k|HB_OT_CORE_TABLE (OT, avar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  33.3k|HB_OT_CORE_TABLE (OT, cvar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|  33.3k|HB_OT_ACCELERATOR (OT, gvar)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|  33.3k|HB_OT_CORE_TABLE (OT, MVAR)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|  33.3k|#endif
  |  |  100|       |
  |  |  101|       |/* Legacy kern. */
  |  |  102|  33.3k|#ifndef HB_NO_OT_KERN
  |  |  103|  33.3k|HB_OT_CORE_TABLE (OT, kern)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  104|  33.3k|#endif
  |  |  105|       |
  |  |  106|       |/* OpenType shaping. */
  |  |  107|  33.3k|#ifndef HB_NO_OT_LAYOUT
  |  |  108|  33.3k|HB_OT_ACCELERATOR (OT, GDEF)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|  33.3k|HB_OT_ACCELERATOR (OT, GSUB)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  110|  33.3k|HB_OT_ACCELERATOR (OT, GPOS)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|       |//HB_OT_CORE_TABLE (OT, JSTF)
  |  |  112|  33.3k|#endif
  |  |  113|       |
  |  |  114|       |/* OpenType baseline. */
  |  |  115|  33.3k|#ifndef HB_NO_BASE
  |  |  116|  33.3k|HB_OT_CORE_TABLE (OT, BASE)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  33.3k|#endif
  |  |  118|       |
  |  |  119|       |/* AAT shaping. */
  |  |  120|  33.3k|#ifndef HB_NO_AAT
  |  |  121|  33.3k|HB_OT_TABLE (AAT, morx)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  122|  33.3k|HB_OT_TABLE (AAT, mort)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  123|  33.3k|HB_OT_TABLE (AAT, kerx)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  124|  33.3k|HB_OT_TABLE (AAT, ankr)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  125|  33.3k|HB_OT_TABLE (AAT, trak)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  126|  33.3k|HB_OT_TABLE (AAT, ltag)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  127|  33.3k|HB_OT_TABLE (AAT, feat)
  |  |  ------------------
  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  ------------------
  |  |  128|       |// HB_OT_TABLE (AAT, opbd)
  |  |  129|  33.3k|#endif
  |  |  130|       |
  |  |  131|       |/* OpenType color fonts. */
  |  |  132|  33.3k|#ifndef HB_NO_COLOR
  |  |  133|  33.3k|HB_OT_CORE_TABLE (OT, COLR)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  33.3k|HB_OT_CORE_TABLE (OT, CPAL)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  33.3k|HB_OT_ACCELERATOR (OT, CBDT)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|  33.3k|HB_OT_ACCELERATOR (OT, sbix)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  137|  33.3k|HB_OT_ACCELERATOR (OT, SVG)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|  33.3k|#endif
  |  |  139|       |
  |  |  140|       |/* OpenType math. */
  |  |  141|  33.3k|#ifndef HB_NO_MATH
  |  |  142|  33.3k|HB_OT_CORE_TABLE (OT, MATH)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.init0 ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  143|  33.3k|#endif
  |  |  144|       |
  |  |  145|       |
  |  |  146|  33.3k|#ifdef _HB_OT_ACCELERATOR_UNDEF
  |  |  147|  33.3k|#undef HB_OT_ACCELERATOR
  |  |  148|  33.3k|#endif
  |  |  149|       |
  |  |  150|  33.3k|#ifdef _HB_OT_CORE_TABLE_UNDEF
  |  |  151|  33.3k|#undef HB_OT_CORE_TABLE
  |  |  152|  33.3k|#endif
  ------------------
   51|  33.3k|#undef HB_OT_TABLE
   52|  33.3k|}
_ZN12hb_ot_face_t4finiEv:
   54|  33.3k|{
   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
   56|  33.3k|#include "hb-ot-face-table-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2007,2008,2009  Red Hat, Inc.
  |  |    3|       | * Copyright © 2012,2013  Google, Inc.
  |  |    4|       | * Copyright © 2019, Facebook Inc.
  |  |    5|       | *
  |  |    6|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    7|       | *
  |  |    8|       | * Permission is hereby granted, without written agreement and without
  |  |    9|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |   10|       | * software and its documentation for any purpose, provided that the
  |  |   11|       | * above copyright notice and the following two paragraphs appear in
  |  |   12|       | * all copies of this software.
  |  |   13|       | *
  |  |   14|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   15|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   16|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   17|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   18|       | * DAMAGE.
  |  |   19|       | *
  |  |   20|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   21|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   22|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   23|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   24|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   25|       | *
  |  |   26|       | * Red Hat Author(s): Behdad Esfahbod
  |  |   27|       | * Google Author(s): Behdad Esfahbod
  |  |   28|       | * Facebook Author(s): Behdad Esfahbod
  |  |   29|       | */
  |  |   30|       |
  |  |   31|       |#ifndef HB_OT_FACE_TABLE_LIST_HH
  |  |   32|       |#define HB_OT_FACE_TABLE_LIST_HH
  |  |   33|       |#endif /* HB_OT_FACE_TABLE_LIST_HH */ /* Dummy header guards */
  |  |   34|       |
  |  |   35|  33.3k|#ifndef HB_OT_CORE_TABLE
  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |   37|  33.3k|#define _HB_OT_CORE_TABLE_UNDEF
  |  |   38|  33.3k|#endif
  |  |   39|       |
  |  |   40|  33.3k|#ifndef HB_OT_ACCELERATOR
  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |   42|  33.3k|#define _HB_OT_ACCELERATOR_UNDEF
  |  |   43|  33.3k|#endif
  |  |   44|       |
  |  |   45|       |
  |  |   46|       |/* This lists font tables that the hb_face_t will contain and lazily
  |  |   47|       | * load.  Don't add a table unless it's used though.  This is not
  |  |   48|       | * exactly zero-cost. */
  |  |   49|       |
  |  |   50|       |/* v--- Add new tables in the right place here. */
  |  |   51|       |
  |  |   52|       |
  |  |   53|       |/* OpenType fundamentals. */
  |  |   54|  33.3k|HB_OT_CORE_TABLE (OT, head)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  33.3k|HB_OT_CORE_TABLE (OT, maxp)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|  33.3k|#if !defined(HB_NO_FACE_COLLECT_UNICODES) || !defined(HB_NO_OT_FONT)
  |  |   57|  33.3k|HB_OT_ACCELERATOR (OT, cmap)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  33.3k|#endif
  |  |   59|  33.3k|HB_OT_CORE_TABLE (OT, hhea)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  33.3k|HB_OT_ACCELERATOR (OT, hmtx)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  33.3k|HB_OT_CORE_TABLE (OT, OS2)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  33.3k|#if !defined(HB_NO_OT_FONT_GLYPH_NAMES) || !defined(HB_NO_METRICS) || !defined(HB_NO_STYLE)
  |  |   63|  33.3k|HB_OT_ACCELERATOR (OT, post)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|  33.3k|#endif
  |  |   65|  33.3k|#ifndef HB_NO_NAME
  |  |   66|  33.3k|HB_OT_ACCELERATOR (OT, name)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|  33.3k|#endif
  |  |   68|  33.3k|#ifndef HB_NO_STYLE
  |  |   69|  33.3k|HB_OT_CORE_TABLE (OT, STAT)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|  33.3k|#endif
  |  |   71|  33.3k|#ifndef HB_NO_META
  |  |   72|  33.3k|HB_OT_ACCELERATOR (OT, meta)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  33.3k|#endif
  |  |   74|       |
  |  |   75|       |/* Vertical layout. */
  |  |   76|  33.3k|#ifndef HB_NO_VERTICAL
  |  |   77|  33.3k|HB_OT_CORE_TABLE (OT, vhea)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  33.3k|HB_OT_ACCELERATOR (OT, vmtx)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  33.3k|HB_OT_CORE_TABLE (OT, VORG)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  33.3k|#endif
  |  |   81|       |
  |  |   82|       |/* TrueType outlines. */
  |  |   83|  33.3k|HB_OT_CORE_TABLE (OT, loca) // Also used to determine number of glyphs
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  33.3k|HB_OT_ACCELERATOR (OT, glyf)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|       |
  |  |   86|       |/* CFF outlines. */
  |  |   87|  33.3k|#ifndef HB_NO_CFF
  |  |   88|  33.3k|HB_OT_ACCELERATOR (OT, cff1)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  33.3k|HB_OT_ACCELERATOR (OT, cff2)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  33.3k|#endif
  |  |   91|       |
  |  |   92|       |/* OpenType variations. */
  |  |   93|  33.3k|#ifndef HB_NO_VAR
  |  |   94|  33.3k|HB_OT_CORE_TABLE (OT, fvar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  33.3k|HB_OT_CORE_TABLE (OT, avar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  33.3k|HB_OT_CORE_TABLE (OT, cvar)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|  33.3k|HB_OT_ACCELERATOR (OT, gvar)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|  33.3k|HB_OT_CORE_TABLE (OT, MVAR)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|  33.3k|#endif
  |  |  100|       |
  |  |  101|       |/* Legacy kern. */
  |  |  102|  33.3k|#ifndef HB_NO_OT_KERN
  |  |  103|  33.3k|HB_OT_CORE_TABLE (OT, kern)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  104|  33.3k|#endif
  |  |  105|       |
  |  |  106|       |/* OpenType shaping. */
  |  |  107|  33.3k|#ifndef HB_NO_OT_LAYOUT
  |  |  108|  33.3k|HB_OT_ACCELERATOR (OT, GDEF)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|  33.3k|HB_OT_ACCELERATOR (OT, GSUB)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  110|  33.3k|HB_OT_ACCELERATOR (OT, GPOS)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|       |//HB_OT_CORE_TABLE (OT, JSTF)
  |  |  112|  33.3k|#endif
  |  |  113|       |
  |  |  114|       |/* OpenType baseline. */
  |  |  115|  33.3k|#ifndef HB_NO_BASE
  |  |  116|  33.3k|HB_OT_CORE_TABLE (OT, BASE)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  33.3k|#endif
  |  |  118|       |
  |  |  119|       |/* AAT shaping. */
  |  |  120|  33.3k|#ifndef HB_NO_AAT
  |  |  121|  33.3k|HB_OT_TABLE (AAT, morx)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  122|  33.3k|HB_OT_TABLE (AAT, mort)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  123|  33.3k|HB_OT_TABLE (AAT, kerx)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  124|  33.3k|HB_OT_TABLE (AAT, ankr)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  125|  33.3k|HB_OT_TABLE (AAT, trak)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  126|  33.3k|HB_OT_TABLE (AAT, ltag)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  127|  33.3k|HB_OT_TABLE (AAT, feat)
  |  |  ------------------
  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  ------------------
  |  |  128|       |// HB_OT_TABLE (AAT, opbd)
  |  |  129|  33.3k|#endif
  |  |  130|       |
  |  |  131|       |/* OpenType color fonts. */
  |  |  132|  33.3k|#ifndef HB_NO_COLOR
  |  |  133|  33.3k|HB_OT_CORE_TABLE (OT, COLR)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  33.3k|HB_OT_CORE_TABLE (OT, CPAL)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|  33.3k|HB_OT_ACCELERATOR (OT, CBDT)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|  33.3k|HB_OT_ACCELERATOR (OT, sbix)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  137|  33.3k|HB_OT_ACCELERATOR (OT, SVG)
  |  |  ------------------
  |  |  |  |   41|  33.3k|#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  138|  33.3k|#endif
  |  |  139|       |
  |  |  140|       |/* OpenType math. */
  |  |  141|  33.3k|#ifndef HB_NO_MATH
  |  |  142|  33.3k|HB_OT_CORE_TABLE (OT, MATH)
  |  |  ------------------
  |  |  |  |   36|  33.3k|#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  33.3k|#define HB_OT_TABLE(Namespace, Type) Type.fini ();
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  143|  33.3k|#endif
  |  |  144|       |
  |  |  145|       |
  |  |  146|  33.3k|#ifdef _HB_OT_ACCELERATOR_UNDEF
  |  |  147|  33.3k|#undef HB_OT_ACCELERATOR
  |  |  148|  33.3k|#endif
  |  |  149|       |
  |  |  150|  33.3k|#ifdef _HB_OT_CORE_TABLE_UNDEF
  |  |  151|  33.3k|#undef HB_OT_CORE_TABLE
  |  |  152|  33.3k|#endif
  ------------------
   57|  33.3k|#undef HB_OT_TABLE
   58|  33.3k|}

hb_ot_font_set_funcs:
  643|   100k|{
  644|   100k|  hb_ot_font_t *ot_font = _hb_ot_font_create (font);
  645|   100k|  if (unlikely (!ot_font))
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.37k, False: 98.6k]
  |  |  ------------------
  ------------------
  646|  1.37k|    return;
  647|       |
  648|  98.6k|  hb_font_set_funcs (font,
  649|  98.6k|		     _hb_ot_get_font_funcs (),
  650|  98.6k|		     ot_font,
  651|  98.6k|		     _hb_ot_font_destroy);
  652|  98.6k|}
hb-ot-font.cc:_ZL18_hb_ot_font_createP9hb_font_t:
   86|   100k|{
   87|   100k|  hb_ot_font_t *ot_font = (hb_ot_font_t *) hb_calloc (1, sizeof (hb_ot_font_t));
  ------------------
  |  |  234|   100k|#define hb_calloc hb_calloc_impl
  ------------------
   88|   100k|  if (unlikely (!ot_font))
  ------------------
  |  |  259|   100k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.37k, False: 98.6k]
  |  |  ------------------
  ------------------
   89|  1.37k|    return nullptr;
   90|       |
   91|  98.6k|  ot_font->ot_face = &font->face->table;
   92|       |
   93|  98.6k|#ifndef HB_NO_OT_FONT_CMAP_CACHE
   94|       |  // retry:
   95|  98.6k|  auto *cmap_cache  = (hb_ot_font_cmap_cache_t *) hb_face_get_user_data (font->face,
   96|  98.6k|									 &hb_ot_font_cmap_cache_user_data_key);
   97|  98.6k|  if (!cmap_cache)
  ------------------
  |  Branch (97:7): [True: 35.6k, False: 63.0k]
  ------------------
   98|  35.6k|  {
   99|  35.6k|    cmap_cache = (hb_ot_font_cmap_cache_t *) hb_malloc (sizeof (hb_ot_font_cmap_cache_t));
  ------------------
  |  |  233|  35.6k|#define hb_malloc hb_malloc_impl
  ------------------
  100|  35.6k|    if (unlikely (!cmap_cache)) goto out;
  ------------------
  |  |  259|  35.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 732, False: 34.8k]
  |  |  ------------------
  ------------------
  101|  34.8k|    cmap_cache->init ();
  102|  34.8k|    if (unlikely (!hb_face_set_user_data (font->face,
  ------------------
  |  |  259|  34.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.28k, False: 32.6k]
  |  |  ------------------
  ------------------
  103|  34.8k|					  &hb_ot_font_cmap_cache_user_data_key,
  104|  34.8k|					  cmap_cache,
  105|  34.8k|					  hb_free,
  106|  34.8k|					  false)))
  107|  2.28k|    {
  108|  2.28k|      hb_free (cmap_cache);
  ------------------
  |  |  236|  2.28k|#define hb_free hb_free_impl
  ------------------
  109|  2.28k|      cmap_cache = nullptr;
  110|       |      /* Normally we would retry here, but that would
  111|       |       * infinite-loop if the face is the empty-face.
  112|       |       * Just let it go and this font will be uncached if it
  113|       |       * happened to collide with another thread creating the
  114|       |       * cache at the same time. */
  115|       |      // goto retry;
  116|  2.28k|    }
  117|  34.8k|  }
  118|  98.6k|  out:
  119|  98.6k|  ot_font->cmap_cache = cmap_cache;
  120|  98.6k|#endif
  121|       |
  122|  98.6k|  return ot_font;
  123|  98.6k|}
hb-ot-font.cc:_ZL21_hb_ot_get_font_funcsv:
  628|  98.6k|{
  629|  98.6k|  return static_ot_funcs.get_unconst ();
  630|  98.6k|}
_ZN30hb_ot_font_funcs_lazy_loader_t6createEv:
  579|      1|  {
  580|      1|    hb_font_funcs_t *funcs = hb_font_funcs_create ();
  581|       |
  582|      1|    hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, nullptr, nullptr);
  583|      1|    hb_font_funcs_set_nominal_glyphs_func (funcs, hb_ot_get_nominal_glyphs, nullptr, nullptr);
  584|      1|    hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, nullptr, nullptr);
  585|       |
  586|      1|    hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, nullptr, nullptr);
  587|      1|    hb_font_funcs_set_glyph_h_advances_func (funcs, hb_ot_get_glyph_h_advances, nullptr, nullptr);
  588|       |    //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, nullptr, nullptr);
  589|       |
  590|      1|#ifndef HB_NO_VERTICAL
  591|      1|    hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, nullptr, nullptr);
  592|      1|    hb_font_funcs_set_glyph_v_advances_func (funcs, hb_ot_get_glyph_v_advances, nullptr, nullptr);
  593|      1|    hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
  594|      1|#endif
  595|       |
  596|      1|#ifndef HB_NO_DRAW
  597|      1|    hb_font_funcs_set_draw_glyph_func (funcs, hb_ot_draw_glyph, nullptr, nullptr);
  598|      1|#endif
  599|       |
  600|      1|#ifndef HB_NO_PAINT
  601|      1|    hb_font_funcs_set_paint_glyph_func (funcs, hb_ot_paint_glyph, nullptr, nullptr);
  602|      1|#endif
  603|       |
  604|      1|    hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
  605|       |    //hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
  606|       |
  607|      1|#ifndef HB_NO_OT_FONT_GLYPH_NAMES
  608|      1|    hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, nullptr, nullptr);
  609|      1|    hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, nullptr, nullptr);
  610|      1|#endif
  611|       |
  612|      1|    hb_font_funcs_make_immutable (funcs);
  613|       |
  614|      1|    hb_atexit (free_static_ot_funcs);
  ------------------
  |  |  466|      1|#    define hb_atexit atexit
  ------------------
  615|       |
  616|      1|    return funcs;
  617|      1|  }
hb-ot-font.cc:_ZL23hb_ot_get_nominal_glyphP9hb_font_tPvjPjS1_:
  142|  2.15M|{
  143|  2.15M|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  144|  2.15M|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  145|  2.15M|  hb_ot_font_cmap_cache_t *cmap_cache = nullptr;
  146|  2.15M|#ifndef HB_NO_OT_FONT_CMAP_CACHE
  147|  2.15M|  cmap_cache = ot_font->cmap_cache;
  148|  2.15M|#endif
  149|  2.15M|  return ot_face->cmap->get_nominal_glyph (unicode, glyph, cmap_cache);
  150|  2.15M|}
hb-ot-font.cc:_ZL24hb_ot_get_nominal_glyphsP9hb_font_tPvjPKjjPjjS1_:
  161|   570k|{
  162|   570k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  163|   570k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  164|   570k|  hb_ot_font_cmap_cache_t *cmap_cache = nullptr;
  165|   570k|#ifndef HB_NO_OT_FONT_CMAP_CACHE
  166|   570k|  cmap_cache = ot_font->cmap_cache;
  167|   570k|#endif
  168|   570k|  return ot_face->cmap->get_nominal_glyphs (count,
  169|   570k|					    first_unicode, unicode_stride,
  170|   570k|					    first_glyph, glyph_stride,
  171|   570k|					    cmap_cache);
  172|   570k|}
hb-ot-font.cc:_ZL25hb_ot_get_variation_glyphP9hb_font_tPvjjPjS1_:
  181|  34.3k|{
  182|  34.3k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  183|  34.3k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  184|  34.3k|  hb_ot_font_cmap_cache_t *cmap_cache = nullptr;
  185|  34.3k|#ifndef HB_NO_OT_FONT_CMAP_CACHE
  186|  34.3k|  cmap_cache = ot_font->cmap_cache;
  187|  34.3k|#endif
  188|  34.3k|  return ot_face->cmap->get_variation_glyph (unicode,
  189|  34.3k|                                             variation_selector, glyph,
  190|  34.3k|                                             cmap_cache);
  191|  34.3k|}
hb-ot-font.cc:_ZL24hb_ot_get_font_h_extentsP9hb_font_tPvP17hb_font_extents_tS1_:
  486|  66.2k|{
  487|  66.2k|  bool ret = _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER, &metrics->ascender) &&
  ------------------
  |  Branch (487:14): [True: 2.61k, False: 63.5k]
  ------------------
  488|  66.2k|	     _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER, &metrics->descender) &&
  ------------------
  |  Branch (488:7): [True: 2.61k, False: 0]
  ------------------
  489|  66.2k|	     _hb_ot_metrics_get_position_common (font, HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP, &metrics->line_gap);
  ------------------
  |  Branch (489:7): [True: 2.61k, False: 0]
  ------------------
  490|       |
  491|       |  /* Embolden */
  492|  66.2k|  int y_shift = font->y_strength;
  493|  66.2k|  if (font->y_scale < 0) y_shift = -y_shift;
  ------------------
  |  Branch (493:7): [True: 0, False: 66.2k]
  ------------------
  494|  66.2k|  metrics->ascender += y_shift;
  495|       |
  496|  66.2k|  return ret;
  497|  66.2k|}
hb-ot-font.cc:_ZL26hb_ot_get_glyph_h_advancesP9hb_font_tPvjPKjjPijS1_:
  201|   692k|{
  202|       |
  203|   692k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  204|   692k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  205|   692k|  const OT::hmtx_accelerator_t &hmtx = *ot_face->hmtx;
  206|       |
  207|   692k|  hb_position_t *orig_first_advance = first_advance;
  208|       |
  209|   692k|#if !defined(HB_NO_VAR) && !defined(HB_NO_OT_FONT_ADVANCE_CACHE)
  210|   692k|  const OT::HVAR &HVAR = *hmtx.var_table;
  211|   692k|  const OT::VariationStore &varStore = &HVAR + HVAR.varStore;
  212|   692k|  OT::VariationStore::cache_t *varStore_cache = font->num_coords * count >= 128 ? varStore.create_cache () : nullptr;
  ------------------
  |  Branch (212:49): [True: 316, False: 692k]
  ------------------
  213|       |
  214|   692k|  bool use_cache = font->num_coords;
  215|       |#else
  216|       |  OT::VariationStore::cache_t *varStore_cache = nullptr;
  217|       |  bool use_cache = false;
  218|       |#endif
  219|       |
  220|   692k|  hb_ot_font_advance_cache_t *cache = nullptr;
  221|   692k|  if (use_cache)
  ------------------
  |  Branch (221:7): [True: 20.2k, False: 672k]
  ------------------
  222|  20.2k|  {
  223|  20.2k|  retry:
  224|  20.2k|    cache = ot_font->advance_cache.get_acquire ();
  225|  20.2k|    if (unlikely (!cache))
  ------------------
  |  |  259|  20.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.13k, False: 18.1k]
  |  |  ------------------
  ------------------
  226|  2.13k|    {
  227|  2.13k|      cache = (hb_ot_font_advance_cache_t *) hb_malloc (sizeof (hb_ot_font_advance_cache_t));
  ------------------
  |  |  233|  2.13k|#define hb_malloc hb_malloc_impl
  ------------------
  228|  2.13k|      if (unlikely (!cache))
  ------------------
  |  |  259|  2.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151, False: 1.98k]
  |  |  ------------------
  ------------------
  229|    151|      {
  230|    151|	use_cache = false;
  231|    151|	goto out;
  232|    151|      }
  233|       |
  234|  1.98k|      cache->init ();
  235|  1.98k|      if (unlikely (!ot_font->advance_cache.cmpexch (nullptr, cache)))
  ------------------
  |  |  259|  1.98k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.98k]
  |  |  ------------------
  ------------------
  236|      0|      {
  237|      0|	hb_free (cache);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  238|      0|	goto retry;
  239|      0|      }
  240|  1.98k|      ot_font->cached_coords_serial.set_release (font->serial_coords);
  241|  1.98k|    }
  242|  20.2k|  }
  243|   692k|  out:
  244|       |
  245|   692k|  if (!use_cache)
  ------------------
  |  Branch (245:7): [True: 672k, False: 20.1k]
  ------------------
  246|   672k|  {
  247|  29.8M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (247:30): [True: 29.1M, False: 672k]
  ------------------
  248|  29.1M|    {
  249|  29.1M|      *first_advance = font->em_scale_x (hmtx.get_advance_with_var_unscaled (*first_glyph, font, varStore_cache));
  250|  29.1M|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  251|  29.1M|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  252|  29.1M|    }
  253|   672k|  }
  254|  20.1k|  else
  255|  20.1k|  { /* Use cache. */
  256|  20.1k|    if (ot_font->cached_coords_serial.get_acquire () != (int) font->serial_coords)
  ------------------
  |  Branch (256:9): [True: 0, False: 20.1k]
  ------------------
  257|      0|    {
  258|      0|      ot_font->advance_cache->init ();
  259|      0|      ot_font->cached_coords_serial.set_release (font->serial_coords);
  260|      0|    }
  261|       |
  262|  76.2k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (262:30): [True: 56.1k, False: 20.1k]
  ------------------
  263|  56.1k|    {
  264|  56.1k|      hb_position_t v;
  265|  56.1k|      unsigned cv;
  266|  56.1k|      if (ot_font->advance_cache->get (*first_glyph, &cv))
  ------------------
  |  Branch (266:11): [True: 43.7k, False: 12.4k]
  ------------------
  267|  43.7k|	v = cv;
  268|  12.4k|      else
  269|  12.4k|      {
  270|  12.4k|        v = hmtx.get_advance_with_var_unscaled (*first_glyph, font, varStore_cache);
  271|  12.4k|	ot_font->advance_cache->set (*first_glyph, v);
  272|  12.4k|      }
  273|  56.1k|      *first_advance = font->em_scale_x (v);
  274|  56.1k|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  275|  56.1k|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  276|  56.1k|    }
  277|  20.1k|  }
  278|       |
  279|   692k|#if !defined(HB_NO_VAR) && !defined(HB_NO_OT_FONT_ADVANCE_CACHE)
  280|   692k|  OT::VariationStore::destroy_cache (varStore_cache);
  281|   692k|#endif
  282|       |
  283|   692k|  if (font->x_strength && !font->embolden_in_place)
  ------------------
  |  Branch (283:7): [True: 0, False: 692k]
  |  Branch (283:27): [True: 0, False: 0]
  ------------------
  284|      0|  {
  285|       |    /* Emboldening. */
  286|      0|    hb_position_t x_strength = font->x_scale >= 0 ? font->x_strength : -font->x_strength;
  ------------------
  |  Branch (286:32): [True: 0, False: 0]
  ------------------
  287|      0|    first_advance = orig_first_advance;
  288|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (288:30): [True: 0, False: 0]
  ------------------
  289|      0|    {
  290|      0|      *first_advance += *first_advance ? x_strength : 0;
  ------------------
  |  Branch (290:25): [True: 0, False: 0]
  ------------------
  291|      0|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  292|      0|    }
  293|      0|  }
  294|   692k|}
hb-ot-font.cc:_ZL26hb_ot_get_glyph_v_advancesP9hb_font_tPvjPKjjPijS1_:
  305|  33.2k|{
  306|  33.2k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  307|  33.2k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  308|  33.2k|  const OT::vmtx_accelerator_t &vmtx = *ot_face->vmtx;
  309|       |
  310|  33.2k|  hb_position_t *orig_first_advance = first_advance;
  311|       |
  312|  33.2k|  if (vmtx.has_data ())
  ------------------
  |  Branch (312:7): [True: 187, False: 33.0k]
  ------------------
  313|    187|  {
  314|    187|#if !defined(HB_NO_VAR) && !defined(HB_NO_OT_FONT_ADVANCE_CACHE)
  315|    187|    const OT::VVAR &VVAR = *vmtx.var_table;
  316|    187|    const OT::VariationStore &varStore = &VVAR + VVAR.varStore;
  317|    187|    OT::VariationStore::cache_t *varStore_cache = font->num_coords ? varStore.create_cache () : nullptr;
  ------------------
  |  Branch (317:51): [True: 129, False: 58]
  ------------------
  318|       |#else
  319|       |    OT::VariationStore::cache_t *varStore_cache = nullptr;
  320|       |#endif
  321|       |
  322|    374|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (322:30): [True: 187, False: 187]
  ------------------
  323|    187|    {
  324|    187|      *first_advance = font->em_scale_y (-(int) vmtx.get_advance_with_var_unscaled (*first_glyph, font, varStore_cache));
  325|    187|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  326|    187|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  327|    187|    }
  328|       |
  329|    187|#if !defined(HB_NO_VAR) && !defined(HB_NO_OT_FONT_ADVANCE_CACHE)
  330|    187|    OT::VariationStore::destroy_cache (varStore_cache);
  331|    187|#endif
  332|    187|  }
  333|  33.0k|  else
  334|  33.0k|  {
  335|  33.0k|    hb_font_extents_t font_extents;
  336|  33.0k|    font->get_h_extents_with_fallback (&font_extents);
  337|  33.0k|    hb_position_t advance = -(font_extents.ascender - font_extents.descender);
  338|       |
  339|  66.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (339:30): [True: 33.0k, False: 33.0k]
  ------------------
  340|  33.0k|    {
  341|  33.0k|      *first_advance = advance;
  342|  33.0k|      first_glyph = &StructAtOffsetUnaligned<hb_codepoint_t> (first_glyph, glyph_stride);
  343|  33.0k|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  344|  33.0k|    }
  345|  33.0k|  }
  346|       |
  347|  33.2k|  if (font->y_strength && !font->embolden_in_place)
  ------------------
  |  Branch (347:7): [True: 0, False: 33.2k]
  |  Branch (347:27): [True: 0, False: 0]
  ------------------
  348|      0|  {
  349|       |    /* Emboldening. */
  350|      0|    hb_position_t y_strength = font->y_scale >= 0 ? font->y_strength : -font->y_strength;
  ------------------
  |  Branch (350:32): [True: 0, False: 0]
  ------------------
  351|      0|    first_advance = orig_first_advance;
  352|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (352:30): [True: 0, False: 0]
  ------------------
  353|      0|    {
  354|      0|      *first_advance += *first_advance ? y_strength : 0;
  ------------------
  |  Branch (354:25): [True: 0, False: 0]
  ------------------
  355|      0|      first_advance = &StructAtOffsetUnaligned<hb_position_t> (first_advance, advance_stride);
  356|      0|    }
  357|      0|  }
  358|  33.2k|}
hb-ot-font.cc:_ZL24hb_ot_get_glyph_v_originP9hb_font_tPvjPiS2_S1_:
  369|  33.2k|{
  370|  33.2k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  371|  33.2k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  372|       |
  373|  33.2k|  *x = font->get_glyph_h_advance (glyph) / 2;
  374|       |
  375|  33.2k|  const OT::VORG &VORG = *ot_face->VORG;
  376|  33.2k|  if (VORG.has_data ())
  ------------------
  |  Branch (376:7): [True: 38, False: 33.1k]
  ------------------
  377|     38|  {
  378|     38|    float delta = 0;
  379|       |
  380|     38|#ifndef HB_NO_VAR
  381|     38|    const OT::vmtx_accelerator_t &vmtx = *ot_face->vmtx;
  382|     38|    const OT::VVAR &VVAR = *vmtx.var_table;
  383|     38|    if (font->num_coords)
  ------------------
  |  Branch (383:9): [True: 4, False: 34]
  ------------------
  384|      4|      VVAR.get_vorg_delta_unscaled (glyph,
  385|      4|				    font->coords, font->num_coords,
  386|      4|				    &delta);
  387|     38|#endif
  388|       |
  389|     38|    *y = font->em_scalef_y (VORG.get_y_origin (glyph) + delta);
  390|     38|    return true;
  391|     38|  }
  392|       |
  393|  33.1k|  hb_glyph_extents_t extents = {0};
  394|  33.1k|  if (ot_face->glyf->get_extents (font, glyph, &extents))
  ------------------
  |  Branch (394:7): [True: 684, False: 32.4k]
  ------------------
  395|    684|  {
  396|    684|    const OT::vmtx_accelerator_t &vmtx = *ot_face->vmtx;
  397|    684|    int tsb = 0;
  398|    684|    if (vmtx.get_leading_bearing_with_var_unscaled (font, glyph, &tsb))
  ------------------
  |  Branch (398:9): [True: 12, False: 672]
  ------------------
  399|     12|    {
  400|     12|      *y = extents.y_bearing + font->em_scale_y (tsb);
  401|     12|      return true;
  402|     12|    }
  403|       |
  404|    672|    hb_font_extents_t font_extents;
  405|    672|    font->get_h_extents_with_fallback (&font_extents);
  406|    672|    hb_position_t advance = font_extents.ascender - font_extents.descender;
  407|    672|    int diff = advance - -extents.height;
  408|    672|    *y = extents.y_bearing + (diff >> 1);
  409|    672|    return true;
  410|    684|  }
  411|       |
  412|  32.4k|  hb_font_extents_t font_extents;
  413|  32.4k|  font->get_h_extents_with_fallback (&font_extents);
  414|  32.4k|  *y = font_extents.ascender;
  415|       |
  416|  32.4k|  return true;
  417|  33.1k|}
hb-ot-font.cc:_ZL16hb_ot_draw_glyphP9hb_font_tPvjP15hb_draw_funcs_tS1_S1_:
  519|   139k|{
  520|   139k|  bool embolden = font->x_strength || font->y_strength;
  ------------------
  |  Branch (520:19): [True: 0, False: 139k]
  |  Branch (520:39): [True: 0, False: 139k]
  ------------------
  521|   139k|  hb_outline_t outline;
  522|       |
  523|   139k|  { // Need draw_session to be destructed before emboldening.
  524|   139k|    hb_draw_session_t draw_session (embolden ? hb_outline_recording_pen_get_funcs () : draw_funcs,
  ------------------
  |  Branch (524:37): [True: 0, False: 139k]
  ------------------
  525|   139k|				    embolden ? &outline : draw_data, font->slant_xy);
  ------------------
  |  Branch (525:9): [True: 0, False: 139k]
  ------------------
  526|   139k|    if (!font->face->table.glyf->get_path (font, glyph, draw_session))
  ------------------
  |  Branch (526:9): [True: 137k, False: 2.05k]
  ------------------
  527|   137k|#ifndef HB_NO_CFF
  528|   137k|    if (!font->face->table.cff1->get_path (font, glyph, draw_session))
  ------------------
  |  Branch (528:9): [True: 137k, False: 168]
  ------------------
  529|   137k|    if (!font->face->table.cff2->get_path (font, glyph, draw_session))
  ------------------
  |  Branch (529:9): [True: 134k, False: 3.38k]
  ------------------
  530|   134k|#endif
  531|   134k|    {}
  532|   139k|  }
  533|       |
  534|   139k|  if (embolden)
  ------------------
  |  Branch (534:7): [True: 0, False: 139k]
  ------------------
  535|      0|  {
  536|      0|    float x_shift = font->embolden_in_place ? 0 : (float) font->x_strength / 2;
  ------------------
  |  Branch (536:21): [True: 0, False: 0]
  ------------------
  537|      0|    float y_shift = (float) font->y_strength / 2;
  538|      0|    if (font->x_scale < 0) x_shift = -x_shift;
  ------------------
  |  Branch (538:9): [True: 0, False: 0]
  ------------------
  539|      0|    if (font->y_scale < 0) y_shift = -y_shift;
  ------------------
  |  Branch (539:9): [True: 0, False: 0]
  ------------------
  540|      0|    outline.embolden (font->x_strength, font->y_strength,
  541|      0|		      x_shift, y_shift);
  542|       |
  543|      0|    outline.replay (draw_funcs, draw_data);
  544|      0|  }
  545|   139k|}
hb-ot-font.cc:_ZL23hb_ot_get_glyph_extentsP9hb_font_tPvjP18hb_glyph_extents_tS1_:
  426|   749k|{
  427|   749k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  428|   749k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  429|       |
  430|   749k|#if !defined(HB_NO_OT_FONT_BITMAP) && !defined(HB_NO_COLOR)
  431|   749k|  if (ot_face->sbix->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (431:7): [True: 30, False: 749k]
  ------------------
  432|   749k|  if (ot_face->CBDT->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (432:7): [True: 76, False: 749k]
  ------------------
  433|   749k|#endif
  434|   749k|#if !defined(HB_NO_COLOR) && !defined(HB_NO_PAINT)
  435|   749k|  if (ot_face->COLR->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (435:7): [True: 5.01k, False: 744k]
  ------------------
  436|   744k|#endif
  437|   744k|  if (ot_face->glyf->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (437:7): [True: 169k, False: 575k]
  ------------------
  438|   575k|#ifndef HB_NO_OT_FONT_CFF
  439|   575k|  if (ot_face->cff1->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (439:7): [True: 151k, False: 423k]
  ------------------
  440|   423k|  if (ot_face->cff2->get_extents (font, glyph, extents)) return true;
  ------------------
  |  Branch (440:7): [True: 388, False: 423k]
  ------------------
  441|   423k|#endif
  442|       |
  443|   423k|  return false;
  444|   423k|}
hb-ot-font.cc:_ZL20hb_ot_get_glyph_nameP9hb_font_tPvjPcjS1_:
  453|  33.2k|{
  454|  33.2k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  455|  33.2k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  456|       |
  457|  33.2k|  if (ot_face->post->get_glyph_name (glyph, name, size)) return true;
  ------------------
  |  Branch (457:7): [True: 212, False: 33.0k]
  ------------------
  458|  33.0k|#ifndef HB_NO_OT_FONT_CFF
  459|  33.0k|  if (ot_face->cff1->get_glyph_name (glyph, name, size)) return true;
  ------------------
  |  Branch (459:7): [True: 830, False: 32.1k]
  ------------------
  460|  32.1k|#endif
  461|  32.1k|  return false;
  462|  33.0k|}
hb-ot-font.cc:_ZL25hb_ot_get_glyph_from_nameP9hb_font_tPvPKciPjS1_:
  469|  33.2k|{
  470|  33.2k|  const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
  471|  33.2k|  const hb_ot_face_t *ot_face = ot_font->ot_face;
  472|       |
  473|  33.2k|  if (ot_face->post->get_glyph_from_name (name, len, glyph)) return true;
  ------------------
  |  Branch (473:7): [True: 29, False: 33.1k]
  ------------------
  474|  33.1k|#ifndef HB_NO_OT_FONT_CFF
  475|  33.1k|    if (ot_face->cff1->get_glyph_from_name (name, len, glyph)) return true;
  ------------------
  |  Branch (475:9): [True: 21, False: 33.1k]
  ------------------
  476|  33.1k|#endif
  477|  33.1k|  return false;
  478|  33.1k|}
hb-ot-font.cc:_ZL20free_static_ot_funcsv:
  622|      1|{
  623|      1|  static_ot_funcs.free_instance ();
  624|      1|}
hb-ot-font.cc:_ZL19_hb_ot_font_destroyPv:
  127|  98.6k|{
  128|  98.6k|  hb_ot_font_t *ot_font = (hb_ot_font_t *) font_data;
  129|       |
  130|  98.6k|  auto *cache = ot_font->advance_cache.get_relaxed ();
  131|  98.6k|  hb_free (cache);
  ------------------
  |  |  236|  98.6k|#define hb_free hb_free_impl
  ------------------
  132|       |
  133|  98.6k|  hb_free (ot_font);
  ------------------
  |  |  236|  98.6k|#define hb_free hb_free_impl
  ------------------
  134|  98.6k|}

_ZNK2OT4head8get_upemEv:
   51|  33.2k|  {
   52|  33.2k|    unsigned int upem = unitsPerEm;
   53|       |    /* If no valid head table found, assume 1000, which matches typical Type1 usage. */
   54|  33.2k|    return 16 <= upem && upem <= 16384 ? upem : 1000;
  ------------------
  |  Branch (54:12): [True: 383, False: 32.8k]
  |  Branch (54:26): [True: 376, False: 7]
  ------------------
   55|  33.2k|  }
_ZNK2OT4head8sanitizeEP21hb_sanitize_context_t:
  103|    950|  {
  104|    950|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    950|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  105|    950|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  3.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    950|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 860, False: 90]
  |  |  |  Branch (349:45): [True: 421, False: 439]
  |  |  |  Branch (349:45): [True: 383, False: 38]
  |  |  ------------------
  ------------------
  106|    950|		  version.major == 1 &&
  107|    950|		  magicNumber == 0x5F0F3CF5u);
  108|    950|  }

_ZNK2OT4_heaINS_4hheaEE8sanitizeEP21hb_sanitize_context_t:
   51|  1.50k|  {
   52|  1.50k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.50k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   53|  1.50k|    return_trace (c->check_struct (this) && likely (version.major == 1));
  ------------------
  |  |  349|  2.94k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.50k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.43k, False: 66]
  |  |  |  Branch (349:45): [True: 1.24k, False: 197]
  |  |  ------------------
  ------------------
   54|  1.50k|  }
_ZNK2OT4_heaINS_4vheaEE8sanitizeEP21hb_sanitize_context_t:
   51|    209|  {
   52|    209|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    209|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   53|    209|    return_trace (c->check_struct (this) && likely (version.major == 1));
  ------------------
  |  |  349|    416|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    209|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 207, False: 2]
  |  |  |  Branch (349:45): [True: 203, False: 4]
  |  |  ------------------
  ------------------
   54|    209|  }
_ZNK2OT4_heaINS_4hheaEE8has_dataEv:
   48|   103k|  bool has_data () const { return version.major; }

_ZNK2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE13accelerator_t40get_leading_bearing_without_var_unscaledEjPi:
  304|   188k|    {
  305|   188k|      if (glyph < num_long_metrics)
  ------------------
  |  Branch (305:11): [True: 35.6k, False: 152k]
  ------------------
  306|  35.6k|      {
  307|  35.6k|	*lsb = table->longMetricZ[glyph].sb;
  308|  35.6k|	return true;
  309|  35.6k|      }
  310|       |
  311|   152k|      if (unlikely (glyph >= num_bearings))
  ------------------
  |  |  259|   152k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 151k, False: 1.15k]
  |  |  ------------------
  ------------------
  312|   151k|	return false;
  313|       |
  314|  1.15k|      const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
  315|  1.15k|      *lsb = bearings[glyph - num_long_metrics];
  316|  1.15k|      return true;
  317|   152k|    }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_t40get_leading_bearing_without_var_unscaledEjPi:
  304|   186k|    {
  305|   186k|      if (glyph < num_long_metrics)
  ------------------
  |  Branch (305:11): [True: 20.1k, False: 165k]
  ------------------
  306|  20.1k|      {
  307|  20.1k|	*lsb = table->longMetricZ[glyph].sb;
  308|  20.1k|	return true;
  309|  20.1k|      }
  310|       |
  311|   165k|      if (unlikely (glyph >= num_bearings))
  ------------------
  |  |  259|   165k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 164k, False: 1.11k]
  |  |  ------------------
  ------------------
  312|   164k|	return false;
  313|       |
  314|  1.11k|      const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
  315|  1.11k|      *lsb = bearings[glyph - num_long_metrics];
  316|  1.11k|      return true;
  317|   165k|    }
_ZNK2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE13accelerator_t32get_advance_without_var_unscaledEj:
  342|  29.3M|    {
  343|       |      /* OpenType case. */
  344|  29.3M|      if (glyph < num_bearings)
  ------------------
  |  Branch (344:11): [True: 286k, False: 29.1M]
  ------------------
  345|   286k|	return table->longMetricZ[hb_min (glyph, (uint32_t) num_long_metrics - 1)].advance;
  346|       |
  347|       |      /* If num_advances is zero, it means we don't have the metrics table
  348|       |       * for this direction: return default advance.  Otherwise, there's a
  349|       |       * well-defined answer. */
  350|  29.1M|      if (unlikely (!num_advances))
  ------------------
  |  |  259|  29.1M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28.8M, False: 229k]
  |  |  ------------------
  ------------------
  351|  28.8M|	return default_advance;
  352|       |
  353|       |#ifdef HB_NO_BEYOND_64K
  354|       |      return 0;
  355|       |#endif
  356|       |
  357|   229k|      if (unlikely (glyph >= num_glyphs))
  ------------------
  |  |  259|   229k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 171k, False: 58.4k]
  |  |  ------------------
  ------------------
  358|   171k|        return 0;
  359|       |
  360|       |      /* num_bearings <= glyph < num_glyphs;
  361|       |       * num_bearings <= num_advances */
  362|       |
  363|  58.4k|      if (num_bearings == num_advances)
  ------------------
  |  Branch (363:11): [True: 3.76k, False: 54.6k]
  ------------------
  364|  3.76k|        return get_advance_without_var_unscaled (num_bearings - 1);
  365|       |
  366|  54.6k|      const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
  367|  54.6k|      const UFWORD *advances = (const UFWORD *) &bearings[num_bearings - num_long_metrics];
  368|       |
  369|  54.6k|      return advances[hb_min (glyph - num_bearings, num_advances - num_bearings - 1)];
  370|  58.4k|    }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_t32get_advance_without_var_unscaledEj:
  342|   187k|    {
  343|       |      /* OpenType case. */
  344|   187k|      if (glyph < num_bearings)
  ------------------
  |  Branch (344:11): [True: 22.8k, False: 164k]
  ------------------
  345|  22.8k|	return table->longMetricZ[hb_min (glyph, (uint32_t) num_long_metrics - 1)].advance;
  346|       |
  347|       |      /* If num_advances is zero, it means we don't have the metrics table
  348|       |       * for this direction: return default advance.  Otherwise, there's a
  349|       |       * well-defined answer. */
  350|   164k|      if (unlikely (!num_advances))
  ------------------
  |  |  259|   164k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 122k, False: 41.8k]
  |  |  ------------------
  ------------------
  351|   122k|	return default_advance;
  352|       |
  353|       |#ifdef HB_NO_BEYOND_64K
  354|       |      return 0;
  355|       |#endif
  356|       |
  357|  41.8k|      if (unlikely (glyph >= num_glyphs))
  ------------------
  |  |  259|  41.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 37.6k, False: 4.21k]
  |  |  ------------------
  ------------------
  358|  37.6k|        return 0;
  359|       |
  360|       |      /* num_bearings <= glyph < num_glyphs;
  361|       |       * num_bearings <= num_advances */
  362|       |
  363|  4.21k|      if (num_bearings == num_advances)
  ------------------
  |  Branch (363:11): [True: 1.65k, False: 2.55k]
  ------------------
  364|  1.65k|        return get_advance_without_var_unscaled (num_bearings - 1);
  365|       |
  366|  2.55k|      const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
  367|  2.55k|      const UFWORD *advances = (const UFWORD *) &bearings[num_bearings - num_long_metrics];
  368|       |
  369|  2.55k|      return advances[hb_min (glyph - num_bearings, num_advances - num_bearings - 1)];
  370|  4.21k|    }
_ZN2OT18hmtx_accelerator_tC2EP9hb_face_t:
  465|  32.8k|  hmtx_accelerator_t (hb_face_t *face) : hmtx::accelerator_t (face) {}
_ZN2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE13accelerator_tC2EP9hb_face_t:
  252|  32.8k|    {
  253|  32.8k|      table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
  254|  32.8k|      var_table = hb_sanitize_context_t ().reference_table<V> (face, T::variationsTag);
  255|       |
  256|  32.8k|      default_advance = T::is_horizontal ? hb_face_get_upem (face) / 2 : hb_face_get_upem (face);
  ------------------
  |  Branch (256:25): [Folded - Ignored]
  ------------------
  257|       |
  258|       |      /* Populate count variables and sort them out as we go */
  259|       |
  260|  32.8k|      unsigned int len = table.get_length ();
  261|  32.8k|      if (len & 1)
  ------------------
  |  Branch (261:11): [True: 183, False: 32.6k]
  ------------------
  262|    183|        len--;
  263|       |
  264|  32.8k|      num_long_metrics = T::is_horizontal ?
  ------------------
  |  Branch (264:26): [Folded - Ignored]
  ------------------
  265|  32.8k|			 face->table.hhea->numberOfLongMetrics :
  266|  32.8k|#ifndef HB_NO_VERTICAL
  267|  32.8k|			 face->table.vhea->numberOfLongMetrics
  268|       |#else
  269|       |			 0
  270|       |#endif
  271|  32.8k|			 ;
  272|  32.8k|      if (unlikely (num_long_metrics * 4 > len))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 880, False: 31.9k]
  |  |  ------------------
  ------------------
  273|    880|	num_long_metrics = len / 4;
  274|  32.8k|      len -= num_long_metrics * 4;
  275|       |
  276|  32.8k|      num_bearings = face->table.maxp->get_num_glyphs ();
  277|       |
  278|  32.8k|      if (unlikely (num_bearings < num_long_metrics))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 598, False: 32.2k]
  |  |  ------------------
  ------------------
  279|    598|        num_bearings = num_long_metrics;
  280|  32.8k|      if (unlikely ((num_bearings - num_long_metrics) * 2 > len))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.97k, False: 29.8k]
  |  |  ------------------
  ------------------
  281|  2.97k|        num_bearings = num_long_metrics + len / 2;
  282|  32.8k|      len -= (num_bearings - num_long_metrics) * 2;
  283|       |
  284|       |      /* We MUST set num_bearings to zero if num_long_metrics is zero.
  285|       |       * Our get_advance() depends on that. */
  286|  32.8k|      if (unlikely (!num_long_metrics))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.9k, False: 903]
  |  |  ------------------
  ------------------
  287|  31.9k|	num_bearings = num_long_metrics = 0;
  288|       |
  289|  32.8k|      num_advances = num_bearings + len / 2;
  290|  32.8k|      num_glyphs = face->get_num_glyphs ();
  291|  32.8k|      if (num_glyphs < num_advances)
  ------------------
  |  Branch (291:11): [True: 215, False: 32.6k]
  ------------------
  292|    215|        num_glyphs = num_advances;
  293|  32.8k|    }
_ZNK2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE8sanitizeEP21hb_sanitize_context_t:
   73|  1.20k|  {
   74|  1.20k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.20k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   75|       |    /* We don't check for anything specific here.  The users of the
   76|       |     * struct do all the hard work... */
   77|  1.20k|    return_trace (true);
  ------------------
  |  |  349|  1.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|  1.20k|  }
_ZN2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE13accelerator_tD2Ev:
  295|  32.8k|    {
  296|  32.8k|      table.destroy ();
  297|  32.8k|      var_table.destroy ();
  298|  32.8k|    }
_ZN2OT18vmtx_accelerator_tC2EP9hb_face_t:
  468|  32.7k|  vmtx_accelerator_t (hb_face_t *face) : vmtx::accelerator_t (face) {}
_ZN2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_tC2EP9hb_face_t:
  252|  32.7k|    {
  253|  32.7k|      table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
  254|  32.7k|      var_table = hb_sanitize_context_t ().reference_table<V> (face, T::variationsTag);
  255|       |
  256|  32.7k|      default_advance = T::is_horizontal ? hb_face_get_upem (face) / 2 : hb_face_get_upem (face);
  ------------------
  |  Branch (256:25): [Folded - Ignored]
  ------------------
  257|       |
  258|       |      /* Populate count variables and sort them out as we go */
  259|       |
  260|  32.7k|      unsigned int len = table.get_length ();
  261|  32.7k|      if (len & 1)
  ------------------
  |  Branch (261:11): [True: 90, False: 32.6k]
  ------------------
  262|     90|        len--;
  263|       |
  264|  32.7k|      num_long_metrics = T::is_horizontal ?
  ------------------
  |  Branch (264:26): [Folded - Ignored]
  ------------------
  265|      0|			 face->table.hhea->numberOfLongMetrics :
  266|  32.7k|#ifndef HB_NO_VERTICAL
  267|  32.7k|			 face->table.vhea->numberOfLongMetrics
  268|       |#else
  269|       |			 0
  270|       |#endif
  271|  32.7k|			 ;
  272|  32.7k|      if (unlikely (num_long_metrics * 4 > len))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 146, False: 32.5k]
  |  |  ------------------
  ------------------
  273|    146|	num_long_metrics = len / 4;
  274|  32.7k|      len -= num_long_metrics * 4;
  275|       |
  276|  32.7k|      num_bearings = face->table.maxp->get_num_glyphs ();
  277|       |
  278|  32.7k|      if (unlikely (num_bearings < num_long_metrics))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 134, False: 32.5k]
  |  |  ------------------
  ------------------
  279|    134|        num_bearings = num_long_metrics;
  280|  32.7k|      if (unlikely ((num_bearings - num_long_metrics) * 2 > len))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.39k, False: 29.3k]
  |  |  ------------------
  ------------------
  281|  3.39k|        num_bearings = num_long_metrics + len / 2;
  282|  32.7k|      len -= (num_bearings - num_long_metrics) * 2;
  283|       |
  284|       |      /* We MUST set num_bearings to zero if num_long_metrics is zero.
  285|       |       * Our get_advance() depends on that. */
  286|  32.7k|      if (unlikely (!num_long_metrics))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 187]
  |  |  ------------------
  ------------------
  287|  32.5k|	num_bearings = num_long_metrics = 0;
  288|       |
  289|  32.7k|      num_advances = num_bearings + len / 2;
  290|  32.7k|      num_glyphs = face->get_num_glyphs ();
  291|  32.7k|      if (num_glyphs < num_advances)
  ------------------
  |  Branch (291:11): [True: 71, False: 32.6k]
  ------------------
  292|     71|        num_glyphs = num_advances;
  293|  32.7k|    }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE8sanitizeEP21hb_sanitize_context_t:
   73|    203|  {
   74|    203|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    203|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   75|       |    /* We don't check for anything specific here.  The users of the
   76|       |     * struct do all the hard work... */
   77|    203|    return_trace (true);
  ------------------
  |  |  349|    203|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    203|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   78|    203|  }
_ZN2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_tD2Ev:
  295|  32.7k|    {
  296|  32.7k|      table.destroy ();
  297|  32.7k|      var_table.destroy ();
  298|  32.7k|    }
_ZNK2OT8hmtxvmtxINS_4hmtxENS_4hheaENS_4HVAREE13accelerator_t29get_advance_with_var_unscaledEjP9hb_font_tPf:
  375|  29.1M|    {
  376|  29.1M|      unsigned int advance = get_advance_without_var_unscaled (glyph);
  377|       |
  378|  29.1M|#ifndef HB_NO_VAR
  379|  29.1M|      if (unlikely (glyph >= num_bearings) || !font->num_coords)
  ------------------
  |  |  259|  58.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28.9M, False: 244k]
  |  |  ------------------
  ------------------
  |  Branch (379:47): [True: 238k, False: 5.75k]
  ------------------
  380|  29.1M|	return advance;
  381|       |
  382|  5.75k|      if (var_table.get_length ())
  ------------------
  |  Branch (382:11): [True: 1.12k, False: 4.63k]
  ------------------
  383|  1.12k|	return advance + roundf (var_table->get_advance_delta_unscaled (glyph,
  ------------------
  |  |  207|  1.12k|#define roundf(x) _hb_roundf(x)
  ------------------
  384|  5.75k|									font->coords, font->num_coords,
  385|  5.75k|									store_cache));
  386|       |
  387|  4.63k|      return _glyf_get_advance_with_var_unscaled (font, glyph, T::tableTag == HB_OT_TAG_vmtx);
  ------------------
  |  |   44|  4.63k|#define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
  |  |  ------------------
  |  |  |  |  179|  4.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  388|       |#else
  389|       |      return advance;
  390|       |#endif
  391|  5.75k|    }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_t8has_dataEv:
  300|  33.2k|    bool has_data () const { return (bool) num_bearings; }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_t29get_advance_with_var_unscaledEjP9hb_font_tPf:
  375|    187|    {
  376|    187|      unsigned int advance = get_advance_without_var_unscaled (glyph);
  377|       |
  378|    187|#ifndef HB_NO_VAR
  379|    187|      if (unlikely (glyph >= num_bearings) || !font->num_coords)
  ------------------
  |  |  259|    374|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 171, False: 16]
  |  |  ------------------
  ------------------
  |  Branch (379:47): [True: 16, False: 0]
  ------------------
  380|    187|	return advance;
  381|       |
  382|      0|      if (var_table.get_length ())
  ------------------
  |  Branch (382:11): [True: 0, False: 0]
  ------------------
  383|      0|	return advance + roundf (var_table->get_advance_delta_unscaled (glyph,
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  384|      0|									font->coords, font->num_coords,
  385|      0|									store_cache));
  386|       |
  387|      0|      return _glyf_get_advance_with_var_unscaled (font, glyph, T::tableTag == HB_OT_TAG_vmtx);
  ------------------
  |  |   44|      0|#define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  388|       |#else
  389|       |      return advance;
  390|       |#endif
  391|      0|    }
_ZNK2OT8hmtxvmtxINS_4vmtxENS_4vheaENS_4VVAREE13accelerator_t37get_leading_bearing_with_var_unscaledEP9hb_font_tjPi:
  322|    684|    {
  323|    684|      if (!font->num_coords)
  ------------------
  |  Branch (323:11): [True: 684, False: 0]
  ------------------
  324|    684|	return get_leading_bearing_without_var_unscaled (glyph, lsb);
  325|       |
  326|      0|#ifndef HB_NO_VAR
  327|      0|      float delta;
  328|      0|      if (var_table->get_lsb_delta_unscaled (glyph, font->coords, font->num_coords, &delta) &&
  ------------------
  |  Branch (328:11): [True: 0, False: 0]
  ------------------
  329|      0|	  get_leading_bearing_without_var_unscaled (glyph, lsb))
  ------------------
  |  Branch (329:4): [True: 0, False: 0]
  ------------------
  330|      0|      {
  331|      0|	*lsb += roundf (delta);
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  332|      0|	return true;
  333|      0|      }
  334|       |
  335|      0|      return _glyf_get_leading_bearing_with_var_unscaled (font, glyph, T::tableTag == HB_OT_TAG_vmtx, lsb);
  ------------------
  |  |   44|      0|#define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  336|       |#else
  337|       |      return false;
  338|       |#endif
  339|      0|    }

_ZNK2OT20KernOTSubTableHeader11tuple_countEv:
  175|   136k|  unsigned   tuple_count () const { return 0; }
_ZNK2OT20KernOTSubTableHeader13is_horizontalEv:
  176|  35.5k|  bool     is_horizontal () const { return (coverage & Horizontal); }
_ZNK2OT20KernOTSubTableHeader8sanitizeEP21hb_sanitize_context_t:
  191|  4.36k|  {
  192|  4.36k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.36k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  193|  4.36k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  4.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.36k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  194|  4.36k|  }
_ZNK2OT21KernAATSubTableHeader11tuple_countEv:
  230|  1.46M|  unsigned   tuple_count () const { return 0; }
_ZNK2OT21KernAATSubTableHeader13is_horizontalEv:
  231|  2.65k|  bool     is_horizontal () const { return !(coverage & Vertical); }
_ZNK2OT21KernAATSubTableHeader8sanitizeEP21hb_sanitize_context_t:
  244|  1.21k|  {
  245|  1.21k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.21k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  246|  1.21k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  1.21k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.21k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  247|  1.21k|  }
_ZNK2OT4kern8has_dataEv:
  283|  47.1k|  bool     has_data () const { return u.version32; }
_ZNK2OT4kern8get_typeEv:
  284|  7.49k|  unsigned get_type () const { return u.major; }
_ZNK2OT4kern17has_state_machineEv:
  287|    862|  {
  288|    862|    switch (get_type ()) {
  289|    297|    case 0: return u.ot.has_state_machine ();
  ------------------
  |  Branch (289:5): [True: 297, False: 565]
  ------------------
  290|      0|#ifndef HB_NO_AAT_SHAPE
  291|    511|    case 1: return u.aat.has_state_machine ();
  ------------------
  |  Branch (291:5): [True: 511, False: 351]
  ------------------
  292|      0|#endif
  293|     54|    default:return false;
  ------------------
  |  Branch (293:5): [True: 54, False: 808]
  ------------------
  294|    862|    }
  295|    862|  }
_ZNK2OT4kern16has_cross_streamEv:
  298|    869|  {
  299|    869|    switch (get_type ()) {
  300|    297|    case 0: return u.ot.has_cross_stream ();
  ------------------
  |  Branch (300:5): [True: 297, False: 572]
  ------------------
  301|      0|#ifndef HB_NO_AAT_SHAPE
  302|    521|    case 1: return u.aat.has_cross_stream ();
  ------------------
  |  Branch (302:5): [True: 521, False: 348]
  ------------------
  303|      0|#endif
  304|     51|    default:return false;
  ------------------
  |  Branch (304:5): [True: 51, False: 818]
  ------------------
  305|    869|    }
  306|    869|  }
_ZNK2OT4kern5applyEPN3AAT22hb_aat_apply_context_tE:
  320|  5.02k|  { return dispatch (c); }
_ZNK2OT4kern8sanitizeEP21hb_sanitize_context_t:
  337|    739|  {
  338|    739|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    739|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  339|    739|    if (!u.version32.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (339:9): [True: 1, False: 738]
  ------------------
  340|    738|    return_trace (dispatch (c));
  ------------------
  |  |  349|    738|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    738|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  341|    739|  }
_ZNK2OT12KernSubTableINS_20KernOTSubTableHeaderEE8get_typeEv:
  118|  28.4k|  unsigned int get_type () const { return u.header.format; }
_ZNK2OT12KernSubTableINS_20KernOTSubTableHeaderEE8get_sizeEv:
  117|  65.0k|  unsigned int get_size () const { return u.header.length; }
_ZNK2OT12KernSubTableINS_21KernAATSubTableHeaderEE8get_typeEv:
  118|  3.69k|  unsigned int get_type () const { return u.header.format; }
_ZNK2OT12KernSubTableINS_21KernAATSubTableHeaderEE8get_sizeEv:
  117|  4.63k|  unsigned int get_size () const { return u.header.length; }
_ZNK2OT4kern8dispatchIN3AAT22hb_aat_apply_context_tEJEEENT_8return_tEPS4_DpOT0_:
  324|  5.02k|  {
  325|  5.02k|    unsigned int subtable_type = get_type ();
  326|  5.02k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  5.02k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  327|  5.02k|    switch (subtable_type) {
  328|  2.05k|    case 0:	return_trace (c->dispatch (u.ot, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (328:5): [True: 2.05k, False: 2.96k]
  ------------------
  329|      0|#ifndef HB_NO_AAT_SHAPE
  330|  2.35k|    case 1:	return_trace (c->dispatch (u.aat, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.35k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.35k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (330:5): [True: 2.35k, False: 2.67k]
  ------------------
  331|      0|#endif
  332|    619|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|    619|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    619|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (332:5): [True: 619, False: 4.40k]
  ------------------
  333|  5.02k|    }
  334|  5.02k|  }
_ZNK2OT12KernSubTableINS_20KernOTSubTableHeaderEE8dispatchIN3AAT22hb_aat_apply_context_tEJEEENT_8return_tEPS6_DpOT0_:
  131|  23.3k|  {
  132|  23.3k|    unsigned int subtable_type = get_type ();
  133|  23.3k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  23.3k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  134|  23.3k|    switch (subtable_type) {
  135|    965|    case 0:	return_trace (c->dispatch (u.format0));
  ------------------
  |  |  349|    965|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    965|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (135:5): [True: 965, False: 22.3k]
  ------------------
  136|      0|#ifndef HB_NO_AAT_SHAPE
  137|     71|    case 1:	return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|    142|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     71|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 71]
  |  |  ------------------
  ------------------
  |  Branch (137:5): [True: 71, False: 23.2k]
  ------------------
  138|      0|#endif
  139|    854|    case 2:	return_trace (c->dispatch (u.format2));
  ------------------
  |  |  349|    854|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    854|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (139:5): [True: 854, False: 22.5k]
  ------------------
  140|      0|#ifndef HB_NO_AAT_SHAPE
  141|     21|    case 3:	return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|     42|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     21|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 21]
  |  |  ------------------
  ------------------
  |  Branch (141:5): [True: 21, False: 23.3k]
  ------------------
  142|      0|#endif
  143|  21.4k|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|  21.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  21.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (143:5): [True: 21.4k, False: 1.91k]
  ------------------
  144|  23.3k|    }
  145|  23.3k|  }
_ZNK2OT12KernSubTableINS_21KernAATSubTableHeaderEE8dispatchIN3AAT22hb_aat_apply_context_tEJEEENT_8return_tEPS6_DpOT0_:
  131|  2.54k|  {
  132|  2.54k|    unsigned int subtable_type = get_type ();
  133|  2.54k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  2.54k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  134|  2.54k|    switch (subtable_type) {
  135|    607|    case 0:	return_trace (c->dispatch (u.format0));
  ------------------
  |  |  349|    607|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    607|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (135:5): [True: 607, False: 1.94k]
  ------------------
  136|      0|#ifndef HB_NO_AAT_SHAPE
  137|    732|    case 1:	return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|  1.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    732|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 732, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (137:5): [True: 732, False: 1.81k]
  ------------------
  138|      0|#endif
  139|    455|    case 2:	return_trace (c->dispatch (u.format2));
  ------------------
  |  |  349|    455|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    455|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (139:5): [True: 455, False: 2.09k]
  ------------------
  140|      0|#ifndef HB_NO_AAT_SHAPE
  141|    426|    case 3:	return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|    852|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    426|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 426, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (141:5): [True: 426, False: 2.12k]
  ------------------
  142|      0|#endif
  143|    327|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|    327|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    327|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (143:5): [True: 327, False: 2.22k]
  ------------------
  144|  2.54k|    }
  145|  2.54k|  }
_ZNK2OT19KernSubTableFormat3INS_21KernAATSubTableHeaderEE5applyEPN3AAT22hb_aat_apply_context_tE:
   63|    426|  {
   64|    426|    TRACE_APPLY (this);
  ------------------
  |  |  410|    426|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
   65|       |
   66|    426|    if (!c->plan->requested_kerning)
  ------------------
  |  Branch (66:9): [True: 147, False: 279]
  ------------------
   67|    147|      return false;
   68|       |
   69|    279|    if (header.coverage & header.Backwards)
  ------------------
  |  Branch (69:9): [True: 0, False: 279]
  ------------------
   70|      0|      return false;
   71|       |
   72|    279|    hb_kern_machine_t<KernSubTableFormat3> machine (*this, header.coverage & header.CrossStream);
   73|    279|    machine.kern (c->font, c->buffer, c->plan->kern_mask);
   74|       |
   75|    279|    return_trace (true);
  ------------------
  |  |  349|    279|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    279|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   76|    279|  }
_ZNK2OT19KernSubTableFormat3INS_21KernAATSubTableHeaderEE11get_kerningEjj:
   48|  79.5k|  {
   49|  79.5k|    hb_array_t<const FWORD> kernValue = kernValueZ.as_array (kernValueCount);
   50|  79.5k|    hb_array_t<const HBUINT8> leftClass = StructAfter<const UnsizedArrayOf<HBUINT8>> (kernValue).as_array (glyphCount);
   51|  79.5k|    hb_array_t<const HBUINT8> rightClass = StructAfter<const UnsizedArrayOf<HBUINT8>> (leftClass).as_array (glyphCount);
   52|  79.5k|    hb_array_t<const HBUINT8> kernIndex = StructAfter<const UnsizedArrayOf<HBUINT8>> (rightClass).as_array (leftClassCount * rightClassCount);
   53|       |
   54|  79.5k|    unsigned int leftC = leftClass[left];
   55|  79.5k|    unsigned int rightC = rightClass[right];
   56|  79.5k|    if (unlikely (leftC >= leftClassCount || rightC >= rightClassCount))
  ------------------
  |  |  259|   149k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25.9k, False: 53.5k]
  |  |  |  Branch (259:47): [True: 9.98k, False: 69.5k]
  |  |  |  Branch (259:47): [True: 15.9k, False: 53.5k]
  |  |  ------------------
  ------------------
   57|  25.9k|      return 0;
   58|  53.5k|    unsigned int i = leftC * rightClassCount + rightC;
   59|  53.5k|    return kernValue[kernIndex[i]];
   60|  79.5k|  }
_ZNK2OT4kern8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
  324|    738|  {
  325|    738|    unsigned int subtable_type = get_type ();
  326|    738|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|    738|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  327|    738|    switch (subtable_type) {
  328|    225|    case 0:	return_trace (c->dispatch (u.ot, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    225|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    225|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (328:5): [True: 225, False: 513]
  ------------------
  329|      0|#ifndef HB_NO_AAT_SHAPE
  330|    473|    case 1:	return_trace (c->dispatch (u.aat, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    473|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    473|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (330:5): [True: 473, False: 265]
  ------------------
  331|      0|#endif
  332|     40|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|     40|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     40|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (332:5): [True: 40, False: 698]
  ------------------
  333|    738|    }
  334|    738|  }
_ZNK2OT12KernSubTableINS_20KernOTSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  148|  2.17k|  {
  149|  2.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  150|  2.17k|    if (unlikely (!u.header.sanitize (c) ||
  ------------------
  |  |  259|  8.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13, False: 2.16k]
  |  |  |  Branch (259:47): [True: 5, False: 2.17k]
  |  |  |  Branch (259:47): [True: 1, False: 2.17k]
  |  |  |  Branch (259:47): [True: 7, False: 2.16k]
  |  |  ------------------
  ------------------
  151|  2.17k|		  u.header.length < u.header.min_size ||
  152|  2.17k|		  !c->check_range (this, u.header.length))) return_trace (false);
  ------------------
  |  |  349|     13|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     13|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|       |
  154|  2.16k|    return_trace (dispatch (c));
  ------------------
  |  |  349|  2.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  155|  2.17k|  }
_ZNK2OT12KernSubTableINS_20KernOTSubTableHeaderEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
  131|  2.16k|  {
  132|  2.16k|    unsigned int subtable_type = get_type ();
  133|  2.16k|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|  2.16k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  134|  2.16k|    switch (subtable_type) {
  135|    219|    case 0:	return_trace (c->dispatch (u.format0));
  ------------------
  |  |  349|    219|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    219|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (135:5): [True: 219, False: 1.94k]
  ------------------
  136|      0|#ifndef HB_NO_AAT_SHAPE
  137|     24|    case 1:	return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|     48|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     24|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 24]
  |  |  ------------------
  ------------------
  |  Branch (137:5): [True: 24, False: 2.14k]
  ------------------
  138|      0|#endif
  139|     93|    case 2:	return_trace (c->dispatch (u.format2));
  ------------------
  |  |  349|     93|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     93|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (139:5): [True: 93, False: 2.07k]
  ------------------
  140|      0|#ifndef HB_NO_AAT_SHAPE
  141|      1|    case 3:	return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (141:5): [True: 1, False: 2.16k]
  ------------------
  142|      0|#endif
  143|  1.82k|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.82k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.82k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (143:5): [True: 1.82k, False: 337]
  ------------------
  144|  2.16k|    }
  145|  2.16k|  }
_ZNK2OT12KernSubTableINS_21KernAATSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
  148|    601|  {
  149|    601|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    601|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  150|    601|    if (unlikely (!u.header.sanitize (c) ||
  ------------------
  |  |  259|  2.39k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 65, False: 536]
  |  |  |  Branch (259:47): [True: 4, False: 597]
  |  |  |  Branch (259:47): [True: 1, False: 596]
  |  |  |  Branch (259:47): [True: 60, False: 536]
  |  |  ------------------
  ------------------
  151|    601|		  u.header.length < u.header.min_size ||
  152|    601|		  !c->check_range (this, u.header.length))) return_trace (false);
  ------------------
  |  |  349|     65|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  153|       |
  154|    536|    return_trace (dispatch (c));
  ------------------
  |  |  349|    536|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    536|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  155|    601|  }
_ZNK2OT12KernSubTableINS_21KernAATSubTableHeaderEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS5_DpOT0_:
  131|    536|  {
  132|    536|    unsigned int subtable_type = get_type ();
  133|    536|    TRACE_DISPATCH (this, subtable_type);
  ------------------
  |  |  467|    536|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
  134|    536|    switch (subtable_type) {
  135|    117|    case 0:	return_trace (c->dispatch (u.format0));
  ------------------
  |  |  349|    117|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    117|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (135:5): [True: 117, False: 419]
  ------------------
  136|      0|#ifndef HB_NO_AAT_SHAPE
  137|    206|    case 1:	return_trace (u.header.apple ? c->dispatch (u.format1, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|    412|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    206|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 206, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (137:5): [True: 206, False: 330]
  ------------------
  138|      0|#endif
  139|     65|    case 2:	return_trace (c->dispatch (u.format2));
  ------------------
  |  |  349|     65|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (139:5): [True: 65, False: 471]
  ------------------
  140|      0|#ifndef HB_NO_AAT_SHAPE
  141|     51|    case 3:	return_trace (u.header.apple ? c->dispatch (u.format3, std::forward<Ts> (ds)...) : c->default_return_value ());
  ------------------
  |  |  349|    102|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     51|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 51, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (141:5): [True: 51, False: 485]
  ------------------
  142|      0|#endif
  143|     97|    default:	return_trace (c->default_return_value ());
  ------------------
  |  |  349|     97|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     97|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (143:5): [True: 97, False: 439]
  ------------------
  144|    536|    }
  145|    536|  }
_ZNK2OT19KernSubTableFormat3INS_21KernAATSubTableHeaderEE8sanitizeEP21hb_sanitize_context_t:
   79|     51|  {
   80|     51|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     51|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   81|     51|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    101|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     51|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 50, False: 1]
  |  |  |  Branch (349:45): [True: 49, False: 1]
  |  |  ------------------
  ------------------
   82|     51|		  c->check_range (kernValueZ,
   83|     51|				  kernValueCount * sizeof (FWORD) +
   84|     51|				  glyphCount * 2 +
   85|     51|				  leftClassCount * rightClassCount));
   86|     51|  }

_ZNK2OT4BASE8get_axisE14hb_direction_t:
  453|  33.3k|  { return HB_DIRECTION_IS_VERTICAL (direction) ? this+vAxis : this+hAxis; }
  ------------------
  |  |  280|  33.3k|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  |  |  ------------------
  |  |  |  Branch (280:39): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
_ZNK2OT14BaseScriptList15get_base_scriptEj:
  357|  33.3k|  {
  358|  33.3k|    const BaseScriptRecord *record = &baseScriptRecords.bsearch (script);
  359|  33.3k|    if (!record->has_data ()) record = &baseScriptRecords.bsearch (HB_TAG ('D','F','L','T'));
  ------------------
  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (359:9): [True: 33.3k, False: 8]
  ------------------
  360|  33.3k|    return record->has_data () ? record->get_base_script (this) : Null (BaseScript);
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (360:12): [True: 10, False: 33.3k]
  ------------------
  361|  33.3k|  }
_ZNK2OT16BaseScriptRecord3cmpEj:
  330|    880|  int cmp (hb_tag_t key) const { return baseScriptTag.cmp (key); }
_ZNK2OT16BaseScriptRecord8has_dataEv:
  332|  66.6k|  bool has_data () const { return baseScriptTag; }
_ZNK2OT16BaseScriptRecord15get_base_scriptEPKNS_14BaseScriptListE:
  335|     10|  { return list+baseScript; }
_ZNK2OT4BASE12get_baselineEP9hb_font_tj14hb_direction_tjjPi:
  464|  33.3k|  {
  465|  33.3k|    const BaseCoord *base_coord = nullptr;
  466|  33.3k|    if (unlikely (!get_axis (direction).get_baseline (baseline_tag, script_tag, language_tag, &base_coord) ||
  ------------------
  |  |  259|  66.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.3k, False: 0]
  |  |  |  Branch (259:47): [True: 33.3k, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  467|  33.3k|		  !base_coord || !base_coord->has_data ()))
  468|  33.3k|      return false;
  469|       |
  470|      0|    if (likely (base))
  ------------------
  |  |  258|      0|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  471|      0|      *base = base_coord->get_coord (font, get_var_store (), direction);
  472|       |
  473|      0|    return true;
  474|  33.3k|  }
_ZNK2OT4Axis12get_baselineEjjjPPKNS_9BaseCoordE:
  384|  33.3k|  {
  385|  33.3k|    const BaseScript &base_script = (this+baseScriptList).get_base_script (script_tag);
  386|  33.3k|    if (!base_script.has_values ())
  ------------------
  |  Branch (386:9): [True: 33.3k, False: 9]
  ------------------
  387|  33.3k|    {
  388|  33.3k|      *coord = nullptr;
  389|  33.3k|      return false;
  390|  33.3k|    }
  391|       |
  392|      9|    if (likely (coord))
  ------------------
  |  |  258|      9|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  393|      9|    {
  394|      9|      unsigned int tag_index = 0;
  395|      9|      if (!(this+baseTagList).bfind (baseline_tag, &tag_index))
  ------------------
  |  Branch (395:11): [True: 9, False: 0]
  ------------------
  396|      9|      {
  397|      9|        *coord = nullptr;
  398|      9|        return false;
  399|      9|      }
  400|      0|      *coord = &base_script.get_base_coord (tag_index);
  401|      0|    }
  402|       |
  403|      0|    return true;
  404|      9|  }
_ZNK2OT10BaseScript10has_valuesEv:
  299|  33.3k|  bool has_values () const { return baseValues; }
_ZNK2OT4BASE8sanitizeEP21hb_sanitize_context_t:
  496|    854|  {
  497|    854|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    854|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  498|    854|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  6.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    854|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 846, False: 8]
  |  |  |  Branch (349:45): [True: 842, False: 4]
  |  |  |  Branch (349:45): [True: 485, False: 357]
  |  |  |  Branch (349:45): [True: 441, False: 44]
  |  |  |  Branch (349:45): [True: 289, False: 152]
  |  |  |  Branch (349:45): [True: 149, False: 3]
  |  |  ------------------
  ------------------
  499|    854|			  likely (version.major == 1) &&
  500|    854|			  hAxis.sanitize (c, this) &&
  501|    854|			  vAxis.sanitize (c, this) &&
  502|    854|			  (version.to_int () < 0x00010001u || varStore.sanitize (c, this))));
  503|    854|  }
_ZNK2OT4Axis8sanitizeEP21hb_sanitize_context_t:
  425|  1.19k|  {
  426|  1.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  427|  1.19k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  4.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.15k, False: 32]
  |  |  |  Branch (349:45): [True: 1.10k, False: 52]
  |  |  |  Branch (349:45): [True: 792, False: 315]
  |  |  ------------------
  ------------------
  428|  1.19k|			  baseTagList.sanitize (c, this) &&
  429|  1.19k|			  baseScriptList.sanitize (c, this)));
  430|  1.19k|  }
_ZNK2OT14BaseScriptList8sanitizeEP21hb_sanitize_context_t:
  364|  1.03k|  {
  365|  1.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  366|  1.03k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.00k, False: 34]
  |  |  |  Branch (349:45): [True: 634, False: 366]
  |  |  ------------------
  ------------------
  367|  1.03k|		  baseScriptRecords.sanitize (c, this));
  368|  1.03k|  }
_ZNK2OT16BaseScriptRecord8sanitizeEP21hb_sanitize_context_tPKv:
  338|   339k|  {
  339|   339k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   339k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  340|   339k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|   679k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   339k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 339k, False: 30]
  |  |  |  Branch (349:45): [True: 339k, False: 302]
  |  |  ------------------
  ------------------
  341|   339k|			  baseScript.sanitize (c, base)));
  342|   339k|  }
_ZNK2OT10BaseScript8sanitizeEP21hb_sanitize_context_t:
  303|  18.6k|  {
  304|  18.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  18.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  305|  18.6k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|   108k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 17.6k, False: 939]
  |  |  |  Branch (349:45): [True: 17.5k, False: 148]
  |  |  |  Branch (349:45): [True: 17.5k, False: 42]
  |  |  |  Branch (349:45): [True: 17.1k, False: 343]
  |  |  ------------------
  ------------------
  306|  18.6k|			  baseValues.sanitize (c, this) &&
  307|  18.6k|			  defaultMinMax.sanitize (c, this) &&
  308|  18.6k|			  baseLangSysRecords.sanitize (c, this)));
  309|  18.6k|  }
_ZNK2OT10BaseValues8sanitizeEP21hb_sanitize_context_t:
  243|  4.34k|  {
  244|  4.34k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.34k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  245|  4.34k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  8.52k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 4.18k, False: 159]
  |  |  |  Branch (349:45): [True: 3.99k, False: 193]
  |  |  ------------------
  ------------------
  246|  4.34k|			  baseCoords.sanitize (c, this)));
  247|  4.34k|  }
_ZNK2OT9BaseCoord8sanitizeEP21hb_sanitize_context_t:
  135|  10.9k|  {
  136|  10.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  137|  10.9k|    if (unlikely (!u.format.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  10.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.32k, False: 9.58k]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.format.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|  1.32k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.32k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  138|  9.58k|    switch (u.format) {
  139|    489|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|    489|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    489|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (139:5): [True: 489, False: 9.09k]
  ------------------
  140|  7.75k|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|  7.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.75k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (140:5): [True: 7.75k, False: 1.82k]
  ------------------
  141|    636|    case 3: return_trace (u.format3.sanitize (c));
  ------------------
  |  |  349|    636|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    636|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (141:5): [True: 636, False: 8.94k]
  ------------------
  142|    703|    default:return_trace (false);
  ------------------
  |  |  349|    703|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    703|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (142:5): [True: 703, False: 8.87k]
  ------------------
  143|  9.58k|    }
  144|  9.58k|  }
_ZNK2OT16BaseCoordFormat18sanitizeEP21hb_sanitize_context_t:
   50|    489|  {
   51|    489|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    489|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   52|    489|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    489|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    489|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   53|    489|  }
_ZNK2OT16BaseCoordFormat28sanitizeEP21hb_sanitize_context_t:
   71|  7.75k|  {
   72|  7.75k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.75k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   73|  7.75k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  7.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.75k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   74|  7.75k|  }
_ZNK2OT16BaseCoordFormat38sanitizeEP21hb_sanitize_context_t:
  101|    636|  {
  102|    636|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    636|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  103|    636|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  1.19k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    636|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 554, False: 82]
  |  |  |  Branch (349:45): [True: 545, False: 9]
  |  |  ------------------
  ------------------
  104|    636|			  deviceTable.sanitize (c, this)));
  105|    636|  }
_ZNK2OT6MinMax8sanitizeEP21hb_sanitize_context_t:
  209|  81.3k|  {
  210|  81.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  81.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  211|  81.3k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|   486k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  81.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 80.8k, False: 503]
  |  |  |  Branch (349:45): [True: 80.8k, False: 21]
  |  |  |  Branch (349:45): [True: 80.8k, False: 14]
  |  |  |  Branch (349:45): [True: 80.5k, False: 273]
  |  |  ------------------
  ------------------
  212|  81.3k|			  minCoord.sanitize (c, this) &&
  213|  81.3k|			  maxCoord.sanitize (c, this) &&
  214|  81.3k|			  featMinMaxRecords.sanitize (c, this)));
  215|  81.3k|  }
_ZNK2OT16FeatMinMaxRecord8sanitizeEP21hb_sanitize_context_tPKv:
  170|  71.6k|  {
  171|  71.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  71.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  172|  71.6k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|   286k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  71.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 71.6k, False: 3]
  |  |  |  Branch (349:45): [True: 71.6k, False: 9]
  |  |  |  Branch (349:45): [True: 71.6k, False: 10]
  |  |  ------------------
  ------------------
  173|  71.6k|			  minCoord.sanitize (c, base) &&
  174|  71.6k|			  maxCoord.sanitize (c, base)));
  175|  71.6k|  }
_ZNK2OT17BaseLangSysRecord8sanitizeEP21hb_sanitize_context_tPKv:
  273|  1.25M|  {
  274|  1.25M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.25M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  275|  1.25M|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  2.50M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.25M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.25M, False: 15]
  |  |  |  Branch (349:45): [True: 1.25M, False: 47]
  |  |  ------------------
  ------------------
  276|  1.25M|			  minMax.sanitize (c, base)));
  277|  1.25M|  }

_ZNK2OT8ClassDef8sanitizeEP21hb_sanitize_context_t:
 2157|   115k|  {
 2158|   115k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   115k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2159|   115k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  3.44k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.44k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2159:9): [True: 3.44k, False: 112k]
  ------------------
 2160|   112k|    switch (u.format) {
 2161|  10.5k|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|  10.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2161:5): [True: 10.5k, False: 101k]
  ------------------
 2162|  24.4k|    case 2: return_trace (u.format2.sanitize (c));
  ------------------
  |  |  349|  24.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2162:5): [True: 24.4k, False: 87.7k]
  ------------------
 2163|      0|#ifndef HB_NO_BEYOND_64K
 2164|  8.79k|    case 3: return_trace (u.format3.sanitize (c));
  ------------------
  |  |  349|  8.79k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.79k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2164:5): [True: 8.79k, False: 103k]
  ------------------
 2165|  19.3k|    case 4: return_trace (u.format4.sanitize (c));
  ------------------
  |  |  349|  19.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2165:5): [True: 19.3k, False: 92.7k]
  ------------------
 2166|      0|#endif
 2167|  48.9k|    default:return_trace (true);
  ------------------
  |  |  349|  48.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  48.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2167:5): [True: 48.9k, False: 63.1k]
  ------------------
 2168|   112k|    }
 2169|   112k|  }
_ZNK2OT17ClassDefFormat1_3INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 1612|  10.5k|  {
 1613|  10.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  10.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1614|  10.5k|    return_trace (c->check_struct (this) && classValue.sanitize (c));
  ------------------
  |  |  349|  21.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  10.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.5k, False: 15]
  |  |  |  Branch (349:45): [True: 10.3k, False: 186]
  |  |  ------------------
  ------------------
 1615|  10.5k|  }
_ZNK2OT17ClassDefFormat2_4INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 1889|  24.4k|  {
 1890|  24.4k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.4k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1891|  24.4k|    return_trace (rangeRecord.sanitize (c));
  ------------------
  |  |  349|  24.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  24.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1892|  24.4k|  }
_ZNK2OT17ClassDefFormat1_3INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 1612|  8.79k|  {
 1613|  8.79k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.79k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1614|  8.79k|    return_trace (c->check_struct (this) && classValue.sanitize (c));
  ------------------
  |  |  349|  17.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.79k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.78k, False: 8]
  |  |  |  Branch (349:45): [True: 8.67k, False: 109]
  |  |  ------------------
  ------------------
 1615|  8.79k|  }
_ZNK2OT17ClassDefFormat2_4INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 1889|  19.3k|  {
 1890|  19.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  19.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1891|  19.3k|    return_trace (rangeRecord.sanitize (c));
  ------------------
  |  |  349|  19.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1892|  19.3k|  }
_ZNK2OT6Device8sanitizeEP21hb_sanitize_context_t:
 3675|  8.80M|  {
 3676|  8.80M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.80M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3677|  8.80M|    if (!u.b.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  8.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3677:9): [True: 8.85k, False: 8.79M]
  ------------------
 3678|  8.79M|    switch (u.b.format) {
 3679|      0|#ifndef HB_NO_HINTING
 3680|   629k|    case 1: case 2: case 3:
  ------------------
  |  Branch (3680:5): [True: 299k, False: 8.49M]
  |  Branch (3680:13): [True: 184k, False: 8.60M]
  |  Branch (3680:21): [True: 146k, False: 8.64M]
  ------------------
 3681|   629k|      return_trace (u.hinting.sanitize (c));
  ------------------
  |  |  349|   629k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   629k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3682|      0|#endif
 3683|      0|#ifndef HB_NO_VAR
 3684|  3.98k|    case 0x8000:
  ------------------
  |  Branch (3684:5): [True: 3.98k, False: 8.79M]
  ------------------
 3685|  3.98k|      return_trace (u.variation.sanitize (c));
  ------------------
  |  |  349|  3.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3686|      0|#endif
 3687|  8.16M|    default:
  ------------------
  |  Branch (3687:5): [True: 8.16M, False: 633k]
  ------------------
 3688|  8.16M|      return_trace (true);
  ------------------
  |  |  349|  8.16M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.16M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3689|  8.79M|    }
 3690|  8.79M|  }
_ZNK2OT13HintingDevice8sanitizeEP21hb_sanitize_context_t:
 3494|   629k|  {
 3495|   629k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   629k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3496|   629k|    return_trace (c->check_struct (this) && c->check_range (this, this->get_size ()));
  ------------------
  |  |  349|  1.25M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   629k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 629k, False: 4]
  |  |  |  Branch (349:45): [True: 629k, False: 212]
  |  |  ------------------
  ------------------
 3497|   629k|  }
_ZNK2OT13HintingDevice8get_sizeEv:
 3487|   629k|  {
 3488|   629k|    unsigned int f = deltaFormat;
 3489|   629k|    if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * HBUINT16::static_size;
  ------------------
  |  |  259|  2.51M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 190k, False: 439k]
  |  |  |  Branch (259:47): [True: 0, False: 629k]
  |  |  |  Branch (259:47): [True: 0, False: 629k]
  |  |  |  Branch (259:47): [True: 190k, False: 439k]
  |  |  ------------------
  ------------------
 3490|   439k|    return HBUINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
 3491|   629k|  }
_ZNK2OT15VariationDevice8sanitizeEP21hb_sanitize_context_t:
 3603|  3.98k|  {
 3604|  3.98k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.98k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3605|  3.98k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  3.98k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3606|  3.98k|  }
_ZNK2OT14VariationStore8sanitizeEP21hb_sanitize_context_t:
 2754|  4.33k|  {
 2755|       |#ifdef HB_NO_VAR
 2756|       |    return true;
 2757|       |#endif
 2758|       |
 2759|  4.33k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.33k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2760|  4.33k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  17.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.33k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.74k, False: 2.58k]
  |  |  |  Branch (349:45): [True: 1.55k, False: 190]
  |  |  |  Branch (349:45): [True: 1.41k, False: 133]
  |  |  |  Branch (349:45): [True: 1.22k, False: 190]
  |  |  ------------------
  ------------------
 2761|  4.33k|		  format == 1 &&
 2762|  4.33k|		  regions.sanitize (c, this) &&
 2763|  4.33k|		  dataSets.sanitize (c, this));
 2764|  4.33k|  }
_ZNK2OT13VarRegionList8sanitizeEP21hb_sanitize_context_t:
 2378|  1.26k|  {
 2379|  1.26k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.26k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2380|  1.26k|    return_trace (c->check_struct (this) && axesZ.sanitize (c, axisCount * regionCount));
  ------------------
  |  |  349|  2.25k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.26k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 993, False: 271]
  |  |  |  Branch (349:45): [True: 834, False: 159]
  |  |  ------------------
  ------------------
 2381|  1.26k|  }
_ZNK2OT7VarData8sanitizeEP21hb_sanitize_context_t:
 2487|  4.64k|  {
 2488|  4.64k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.64k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2489|  4.64k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  20.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.33k, False: 2.30k]
  |  |  |  Branch (349:45): [True: 2.03k, False: 308]
  |  |  |  Branch (349:45): [True: 1.78k, False: 242]
  |  |  |  Branch (349:45): [True: 1.49k, False: 296]
  |  |  ------------------
  ------------------
 2490|  4.64k|		  regionIndices.sanitize (c) &&
 2491|  4.64k|		  wordCount () <= regionIndices.len &&
 2492|  4.64k|		  c->check_range (get_delta_bytes (),
 2493|  4.64k|				  itemCount,
 2494|  4.64k|				  get_row_size ()));
 2495|  4.64k|  }
_ZNK2OT7VarData9wordCountEv:
 2683|  55.6k|  unsigned wordCount () const { return wordSizeCount & 0x7FFFu /* WORD_DELTA_COUNT_MASK */; }
_ZNK2OT7VarData15get_delta_bytesEv:
 2619|  27.7k|  { return &StructAfter<HBUINT8> (regionIndices); }
_ZNK2OT7VarData12get_row_sizeEv:
 2424|  27.7k|  { return (wordCount () + regionIndices.len) * (longWords () ? 2 : 1); }
  ------------------
  |  Branch (2424:50): [True: 832, False: 26.8k]
  ------------------
_ZNK2OT7VarData9longWordsEv:
 2682|  53.6k|  bool longWords () const { return wordSizeCount & 0x8000u /* LONG_WORDS */; }
_ZNK2OT8ClassDef9get_classEj:
 2047|  2.50M|  {
 2048|  2.50M|    switch (u.format) {
 2049|   341k|    case 1: return u.format1.get_class (glyph_id);
  ------------------
  |  Branch (2049:5): [True: 341k, False: 2.16M]
  ------------------
 2050|  1.11M|    case 2: return u.format2.get_class (glyph_id);
  ------------------
  |  Branch (2050:5): [True: 1.11M, False: 1.38M]
  ------------------
 2051|      0|#ifndef HB_NO_BEYOND_64K
 2052|  6.07k|    case 3: return u.format3.get_class (glyph_id);
  ------------------
  |  Branch (2052:5): [True: 6.07k, False: 2.50M]
  ------------------
 2053|  79.6k|    case 4: return u.format4.get_class (glyph_id);
  ------------------
  |  Branch (2053:5): [True: 79.6k, False: 2.42M]
  ------------------
 2054|      0|#endif
 2055|   960k|    default:return 0;
  ------------------
  |  Branch (2055:5): [True: 960k, False: 1.54M]
  ------------------
 2056|  2.50M|    }
 2057|  2.50M|  }
_ZNK2OT17ClassDefFormat1_3INS_6Layout10SmallTypesEE9get_classEj:
 1529|   341k|  {
 1530|   341k|    return classValue[(unsigned int) (glyph_id - startGlyph)];
 1531|   341k|  }
_ZNK2OT17ClassDefFormat2_4INS_6Layout10SmallTypesEE9get_classEj:
 1748|  1.11M|  {
 1749|  1.11M|    return rangeRecord.bsearch (glyph_id).value;
 1750|  1.11M|  }
_ZNK2OT17ClassDefFormat1_3INS_6Layout11MediumTypesEE9get_classEj:
 1529|  6.07k|  {
 1530|  6.07k|    return classValue[(unsigned int) (glyph_id - startGlyph)];
 1531|  6.07k|  }
_ZNK2OT17ClassDefFormat2_4INS_6Layout11MediumTypesEE9get_classEj:
 1748|  79.6k|  {
 1749|  79.6k|    return rangeRecord.bsearch (glyph_id).value;
 1750|  79.6k|  }
_ZNK2OT14VariationStore12create_cacheEv:
 2699|  1.83k|  {
 2700|       |#ifdef HB_NO_VAR
 2701|       |    return nullptr;
 2702|       |#endif
 2703|  1.83k|    auto &r = this+regions;
 2704|  1.83k|    unsigned count = r.regionCount;
 2705|       |
 2706|  1.83k|    float *cache = (float *) hb_malloc (sizeof (float) * count);
  ------------------
  |  |  233|  1.83k|#define hb_malloc hb_malloc_impl
  ------------------
 2707|  1.83k|    if (unlikely (!cache)) return nullptr;
  ------------------
  |  |  259|  1.83k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 91, False: 1.74k]
  |  |  ------------------
  ------------------
 2708|       |
 2709|   960k|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (2709:26): [True: 958k, False: 1.74k]
  ------------------
 2710|   958k|      cache[i] = REGION_CACHE_ITEM_CACHE_INVALID;
  ------------------
  |  | 2334|   960k|#define REGION_CACHE_ITEM_CACHE_INVALID 2.f
  ------------------
 2711|       |
 2712|  1.74k|    return cache;
 2713|  1.83k|  }
_ZN2OT14VariationStore13destroy_cacheEPf:
 2715|  1.34M|  static void destroy_cache (cache_t *cache) { hb_free (cache); }
  ------------------
  |  |  236|  1.34M|#define hb_free hb_free_impl
  ------------------
_ZNK2OT10IndexArray11get_indexesEjPjS1_:
  445|   327k|  {
  446|   327k|    if (_count)
  ------------------
  |  Branch (446:9): [True: 327k, False: 0]
  ------------------
  447|   327k|    {
  448|   327k|      + this->as_array ().sub_array (start_offset, _count)
  449|   327k|      | hb_sink (hb_array (_indexes, *_count))
  450|   327k|      ;
  451|   327k|    }
  452|   327k|    return this->len;
  453|   327k|  }
_ZNK2OT17FeatureParamsSize8sanitizeEP21hb_sanitize_context_t:
  466|  1.05k|  {
  467|  1.05k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.05k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  468|  1.05k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 134, False: 925]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|    134|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    134|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  469|       |
  470|       |    /* This subtable has some "history", if you will.  Some earlier versions of
  471|       |     * Adobe tools calculated the offset of the FeatureParams subtable from the
  472|       |     * beginning of the FeatureList table!  Now, that is dealt with in the
  473|       |     * Feature implementation.  But we still need to be able to tell junk from
  474|       |     * real data.  Note: We don't check that the nameID actually exists.
  475|       |     *
  476|       |     * Read Roberts wrote on 9/15/06 on opentype-list@indx.co.uk :
  477|       |     *
  478|       |     * Yes, it is correct that a new version of the AFDKO (version 2.0) will be
  479|       |     * coming out soon, and that the makeotf program will build a font with a
  480|       |     * 'size' feature that is correct by the specification.
  481|       |     *
  482|       |     * The specification for this feature tag is in the "OpenType Layout Tag
  483|       |     * Registry". You can see a copy of this at:
  484|       |     * https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#tag-size
  485|       |     *
  486|       |     * Here is one set of rules to determine if the 'size' feature is built
  487|       |     * correctly, or as by the older versions of MakeOTF. You may be able to do
  488|       |     * better.
  489|       |     *
  490|       |     * Assume that the offset to the size feature is according to specification,
  491|       |     * and make the following value checks. If it fails, assume the size
  492|       |     * feature is calculated as versions of MakeOTF before the AFDKO 2.0 built it.
  493|       |     * If this fails, reject the 'size' feature. The older makeOTF's calculated the
  494|       |     * offset from the beginning of the FeatureList table, rather than from the
  495|       |     * beginning of the 'size' Feature table.
  496|       |     *
  497|       |     * If "design size" == 0:
  498|       |     *     fails check
  499|       |     *
  500|       |     * Else if ("subfamily identifier" == 0 and
  501|       |     *     "range start" == 0 and
  502|       |     *     "range end" == 0 and
  503|       |     *     "range start" == 0 and
  504|       |     *     "menu name ID" == 0)
  505|       |     *     passes check: this is the format used when there is a design size
  506|       |     * specified, but there is no recommended size range.
  507|       |     *
  508|       |     * Else if ("design size" <  "range start" or
  509|       |     *     "design size" >   "range end" or
  510|       |     *     "range end" <= "range start" or
  511|       |     *     "menu name ID"  < 256 or
  512|       |     *     "menu name ID"  > 32767 or
  513|       |     *     menu name ID is not a name ID which is actually in the name table)
  514|       |     *     fails test
  515|       |     * Else
  516|       |     *     passes test.
  517|       |     */
  518|       |
  519|    925|    if (!designSize)
  ------------------
  |  Branch (519:9): [True: 121, False: 804]
  ------------------
  520|    121|      return_trace (false);
  ------------------
  |  |  349|    121|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    121|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  521|    804|    else if (subfamilyID == 0 &&
  ------------------
  |  Branch (521:14): [True: 278, False: 526]
  ------------------
  522|    804|	     subfamilyNameID == 0 &&
  ------------------
  |  Branch (522:7): [True: 190, False: 88]
  ------------------
  523|    804|	     rangeStart == 0 &&
  ------------------
  |  Branch (523:7): [True: 145, False: 45]
  ------------------
  524|    804|	     rangeEnd == 0)
  ------------------
  |  Branch (524:7): [True: 108, False: 37]
  ------------------
  525|    108|      return_trace (true);
  ------------------
  |  |  349|    108|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    108|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  526|    696|    else if (designSize < rangeStart ||
  ------------------
  |  Branch (526:14): [True: 158, False: 538]
  ------------------
  527|    696|	     designSize > rangeEnd ||
  ------------------
  |  Branch (527:7): [True: 219, False: 319]
  ------------------
  528|    696|	     subfamilyNameID < 256 ||
  ------------------
  |  Branch (528:7): [True: 67, False: 252]
  ------------------
  529|    696|	     subfamilyNameID > 32767)
  ------------------
  |  Branch (529:7): [True: 82, False: 170]
  ------------------
  530|    526|      return_trace (false);
  ------------------
  |  |  349|    526|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    526|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  531|    170|    else
  532|    170|      return_trace (true);
  ------------------
  |  |  349|    170|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    170|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  533|    925|  }
_ZNK2OT25FeatureParamsStylisticSet8sanitizeEP21hb_sanitize_context_t:
  587|    557|  {
  588|    557|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    557|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  589|       |    /* Right now minorVersion is at zero.  Which means, any table supports
  590|       |     * the uiNameID field. */
  591|    557|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    557|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    557|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  592|    557|  }
_ZNK2OT30FeatureParamsCharacterVariants14get_charactersEjPjS1_:
  631|  33.3k|  {
  632|  33.3k|    if (char_count)
  ------------------
  |  Branch (632:9): [True: 33.3k, False: 0]
  ------------------
  633|  33.3k|    {
  634|  33.3k|      + characters.as_array ().sub_array (start_offset, char_count)
  635|  33.3k|      | hb_sink (hb_array (chars, *char_count))
  636|  33.3k|      ;
  637|  33.3k|    }
  638|  33.3k|    return characters.len;
  639|  33.3k|  }
_ZNK2OT30FeatureParamsCharacterVariants8sanitizeEP21hb_sanitize_context_t:
  665|  1.08k|  {
  666|  1.08k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.08k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  667|  1.08k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 962, False: 119]
  |  |  |  Branch (349:45): [True: 858, False: 104]
  |  |  ------------------
  ------------------
  668|  1.08k|		  characters.sanitize (c));
  669|  1.08k|  }
_ZNK2OT13FeatureParams8sanitizeEP21hb_sanitize_context_tj:
  706|   194k|  {
  707|       |#ifdef HB_NO_LAYOUT_FEATURE_PARAMS
  708|       |    return true;
  709|       |#endif
  710|   194k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   194k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  711|   194k|    if (tag == HB_TAG ('s','i','z','e'))
  ------------------
  |  |  179|   194k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (711:9): [True: 1.05k, False: 193k]
  ------------------
  712|  1.05k|      return_trace (u.size.sanitize (c));
  ------------------
  |  |  349|  1.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  713|   193k|    if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
  ------------------
  |  |  179|   193k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (713:9): [True: 557, False: 192k]
  ------------------
  714|    557|      return_trace (u.stylisticSet.sanitize (c));
  ------------------
  |  |  349|    557|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    557|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  715|   192k|    if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
  ------------------
  |  |  179|   192k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (715:9): [True: 1.08k, False: 191k]
  ------------------
  716|  1.08k|      return_trace (u.characterVariants.sanitize (c));
  ------------------
  |  |  349|  1.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  717|   191k|    return_trace (true);
  ------------------
  |  |  349|   191k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   191k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  718|   192k|  }
_ZNK2OT13FeatureParams15get_size_paramsEj:
  748|    334|  {
  749|    334|    if (tag == HB_TAG ('s','i','z','e'))
  ------------------
  |  |  179|    334|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (749:9): [True: 334, False: 0]
  ------------------
  750|    334|      return u.size;
  751|      0|    return Null (FeatureParamsSize);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  752|    334|  }
_ZNK2OT13FeatureParams24get_stylistic_set_paramsEj:
  754|      3|  {
  755|      3|    if ((tag & 0xFFFF0000u) == HB_TAG ('s','s','\0','\0')) /* ssXX */
  ------------------
  |  |  179|      3|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (755:9): [True: 0, False: 3]
  ------------------
  756|      0|      return u.stylisticSet;
  757|      3|    return Null (FeatureParamsStylisticSet);
  ------------------
  |  |  124|      3|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  758|      3|  }
_ZNK2OT13FeatureParams29get_character_variants_paramsEj:
  760|  33.3k|  {
  761|  33.3k|    if ((tag & 0xFFFF0000u) == HB_TAG ('c','v','\0','\0')) /* cvXX */
  ------------------
  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (761:9): [True: 13, False: 33.3k]
  ------------------
  762|     13|      return u.characterVariants;
  763|  33.3k|    return Null (FeatureParamsCharacterVariants);
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  764|  33.3k|  }
_ZNK2OT7Feature18get_lookup_indexesEjPjS1_:
  791|   293k|  { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); }
_ZNK2OT7Feature18get_feature_paramsEv:
  796|  67.0k|  { return this+featureParams; }
_ZNK2OT7Feature8sanitizeEP21hb_sanitize_context_tPKNS_25Record_sanitize_closure_tE:
  831|   312k|  {
  832|   312k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   312k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  833|   312k|    if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
  ------------------
  |  |  259|   616k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.1k, False: 301k]
  |  |  |  Branch (259:47): [True: 304k, False: 8.18k]
  |  |  |  Branch (259:47): [True: 301k, False: 2.99k]
  |  |  ------------------
  ------------------
  834|  11.1k|      return_trace (false);
  ------------------
  |  |  349|  11.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  835|       |
  836|       |    /* Some earlier versions of Adobe tools calculated the offset of the
  837|       |     * FeatureParams subtable from the beginning of the FeatureList table!
  838|       |     *
  839|       |     * If sanitizing "failed" for the FeatureParams subtable, try it with the
  840|       |     * alternative location.  We would know sanitize "failed" if old value
  841|       |     * of the offset was non-zero, but it's zeroed now.
  842|       |     *
  843|       |     * Only do this for the 'size' feature, since at the time of the faulty
  844|       |     * Adobe tools, only the 'size' feature had FeatureParams defined.
  845|       |     */
  846|       |
  847|   301k|    if (likely (featureParams.is_null ()))
  ------------------
  |  |  258|   301k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 107k, False: 193k]
  |  |  ------------------
  ------------------
  848|   107k|      return_trace (true);
  ------------------
  |  |  349|   107k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   107k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  849|       |
  850|   193k|    unsigned int orig_offset = featureParams;
  851|   193k|    if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE)))
  ------------------
  |  |  259|   387k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 78, False: 193k]
  |  |  |  Branch (259:47): [True: 192k, False: 1.69k]
  |  |  ------------------
  ------------------
  852|     78|      return_trace (false);
  ------------------
  |  |  349|     78|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     78|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  853|       |
  854|   193k|    if (featureParams == 0 && closure &&
  ------------------
  |  Branch (854:9): [True: 747, False: 193k]
  |  Branch (854:31): [True: 747, False: 0]
  ------------------
  855|   193k|	closure->tag == HB_TAG ('s','i','z','e') &&
  ------------------
  |  |  179|   194k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (855:2): [True: 472, False: 275]
  ------------------
  856|   193k|	closure->list_base && closure->list_base < this)
  ------------------
  |  Branch (856:2): [True: 472, False: 0]
  |  Branch (856:24): [True: 472, False: 0]
  ------------------
  857|    472|    {
  858|    472|      unsigned int new_offset_int = orig_offset -
  859|    472|				    (((char *) this) - ((char *) closure->list_base));
  860|       |
  861|    472|      Offset16To<FeatureParams> new_offset;
  862|       |      /* Check that it would not overflow. */
  863|    472|      new_offset = new_offset_int;
  864|    472|      if (new_offset == new_offset_int &&
  ------------------
  |  Branch (864:11): [True: 348, False: 124]
  |  Branch (864:11): [True: 5, False: 467]
  ------------------
  865|    472|	  c->try_set (&featureParams, new_offset_int) &&
  ------------------
  |  Branch (865:4): [True: 337, False: 11]
  ------------------
  866|    472|	  !featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))
  ------------------
  |  |  197|      0|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|    337|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (866:4): [True: 5, False: 332]
  |  Branch (866:38): [True: 337, False: 0]
  ------------------
  867|      5|	return_trace (false);
  ------------------
  |  |  349|      5|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      5|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  868|    472|    }
  869|       |
  870|   193k|    return_trace (true);
  ------------------
  |  |  349|   193k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   193k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  871|   193k|  }
_ZNK2OT7LangSys17get_feature_countEv:
 1012|  2.73M|  { return featureIndex.len; }
_ZNK2OT7LangSys17get_feature_indexEj:
 1014|  9.38M|  { return featureIndex[i]; }
_ZNK2OT7LangSys19get_feature_indexesEjPjS1_:
 1018|  33.3k|  { return featureIndex.get_indexes (start_offset, feature_count, feature_indexes); }
_ZNK2OT7LangSys20has_required_featureEv:
 1022|  98.6k|  bool has_required_feature () const { return reqFeatureIndex != 0xFFFFu; }
_ZNK2OT7LangSys26get_required_feature_indexEv:
 1024|  98.6k|  {
 1025|  98.6k|    if (reqFeatureIndex == 0xFFFFu)
  ------------------
  |  Branch (1025:9): [True: 86.5k, False: 12.0k]
  ------------------
 1026|  86.5k|      return Index::NOT_FOUND_INDEX;
 1027|  12.0k|   return reqFeatureIndex;
 1028|  98.6k|  }
_ZNK2OT7LangSys8sanitizeEP21hb_sanitize_context_tPKNS_25Record_sanitize_closure_tE:
 1105|   715k|  {
 1106|   715k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   715k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1107|   715k|    return_trace (c->check_struct (this) && featureIndex.sanitize (c));
  ------------------
  |  |  349|  1.42M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   715k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 708k, False: 7.04k]
  |  |  |  Branch (349:45): [True: 704k, False: 3.46k]
  |  |  ------------------
  ------------------
 1108|   715k|  }
_ZNK2OT6Script12get_lang_sysEj:
 1132|  2.86M|  {
 1133|  2.86M|    if (i == Index::NOT_FOUND_INDEX) return get_default_lang_sys ();
  ------------------
  |  Branch (1133:9): [True: 2.82M, False: 34.6k]
  ------------------
 1134|  34.6k|    return this+langSys[i].offset;
 1135|  2.86M|  }
_ZNK2OT6Script19find_lang_sys_indexEjPj:
 1137|  98.6k|  { return langSys.find_index (tag, index); }
_ZNK2OT6Script20get_default_lang_sysEv:
 1140|  2.82M|  const LangSys& get_default_lang_sys () const { return this+defaultLangSys; }
_ZNK2OT6Script8sanitizeEP21hb_sanitize_context_tPKNS_25Record_sanitize_closure_tE:
 1230|  67.0k|  {
 1231|  67.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  67.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1232|  67.0k|    return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
  ------------------
  |  |  349|   131k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  67.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 64.5k, False: 2.49k]
  |  |  |  Branch (349:45): [True: 62.1k, False: 2.36k]
  |  |  ------------------
  ------------------
 1233|  67.0k|  }
_ZNK2OT6Lookup18get_subtable_countEv:
 1295|  4.63M|  unsigned int get_subtable_count () const { return subTable.len; }
_ZNK2OT6Lookup8get_typeEv:
 1319|   931k|  unsigned int get_type () const { return lookupType; }
_ZNK2OT6Lookup9get_propsEv:
 1325|  6.11M|  {
 1326|  6.11M|    unsigned int flag = lookupFlag;
 1327|  6.11M|    if (unlikely (flag & LookupFlag::UseMarkFilteringSet))
  ------------------
  |  |  259|  6.11M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 187k, False: 5.92M]
  |  |  ------------------
  ------------------
 1328|   187k|    {
 1329|   187k|      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
 1330|   187k|      flag += (markFilteringSet << 16);
 1331|   187k|    }
 1332|  6.11M|    return flag;
 1333|  6.11M|  }
_ZN2OT6Lookup9serializeEP22hb_serialize_context_tjjj:
 1353|  1.71k|  {
 1354|  1.71k|    TRACE_SERIALIZE (this);
  ------------------
  |  |  434|  1.71k|#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1355|  1.71k|    if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 81, False: 1.63k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->extend_min (this))) return_trace (false);
  ------------------
  |  |  349|     81|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     81|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1356|  1.63k|    lookupType = lookup_type;
 1357|  1.63k|    lookupFlag = lookup_props & 0xFFFFu;
 1358|  1.63k|    if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
                  if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1359|  1.63k|    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
  ------------------
  |  Branch (1359:9): [True: 0, False: 1.63k]
  ------------------
 1360|      0|    {
 1361|      0|      if (unlikely (!c->extend (this))) return_trace (false);
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                    if (unlikely (!c->extend (this))) return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1362|      0|      HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
 1363|      0|      markFilteringSet = lookup_props >> 16;
 1364|      0|    }
 1365|  1.63k|    return_trace (true);
  ------------------
  |  |  349|  1.63k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1366|  1.63k|  }
_ZNK2OT8ClassDef4costEv:
 2172|  13.8k|  {
 2173|  13.8k|    switch (u.format) {
 2174|  1.62k|    case 1: return u.format1.cost ();
  ------------------
  |  Branch (2174:5): [True: 1.62k, False: 12.2k]
  ------------------
 2175|  3.10k|    case 2: return u.format2.cost ();
  ------------------
  |  Branch (2175:5): [True: 3.10k, False: 10.7k]
  ------------------
 2176|      0|#ifndef HB_NO_BEYOND_64K
 2177|  1.14k|    case 3: return u.format3.cost ();
  ------------------
  |  Branch (2177:5): [True: 1.14k, False: 12.6k]
  ------------------
 2178|  3.45k|    case 4: return u.format4.cost ();
  ------------------
  |  Branch (2178:5): [True: 3.45k, False: 10.3k]
  ------------------
 2179|      0|#endif
 2180|  4.50k|    default:return 0u;
  ------------------
  |  Branch (2180:5): [True: 4.50k, False: 9.33k]
  ------------------
 2181|  13.8k|    }
 2182|  13.8k|  }
_ZNK2OT13VarRegionAxis8evaluateEi:
 2295|  83.2k|  {
 2296|  83.2k|    int peak = peakCoord.to_int ();
 2297|  83.2k|    if (peak == 0 || coord == peak)
  ------------------
  |  Branch (2297:9): [True: 31.9k, False: 51.3k]
  |  Branch (2297:22): [True: 312, False: 51.0k]
  ------------------
 2298|  32.2k|      return 1.f;
 2299|       |
 2300|  51.0k|    int start = startCoord.to_int (), end = endCoord.to_int ();
 2301|       |
 2302|       |    /* TODO Move these to sanitize(). */
 2303|  51.0k|    if (unlikely (start > peak || peak > end))
  ------------------
  |  |  259|  83.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 41.6k, False: 9.33k]
  |  |  |  Branch (259:47): [True: 18.5k, False: 32.4k]
  |  |  |  Branch (259:47): [True: 23.1k, False: 9.33k]
  |  |  ------------------
  ------------------
 2304|  41.6k|      return 1.f;
 2305|  9.33k|    if (unlikely (start < 0 && end > 0 && peak != 0))
  ------------------
  |  |  259|  22.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.40k, False: 7.92k]
  |  |  |  Branch (259:47): [True: 2.19k, False: 7.13k]
  |  |  |  Branch (259:47): [True: 1.40k, False: 787]
  |  |  |  Branch (259:47): [True: 1.40k, False: 0]
  |  |  ------------------
  ------------------
 2306|  1.40k|      return 1.f;
 2307|       |
 2308|  7.92k|    if (coord <= start || end <= coord)
  ------------------
  |  Branch (2308:9): [True: 3.95k, False: 3.97k]
  |  Branch (2308:27): [True: 412, False: 3.55k]
  ------------------
 2309|  4.36k|      return 0.f;
 2310|       |
 2311|       |    /* Interpolate */
 2312|  3.55k|    if (coord < peak)
  ------------------
  |  Branch (2312:9): [True: 2.72k, False: 833]
  ------------------
 2313|  2.72k|      return float (coord - start) / (peak - start);
 2314|    833|    else
 2315|    833|      return float (end - coord) / (end - peak);
 2316|  3.55k|  }
_ZNK2OT13VarRegionList8evaluateEjPKijPf:
 2343|  88.9k|  {
 2344|  88.9k|    if (unlikely (region_index >= regionCount))
  ------------------
  |  |  259|  88.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 57.6k, False: 31.3k]
  |  |  ------------------
  ------------------
 2345|  57.6k|      return 0.;
 2346|       |
 2347|  31.3k|    float *cached_value = nullptr;
 2348|  31.3k|    if (cache)
  ------------------
  |  Branch (2348:9): [True: 21.9k, False: 9.44k]
  ------------------
 2349|  21.9k|    {
 2350|  21.9k|      cached_value = &(cache[region_index]);
 2351|  21.9k|      if (likely (*cached_value != REGION_CACHE_ITEM_CACHE_INVALID))
  ------------------
  |  |  258|  21.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 21.1k, False: 775]
  |  |  ------------------
  ------------------
 2352|  21.1k|	return *cached_value;
 2353|  21.9k|    }
 2354|       |
 2355|  10.2k|    const VarRegionAxis *axes = axesZ.arrayZ + (region_index * axisCount);
 2356|       |
 2357|  10.2k|    float v = 1.;
 2358|  10.2k|    unsigned int count = axisCount;
 2359|  89.1k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (2359:30): [True: 83.2k, False: 5.85k]
  ------------------
 2360|  83.2k|    {
 2361|  83.2k|      int coord = i < coord_len ? coords[i] : 0;
  ------------------
  |  Branch (2361:19): [True: 61.7k, False: 21.4k]
  ------------------
 2362|  83.2k|      float factor = axes[i].evaluate (coord);
 2363|  83.2k|      if (factor == 0.f)
  ------------------
  |  Branch (2363:11): [True: 4.36k, False: 78.8k]
  ------------------
 2364|  4.36k|      {
 2365|  4.36k|        if (cache)
  ------------------
  |  Branch (2365:13): [True: 205, False: 4.16k]
  ------------------
 2366|    205|	  *cached_value = 0.;
 2367|  4.36k|	return 0.;
 2368|  4.36k|      }
 2369|  78.8k|      v *= factor;
 2370|  78.8k|    }
 2371|       |
 2372|  5.85k|    if (cache)
  ------------------
  |  Branch (2372:9): [True: 570, False: 5.28k]
  ------------------
 2373|    570|      *cached_value = v;
 2374|  5.85k|    return v;
 2375|  10.2k|  }
_ZNK2OT7VarData22get_region_index_countEv:
 2421|  1.50k|  { return regionIndices.len; }
_ZNK2OT7VarData9get_deltaEjPKijRKNS_13VarRegionListEPf:
 2436|  70.7k|  {
 2437|  70.7k|    if (unlikely (inner >= itemCount))
  ------------------
  |  |  259|  70.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44.8k, False: 25.9k]
  |  |  ------------------
  ------------------
 2438|  44.8k|      return 0.;
 2439|       |
 2440|  25.9k|   unsigned int count = regionIndices.len;
 2441|  25.9k|   bool is_long = longWords ();
 2442|  25.9k|   unsigned word_count = wordCount ();
 2443|  25.9k|   unsigned int scount = is_long ? count : word_count;
  ------------------
  |  Branch (2443:26): [True: 625, False: 25.3k]
  ------------------
 2444|  25.9k|   unsigned int lcount = is_long ? word_count : 0;
  ------------------
  |  Branch (2444:26): [True: 625, False: 25.3k]
  ------------------
 2445|       |
 2446|  25.9k|   const HBUINT8 *bytes = get_delta_bytes ();
 2447|  25.9k|   const HBUINT8 *row = bytes + inner * get_row_size ();
 2448|       |
 2449|  25.9k|   float delta = 0.;
 2450|  25.9k|   unsigned int i = 0;
 2451|       |
 2452|  25.9k|   const HBINT32 *lcursor = reinterpret_cast<const HBINT32 *> (row);
 2453|  29.8k|   for (; i < lcount; i++)
  ------------------
  |  Branch (2453:11): [True: 3.87k, False: 25.9k]
  ------------------
 2454|  3.87k|   {
 2455|  3.87k|     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
 2456|  3.87k|     delta += scalar * *lcursor++;
 2457|  3.87k|   }
 2458|  25.9k|   const HBINT16 *scursor = reinterpret_cast<const HBINT16 *> (lcursor);
 2459|  45.4k|   for (; i < scount; i++)
  ------------------
  |  Branch (2459:11): [True: 19.4k, False: 25.9k]
  ------------------
 2460|  19.4k|   {
 2461|  19.4k|     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
 2462|  19.4k|     delta += scalar * *scursor++;
 2463|  19.4k|   }
 2464|  25.9k|   const HBINT8 *bcursor = reinterpret_cast<const HBINT8 *> (scursor);
 2465|  91.0k|   for (; i < count; i++)
  ------------------
  |  Branch (2465:11): [True: 65.1k, False: 25.9k]
  ------------------
 2466|  65.1k|   {
 2467|  65.1k|     float scalar = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count, cache);
 2468|  65.1k|     delta += scalar * *bcursor++;
 2469|  65.1k|   }
 2470|       |
 2471|  25.9k|   return delta;
 2472|  70.7k|  }
_ZNK2OT7VarData18get_region_scalarsEPKijRKNS_13VarRegionListEPfj:
 2478|     54|  {
 2479|     54|    unsigned count = hb_min (num_scalars, regionIndices.len);
 2480|    490|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (2480:30): [True: 436, False: 54]
  ------------------
 2481|    436|      scalars[i] = regions.evaluate (regionIndices.arrayZ[i], coords, coord_count);
 2482|     54|    for (unsigned int i = count; i < num_scalars; i++)
  ------------------
  |  Branch (2482:34): [True: 0, False: 54]
  ------------------
 2483|      0|      scalars[i] = 0.f;
 2484|     54|  }
_ZNK2OT14VariationStore9get_deltaEjjPKijPf:
 2721|  1.35M|  {
 2722|       |#ifdef HB_NO_VAR
 2723|       |    return 0.f;
 2724|       |#endif
 2725|       |
 2726|  1.35M|    if (unlikely (outer >= dataSets.len))
  ------------------
  |  |  259|  1.35M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.28M, False: 70.7k]
  |  |  ------------------
  ------------------
 2727|  1.28M|      return 0.f;
 2728|       |
 2729|  70.7k|    return (this+dataSets[outer]).get_delta (inner,
 2730|  70.7k|					     coords, coord_count,
 2731|  70.7k|					     this+regions,
 2732|  70.7k|					     cache);
 2733|  1.35M|  }
_ZNK2OT14VariationStore9get_deltaEjPKijPf:
 2739|  1.35M|  {
 2740|  1.35M|    unsigned int outer = index >> 16;
 2741|  1.35M|    unsigned int inner = index & 0xFFFF;
 2742|  1.35M|    return get_delta (outer, inner, coords, coord_count, cache);
 2743|  1.35M|  }
_ZNK2OT14VariationStore9get_deltaEj10hb_array_tIiEPf:
 2747|  1.35M|  {
 2748|  1.35M|    return get_delta (index,
 2749|  1.35M|		      coords.arrayZ, coords.length,
 2750|  1.35M|		      cache);
 2751|  1.35M|  }
_ZNK2OT14VariationStore22get_region_index_countEj:
 2864|  1.50k|  {
 2865|       |#ifdef HB_NO_VAR
 2866|       |    return 0;
 2867|       |#endif
 2868|  1.50k|    return (this+dataSets[major]).get_region_index_count ();
 2869|  1.50k|  }
_ZNK2OT14VariationStore18get_region_scalarsEjPKijPfj:
 2875|     54|  {
 2876|       |#ifdef HB_NO_VAR
 2877|       |    for (unsigned i = 0; i < num_scalars; i++)
 2878|       |      scalars[i] = 0.f;
 2879|       |    return;
 2880|       |#endif
 2881|       |
 2882|     54|    (this+dataSets[major]).get_region_scalars (coords, coord_count,
 2883|     54|					       this+regions,
 2884|     54|					       &scalars[0], num_scalars);
 2885|     54|  }
_ZNK2OT16ConditionFormat18evaluateEPKij:
 2985|    809|  {
 2986|    809|    int coord = axisIndex < coord_len ? coords[axisIndex] : 0;
  ------------------
  |  Branch (2986:17): [True: 116, False: 693]
  ------------------
 2987|    809|    return filterRangeMinValue.to_int () <= coord && coord <= filterRangeMaxValue.to_int ();
  ------------------
  |  Branch (2987:12): [True: 620, False: 189]
  |  Branch (2987:54): [True: 566, False: 54]
  ------------------
 2988|    809|  }
_ZNK2OT16ConditionFormat18sanitizeEP21hb_sanitize_context_t:
 2991|    421|  {
 2992|    421|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    421|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2993|    421|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    421|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    421|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2994|    421|  }
_ZNK2OT9Condition8evaluateEPKij:
 3008|  2.46k|  {
 3009|  2.46k|    switch (u.format) {
 3010|    809|    case 1: return u.format1.evaluate (coords, coord_len);
  ------------------
  |  Branch (3010:5): [True: 809, False: 1.66k]
  ------------------
 3011|  1.66k|    default:return false;
  ------------------
  |  Branch (3011:5): [True: 1.66k, False: 809]
  ------------------
 3012|  2.46k|    }
 3013|  2.46k|  }
_ZNK2OT9Condition8sanitizeEP21hb_sanitize_context_t:
 3036|  3.88k|  {
 3037|  3.88k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.88k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3038|  3.88k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  1.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.30k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3038:9): [True: 1.30k, False: 2.58k]
  ------------------
 3039|  2.58k|    switch (u.format) {
 3040|    421|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|    421|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    421|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3040:5): [True: 421, False: 2.16k]
  ------------------
 3041|  2.16k|    default:return_trace (true);
  ------------------
  |  |  349|  2.16k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.16k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3041:5): [True: 2.16k, False: 421]
  ------------------
 3042|  2.58k|    }
 3043|  2.58k|  }
_ZNK2OT12ConditionSet8evaluateEPKij:
 3057|  14.4k|  {
 3058|  14.4k|    unsigned int count = conditions.len;
 3059|  14.9k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (3059:30): [True: 2.46k, False: 12.5k]
  ------------------
 3060|  2.46k|      if (!(this+conditions.arrayZ[i]).evaluate (coords, coord_len))
  ------------------
  |  Branch (3060:11): [True: 1.90k, False: 566]
  ------------------
 3061|  1.90k|	return false;
 3062|  12.5k|    return true;
 3063|  14.4k|  }
_ZNK2OT12ConditionSet8sanitizeEP21hb_sanitize_context_t:
 3134|  3.15k|  {
 3135|  3.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3136|  3.15k|    return_trace (conditions.sanitize (c, this));
  ------------------
  |  |  349|  3.15k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3137|  3.15k|  }
_ZNK2OT30FeatureTableSubstitutionRecord8sanitizeEP21hb_sanitize_context_tPKv:
 3189|  8.47k|  {
 3190|  8.47k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  8.47k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3191|  8.47k|    return_trace (c->check_struct (this) && feature.sanitize (c, base));
  ------------------
  |  |  349|  16.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.47k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 8.45k, False: 11]
  |  |  |  Branch (349:45): [True: 8.43k, False: 26]
  |  |  ------------------
  ------------------
 3192|  8.47k|  }
_ZNK2OT24FeatureTableSubstitution15find_substituteEj:
 3204|  35.0k|  {
 3205|  35.0k|    unsigned int count = substitutions.len;
 3206|  37.0k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (3206:30): [True: 36.0k, False: 956]
  ------------------
 3207|  36.0k|    {
 3208|  36.0k|      const FeatureTableSubstitutionRecord &record = substitutions.arrayZ[i];
 3209|  36.0k|      if (record.featureIndex == feature_index)
  ------------------
  |  Branch (3209:11): [True: 34.0k, False: 1.98k]
  ------------------
 3210|  34.0k|	return &(this+record.feature);
 3211|  36.0k|    }
 3212|    956|    return nullptr;
 3213|  35.0k|  }
_ZNK2OT24FeatureTableSubstitution8sanitizeEP21hb_sanitize_context_t:
 3271|  3.04k|  {
 3272|  3.04k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.04k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3273|  3.04k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  8.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.55k, False: 1.49k]
  |  |  |  Branch (349:45): [True: 1.17k, False: 380]
  |  |  |  Branch (349:45): [True: 1.05k, False: 123]
  |  |  ------------------
  ------------------
 3274|  3.04k|		  likely (version.major == 1) &&
 3275|  3.04k|		  substitutions.sanitize (c, this));
 3276|  3.04k|  }
_ZNK2OT22FeatureVariationRecord8sanitizeEP21hb_sanitize_context_tPKv:
 3334|  6.37k|  {
 3335|  6.37k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.37k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3336|  6.37k|    return_trace (conditions.sanitize (c, base) &&
  ------------------
  |  |  349|  12.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.24k, False: 130]
  |  |  |  Branch (349:45): [True: 6.13k, False: 104]
  |  |  ------------------
  ------------------
 3337|  6.37k|		  substitutions.sanitize (c, base));
 3338|  6.37k|  }
_ZNK2OT17FeatureVariations10find_indexEPKijPj:
 3355|  1.23M|  {
 3356|  1.23M|    unsigned int count = varRecords.len;
 3357|  1.23M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (3357:30): [True: 14.4k, False: 1.21M]
  ------------------
 3358|  14.4k|    {
 3359|  14.4k|      const FeatureVariationRecord &record = varRecords.arrayZ[i];
 3360|  14.4k|      if ((this+record.conditions).evaluate (coords, coord_len))
  ------------------
  |  Branch (3360:11): [True: 12.5k, False: 1.90k]
  ------------------
 3361|  12.5k|      {
 3362|  12.5k|	*index = i;
 3363|  12.5k|	return true;
 3364|  12.5k|      }
 3365|  14.4k|    }
 3366|  1.21M|    *index = NOT_FOUND_INDEX;
 3367|  1.21M|    return false;
 3368|  1.23M|  }
_ZNK2OT17FeatureVariations15find_substituteEjj:
 3372|  35.0k|  {
 3373|  35.0k|    const FeatureVariationRecord &record = varRecords[variations_index];
 3374|  35.0k|    return (this+record.substitutions).find_substitute (feature_index);
 3375|  35.0k|  }
_ZNK2OT17FeatureVariations8sanitizeEP21hb_sanitize_context_t:
 3452|  2.17k|  {
 3453|  2.17k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.17k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3454|  2.17k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  7.76k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.17k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.76k, False: 415]
  |  |  |  Branch (349:45): [True: 1.65k, False: 111]
  |  |  |  Branch (349:45): [True: 1.34k, False: 310]
  |  |  ------------------
  ------------------
 3455|  2.17k|		  likely (version.major == 1) &&
 3456|  2.17k|		  varRecords.sanitize (c, this));
 3457|  2.17k|  }
_ZNK2OT13HintingDevice11get_x_deltaEP9hb_font_t:
 3479|    532|  { return get_delta (font->x_ppem, font->x_scale); }
_ZNK2OT13HintingDevice11get_y_deltaEP9hb_font_t:
 3482|    641|  { return get_delta (font->y_ppem, font->y_scale); }
_ZNK2OT13HintingDevice9get_deltaEji:
 3508|  1.17k|  {
 3509|  1.17k|    if (!ppem) return 0;
  ------------------
  |  Branch (3509:9): [True: 1.17k, False: 0]
  ------------------
 3510|       |
 3511|      0|    int pixels = get_delta_pixels (ppem);
 3512|       |
 3513|      0|    if (!pixels) return 0;
  ------------------
  |  Branch (3513:9): [True: 0, False: 0]
  ------------------
 3514|       |
 3515|      0|    return (int) (pixels * (int64_t) scale / ppem);
 3516|      0|  }
_ZNK2OT15VariationDevice11get_x_deltaEP9hb_font_tRKNS_14VariationStoreEPf:
 3563|    187|  { return font->em_scalef_x (get_delta (font, store, store_cache)); }
_ZNK2OT15VariationDevice11get_y_deltaEP9hb_font_tRKNS_14VariationStoreEPf:
 3568|    231|  { return font->em_scalef_y (get_delta (font, store, store_cache)); }
_ZNK2OT15VariationDevice9get_deltaEP9hb_font_tRKNS_14VariationStoreEPf:
 3613|    418|  {
 3614|    418|    return store.get_delta (varIdx, font->coords, font->num_coords, (VariationStore::cache_t *) store_cache);
 3615|    418|  }
_ZNK2OT6Device11get_x_deltaEP9hb_font_tRKNS_14VariationStoreEPf:
 3640|   235k|  {
 3641|   235k|    switch (u.b.format)
 3642|   235k|    {
 3643|      0|#ifndef HB_NO_HINTING
 3644|    532|    case 1: case 2: case 3:
  ------------------
  |  Branch (3644:5): [True: 229, False: 235k]
  |  Branch (3644:13): [True: 153, False: 235k]
  |  Branch (3644:21): [True: 150, False: 235k]
  ------------------
 3645|    532|      return u.hinting.get_x_delta (font);
 3646|      0|#endif
 3647|      0|#ifndef HB_NO_VAR
 3648|    187|    case 0x8000:
  ------------------
  |  Branch (3648:5): [True: 187, False: 235k]
  ------------------
 3649|    187|      return u.variation.get_x_delta (font, store, store_cache);
 3650|      0|#endif
 3651|   234k|    default:
  ------------------
  |  Branch (3651:5): [True: 234k, False: 719]
  ------------------
 3652|   234k|      return 0;
 3653|   235k|    }
 3654|   235k|  }
_ZNK2OT6Device11get_y_deltaEP9hb_font_tRKNS_14VariationStoreEPf:
 3658|  1.56M|  {
 3659|  1.56M|    switch (u.b.format)
 3660|  1.56M|    {
 3661|    641|    case 1: case 2: case 3:
  ------------------
  |  Branch (3661:5): [True: 438, False: 1.56M]
  |  Branch (3661:13): [True: 111, False: 1.56M]
  |  Branch (3661:21): [True: 92, False: 1.56M]
  ------------------
 3662|    641|#ifndef HB_NO_HINTING
 3663|    641|      return u.hinting.get_y_delta (font);
 3664|      0|#endif
 3665|      0|#ifndef HB_NO_VAR
 3666|    231|    case 0x8000:
  ------------------
  |  Branch (3666:5): [True: 231, False: 1.56M]
  ------------------
 3667|    231|      return u.variation.get_y_delta (font, store, store_cache);
 3668|      0|#endif
 3669|  1.56M|    default:
  ------------------
  |  Branch (3669:5): [True: 1.56M, False: 872]
  ------------------
 3670|  1.56M|      return 0;
 3671|  1.56M|    }
 3672|  1.56M|  }
_ZNK2OT13RecordArrayOfINS_7LangSysEE10find_indexEjPj:
  949|  98.6k|  {
  950|  98.6k|    return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
  951|  98.6k|  }
_ZNK2OT6RecordINS_7LangSysEE3cmpEj:
  886|  11.6k|  int cmp (hb_tag_t a) const { return tag.cmp (a); }
_ZNK2OT6RecordINS_7LangSysEE8sanitizeEP21hb_sanitize_context_tPKv:
  912|  17.4M|  {
  913|  17.4M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.4M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  914|  17.4M|    const Record_sanitize_closure_t closure = {tag, base};
  915|  17.4M|    return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure));
  ------------------
  |  |  349|  34.9M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.4M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 17.4M, False: 32]
  |  |  |  Branch (349:45): [True: 17.4M, False: 1.38k]
  |  |  ------------------
  ------------------
  916|  17.4M|  }
_ZNK2OT17ClassDefFormat1_3INS_6Layout10SmallTypesEE4costEv:
 1617|  1.62k|  unsigned cost () const { return 1; }
_ZNK2OT17ClassDefFormat2_4INS_6Layout10SmallTypesEE4costEv:
 1894|  3.10k|  unsigned cost () const { return hb_bit_storage ((unsigned) rangeRecord.len); /* bsearch cost */ }
_ZNK2OT17ClassDefFormat1_3INS_6Layout11MediumTypesEE4costEv:
 1617|  1.14k|  unsigned cost () const { return 1; }
_ZNK2OT17ClassDefFormat2_4INS_6Layout11MediumTypesEE4costEv:
 1894|  3.45k|  unsigned cost () const { return hb_bit_storage ((unsigned) rangeRecord.len); /* bsearch cost */ }
_ZNK2OT12RecordListOfINS_6ScriptEEixEj:
  958|  2.96M|  { return this+this->get_offset (i); }
_ZNK2OT13RecordArrayOfINS_6ScriptEE10get_offsetEj:
  930|  2.96M|  { return (*this)[i].offset; }
_ZNK2OT13RecordArrayOfINS_6ScriptEE10find_indexEjPj:
  949|   385k|  {
  950|   385k|    return this->bfind (tag, index, HB_NOT_FOUND_STORE, Index::NOT_FOUND_INDEX);
  951|   385k|  }
_ZNK2OT6RecordINS_6ScriptEE3cmpEj:
  886|  42.9k|  int cmp (hb_tag_t a) const { return tag.cmp (a); }
_ZNK2OT13RecordArrayOfINS_7FeatureEE7get_tagEj:
  934|  10.0M|  { return (*this)[i].tag; }
_ZNK2OT12RecordListOfINS_7FeatureEEixEj:
  958|   326k|  { return this+this->get_offset (i); }
_ZNK2OT13RecordArrayOfINS_7FeatureEE10get_offsetEj:
  930|   326k|  { return (*this)[i].offset; }
_ZNK2OT6Lookup12get_subtableINS_6Layout9GPOS_impl17PosLookupSubTableEEERKT_j:
 1306|   475k|  { return this+get_subtables<TSubTable> ()[i]; }
_ZNK2OT6Lookup13get_subtablesINS_6Layout9GPOS_impl17PosLookupSubTableEEERKNS_7ArrayOfINS_8OffsetToIT_NS_7IntTypeItLj2EEELb1EEES9_EEv:
 1299|   554k|  { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); }
_ZNK2OT6Lookup8sanitizeINS_6Layout9GPOS_impl17PosLookupSubTableEEEbP21hb_sanitize_context_t:
 1403|  95.2k|  {
 1404|  95.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  95.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1405|  95.2k|    if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|  15.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1405:11): [True: 85.4k, False: 9.82k]
  |  Branch (1405:37): [True: 80.1k, False: 5.27k]
  ------------------
 1406|       |
 1407|  80.1k|    unsigned subtables = get_subtable_count ();
 1408|  80.1k|    if (unlikely (!c->visit_subtables (subtables))) return_trace (false);
  ------------------
  |  |  259|  80.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.18k, False: 78.9k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->visit_subtables (subtables))) return_trace (false);
  ------------------
  |  |  349|  1.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1409|       |
 1410|  78.9k|    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
  ------------------
  |  Branch (1410:9): [True: 6.53k, False: 72.4k]
  ------------------
 1411|  6.53k|    {
 1412|  6.53k|      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
 1413|  6.53k|      if (!markFilteringSet.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|     86|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     86|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1413:11): [True: 86, False: 6.45k]
  ------------------
 1414|  6.53k|    }
 1415|       |
 1416|  78.8k|    if (unlikely (!get_subtables<TSubTable> ().sanitize (c, this, get_type ())))
  ------------------
  |  |  259|  78.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.75k, False: 75.1k]
  |  |  ------------------
  ------------------
 1417|  3.75k|      return_trace (false);
  ------------------
  |  |  349|  3.75k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.75k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1418|       |
 1419|  75.1k|    if (unlikely (get_type () == TSubTable::Extension && !c->get_edit_count ()))
  ------------------
  |  |  259|  76.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 682, False: 74.4k]
  |  |  |  Branch (259:47): [True: 1.30k, False: 73.8k]
  |  |  |  Branch (259:47): [True: 682, False: 627]
  |  |  ------------------
  ------------------
 1420|    682|    {
 1421|       |      /* The spec says all subtables of an Extension lookup should
 1422|       |       * have the same type, which shall not be the Extension type
 1423|       |       * itself (but we already checked for that).
 1424|       |       * This is specially important if one has a reverse type!
 1425|       |       *
 1426|       |       * We only do this if sanitizer edit_count is zero.  Otherwise,
 1427|       |       * some of the subtables might have become insane after they
 1428|       |       * were sanity-checked by the edits of subsequent subtables.
 1429|       |       * https://bugs.chromium.org/p/chromium/issues/detail?id=960331
 1430|       |       */
 1431|    682|      unsigned int type = get_subtable<TSubTable> (0).u.extension.get_type ();
 1432|  7.83k|      for (unsigned int i = 1; i < subtables; i++)
  ------------------
  |  Branch (1432:32): [True: 7.16k, False: 673]
  ------------------
 1433|  7.16k|	if (get_subtable<TSubTable> (i).u.extension.get_type () != type)
  ------------------
  |  Branch (1433:6): [True: 9, False: 7.15k]
  ------------------
 1434|      9|	  return_trace (false);
  ------------------
  |  |  349|      9|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      9|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1435|    682|    }
 1436|  75.1k|    return_trace (true);
  ------------------
  |  |  349|  75.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  75.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1437|  75.1k|  }
_ZNK2OT12RecordListOfINS_6ScriptEE8sanitizeEP21hb_sanitize_context_t:
  974|  39.2k|  {
  975|  39.2k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  39.2k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  976|  39.2k|    return_trace (RecordArrayOf<Type>::sanitize (c, this));
  ------------------
  |  |  349|  39.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  39.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  977|  39.2k|  }
_ZNK2OT6RecordINS_6ScriptEE8sanitizeEP21hb_sanitize_context_tPKv:
  912|  1.46M|  {
  913|  1.46M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.46M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  914|  1.46M|    const Record_sanitize_closure_t closure = {tag, base};
  915|  1.46M|    return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure));
  ------------------
  |  |  349|  2.93M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.46M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.46M, False: 52]
  |  |  |  Branch (349:45): [True: 1.46M, False: 2.08k]
  |  |  ------------------
  ------------------
  916|  1.46M|  }
_ZNK2OT12RecordListOfINS_7FeatureEE8sanitizeEP21hb_sanitize_context_t:
  974|  33.0k|  {
  975|  33.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  33.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  976|  33.0k|    return_trace (RecordArrayOf<Type>::sanitize (c, this));
  ------------------
  |  |  349|  33.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  33.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  977|  33.0k|  }
_ZNK2OT6RecordINS_7FeatureEE8sanitizeEP21hb_sanitize_context_tPKv:
  912|  1.58M|  {
  913|  1.58M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.58M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  914|  1.58M|    const Record_sanitize_closure_t closure = {tag, base};
  915|  1.58M|    return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure));
  ------------------
  |  |  349|  3.16M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.58M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.58M, False: 45]
  |  |  |  Branch (349:45): [True: 1.57M, False: 1.35k]
  |  |  ------------------
  ------------------
  916|  1.58M|  }
_ZNK2OT6Lookup8dispatchINS_6Layout9GPOS_impl17PosLookupSubTableENS_33hb_accelerate_subtables_context_tEJEEENT0_8return_tEPS6_DpOT1_:
 1337|  17.7k|  {
 1338|  17.7k|    unsigned int lookup_type = get_type ();
 1339|  17.7k|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|  17.7k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1340|  17.7k|    unsigned int count = get_subtable_count ();
 1341|   485k|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (1341:30): [True: 468k, False: 17.7k]
  ------------------
 1342|   468k|      typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
 1343|   468k|      if (c->stop_sublookup_iteration (r))
  ------------------
  |  Branch (1343:11): [True: 0, False: 468k]
  ------------------
 1344|      0|	return_trace (r);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1345|   468k|    }
 1346|  17.7k|    return_trace (c->default_return_value ());
  ------------------
  |  |  349|  17.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1347|  17.7k|  }
_ZNK2OT6Lookup8sanitizeINS_6Layout9GSUB_impl19SubstLookupSubTableEEEbP21hb_sanitize_context_t:
 1403|   130k|  {
 1404|   130k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   130k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1405|   130k|    if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|  20.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1405:11): [True: 116k, False: 14.0k]
  |  Branch (1405:37): [True: 109k, False: 6.49k]
  ------------------
 1406|       |
 1407|   109k|    unsigned subtables = get_subtable_count ();
 1408|   109k|    if (unlikely (!c->visit_subtables (subtables))) return_trace (false);
  ------------------
  |  |  259|   109k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.05k, False: 108k]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->visit_subtables (subtables))) return_trace (false);
  ------------------
  |  |  349|  1.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1409|       |
 1410|   108k|    if (lookupFlag & LookupFlag::UseMarkFilteringSet)
  ------------------
  |  Branch (1410:9): [True: 6.99k, False: 101k]
  ------------------
 1411|  6.99k|    {
 1412|  6.99k|      const HBUINT16 &markFilteringSet = StructAfter<HBUINT16> (subTable);
 1413|  6.99k|      if (!markFilteringSet.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|     96|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     96|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (1413:11): [True: 96, False: 6.90k]
  ------------------
 1414|  6.99k|    }
 1415|       |
 1416|   108k|    if (unlikely (!get_subtables<TSubTable> ().sanitize (c, this, get_type ())))
  ------------------
  |  |  259|   108k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4.96k, False: 103k]
  |  |  ------------------
  ------------------
 1417|  4.96k|      return_trace (false);
  ------------------
  |  |  349|  4.96k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.96k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1418|       |
 1419|   103k|    if (unlikely (get_type () == TSubTable::Extension && !c->get_edit_count ()))
  ------------------
  |  |  259|   106k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.72k, False: 101k]
  |  |  |  Branch (259:47): [True: 3.57k, False: 99.8k]
  |  |  |  Branch (259:47): [True: 1.72k, False: 1.84k]
  |  |  ------------------
  ------------------
 1420|  1.72k|    {
 1421|       |      /* The spec says all subtables of an Extension lookup should
 1422|       |       * have the same type, which shall not be the Extension type
 1423|       |       * itself (but we already checked for that).
 1424|       |       * This is specially important if one has a reverse type!
 1425|       |       *
 1426|       |       * We only do this if sanitizer edit_count is zero.  Otherwise,
 1427|       |       * some of the subtables might have become insane after they
 1428|       |       * were sanity-checked by the edits of subsequent subtables.
 1429|       |       * https://bugs.chromium.org/p/chromium/issues/detail?id=960331
 1430|       |       */
 1431|  1.72k|      unsigned int type = get_subtable<TSubTable> (0).u.extension.get_type ();
 1432|  21.1k|      for (unsigned int i = 1; i < subtables; i++)
  ------------------
  |  Branch (1432:32): [True: 19.5k, False: 1.68k]
  ------------------
 1433|  19.5k|	if (get_subtable<TSubTable> (i).u.extension.get_type () != type)
  ------------------
  |  Branch (1433:6): [True: 47, False: 19.4k]
  ------------------
 1434|     47|	  return_trace (false);
  ------------------
  |  |  349|     47|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     47|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1435|  1.72k|    }
 1436|   103k|    return_trace (true);
  ------------------
  |  |  349|   103k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   103k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1437|   103k|  }
_ZNK2OT6Lookup13get_subtablesINS_6Layout9GSUB_impl19SubstLookupSubTableEEERKNS_7ArrayOfINS_8OffsetToIT_NS_7IntTypeItLj2EEELb1EEES9_EEv:
 1299|  9.00M|  { return reinterpret_cast<const Array16OfOffset16To<TSubTable> &> (subTable); }
_ZNK2OT6Lookup12get_subtableINS_6Layout9GSUB_impl19SubstLookupSubTableEEERKT_j:
 1306|  8.89M|  { return this+get_subtables<TSubTable> ()[i]; }
_ZNK2OT6Lookup8dispatchINS_6Layout9GSUB_impl19SubstLookupSubTableENS_24hb_would_apply_context_tEJEEENT0_8return_tEPS6_DpOT1_:
 1337|   382k|  {
 1338|   382k|    unsigned int lookup_type = get_type ();
 1339|   382k|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|   382k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1340|   382k|    unsigned int count = get_subtable_count ();
 1341|  8.55M|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (1341:30): [True: 8.21M, False: 341k]
  ------------------
 1342|  8.21M|      typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
 1343|  8.21M|      if (c->stop_sublookup_iteration (r))
  ------------------
  |  Branch (1343:11): [True: 40.7k, False: 8.17M]
  ------------------
 1344|  40.7k|	return_trace (r);
  ------------------
  |  |  349|  40.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  40.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1345|  8.21M|    }
 1346|   341k|    return_trace (c->default_return_value ());
  ------------------
  |  |  349|   341k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   341k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1347|   382k|  }
_ZN2OT6Lookup13get_subtablesINS_6Layout9GSUB_impl19SubstLookupSubTableEEERNS_7ArrayOfINS_8OffsetToIT_NS_7IntTypeItLj2EEELb1EEES9_EEv:
 1302|  1.53k|  { return reinterpret_cast<Array16OfOffset16To<TSubTable> &> (subTable); }
_ZNK2OT6Lookup8dispatchINS_6Layout9GSUB_impl19SubstLookupSubTableENS_33hb_accelerate_subtables_context_tEJEEENT0_8return_tEPS6_DpOT1_:
 1337|  37.2k|  {
 1338|  37.2k|    unsigned int lookup_type = get_type ();
 1339|  37.2k|    TRACE_DISPATCH (this, lookup_type);
  ------------------
  |  |  467|  37.2k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 1340|  37.2k|    unsigned int count = get_subtable_count ();
 1341|   693k|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (1341:30): [True: 656k, False: 37.2k]
  ------------------
 1342|   656k|      typename context_t::return_t r = get_subtable<TSubTable> (i).dispatch (c, lookup_type, std::forward<Ts> (ds)...);
 1343|   656k|      if (c->stop_sublookup_iteration (r))
  ------------------
  |  Branch (1343:11): [True: 0, False: 656k]
  ------------------
 1344|      0|	return_trace (r);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1345|   656k|    }
 1346|  37.2k|    return_trace (c->default_return_value ());
  ------------------
  |  |  349|  37.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  37.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1347|  37.2k|  }

_ZN2OT6Layout9GPOS_impl9PosLookup21dispatch_recurse_funcINS_21hb_ot_apply_context_tEEENT_8return_tEPS5_j:
   58|  2.42M|{
   59|  2.42M|  auto *gpos = c->face->table.GPOS.get_relaxed ();
   60|  2.42M|  const PosLookup &l = gpos->table->get_lookup (lookup_index);
   61|  2.42M|  unsigned int saved_lookup_props = c->lookup_props;
   62|  2.42M|  unsigned int saved_lookup_index = c->lookup_index;
   63|  2.42M|  c->set_lookup_index (lookup_index);
   64|  2.42M|  c->set_lookup_props (l.get_props ());
   65|       |
   66|  2.42M|  bool ret = false;
   67|  2.42M|  auto *accel = gpos->get_accel (lookup_index);
   68|  2.42M|  ret = accel && accel->apply (c, l.get_subtable_count (), false);
  ------------------
  |  Branch (68:9): [True: 1.41M, False: 1.00M]
  |  Branch (68:18): [True: 470k, False: 944k]
  ------------------
   69|       |
   70|  2.42M|  c->set_lookup_index (saved_lookup_index);
   71|  2.42M|  c->set_lookup_props (saved_lookup_props);
   72|  2.42M|  return ret;
   73|  2.42M|}

_ZNK2OT6Layout9GSUB_impl14ExtensionSubst10is_reverseEv:
   43|    171|{
   44|    171|  return SubstLookup::lookup_type_is_reverse (get_type ());
   45|    171|}
_ZN2OT6Layout9GSUB_impl11SubstLookup21dispatch_recurse_funcINS_21hb_ot_apply_context_tEEENT_8return_tEPS5_j:
   71|  3.51M|{
   72|  3.51M|  auto *gsub = c->face->table.GSUB.get_relaxed ();
   73|  3.51M|  const SubstLookup &l = gsub->table->get_lookup (lookup_index);
   74|  3.51M|  unsigned int saved_lookup_props = c->lookup_props;
   75|  3.51M|  unsigned int saved_lookup_index = c->lookup_index;
   76|  3.51M|  c->set_lookup_index (lookup_index);
   77|  3.51M|  c->set_lookup_props (l.get_props ());
   78|       |
   79|  3.51M|  bool ret = false;
   80|  3.51M|  auto *accel = gsub->get_accel (lookup_index);
   81|  3.51M|  ret = accel && accel->apply (c, l.get_subtable_count (), false);
  ------------------
  |  Branch (81:9): [True: 2.36M, False: 1.15M]
  |  Branch (81:18): [True: 1.42M, False: 933k]
  ------------------
   82|       |
   83|  3.51M|  c->set_lookup_index (saved_lookup_index);
   84|  3.51M|  c->set_lookup_props (saved_lookup_props);
   85|  3.51M|  return ret;
   86|  3.51M|}

_ZN2OT21hb_ot_apply_context_tC2EjP9hb_font_tP11hb_buffer_t:
  760|   649k|  { init_iters (); }
_ZN2OT21hb_ot_apply_context_t9matcher_tC2Ev:
  410|  1.29M|	     match_data (nullptr) {}
_ZN2OT21hb_ot_apply_context_t10init_itersEv:
  770|  12.7M|  {
  771|  12.7M|    iter_input.init (this, false);
  772|  12.7M|    iter_context.init (this, true);
  773|  12.7M|  }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t4initEPS0_b:
  477|  25.4M|    {
  478|  25.4M|      c = c_;
  479|  25.4M|      end = c->buffer->len;
  480|  25.4M|      match_glyph_data16 = nullptr;
  481|  25.4M|#ifndef HB_NO_BEYOND_64K
  482|  25.4M|      match_glyph_data24 = nullptr;
  483|  25.4M|#endif
  484|  25.4M|      matcher.set_match_func (nullptr, nullptr);
  485|  25.4M|      matcher.set_lookup_props (c->lookup_props);
  486|       |      /* Ignore ZWNJ if we are matching GPOS, or matching GSUB context and asked to. */
  487|  25.4M|      matcher.set_ignore_zwnj (c->table_index == 1 || (context_match && c->auto_zwnj));
  ------------------
  |  Branch (487:32): [True: 10.0M, False: 15.4M]
  |  Branch (487:56): [True: 7.72M, False: 7.72M]
  |  Branch (487:73): [True: 7.23M, False: 486k]
  ------------------
  488|       |      /* Ignore ZWJ if we are matching context, or asked to. */
  489|  25.4M|      matcher.set_ignore_zwj  (context_match || c->auto_zwj);
  ------------------
  |  Branch (489:32): [True: 12.7M, False: 12.7M]
  |  Branch (489:49): [True: 12.0M, False: 627k]
  ------------------
  490|  25.4M|      matcher.set_mask (context_match ? -1 : c->lookup_mask);
  ------------------
  |  Branch (490:25): [True: 12.7M, False: 12.7M]
  ------------------
  491|       |      /* Per syllable matching is only for GSUB. */
  492|  25.4M|      matcher.set_per_syllable (c->table_index == 0 && c->per_syllable);
  ------------------
  |  Branch (492:33): [True: 15.4M, False: 10.0M]
  |  Branch (492:56): [True: 532k, False: 14.9M]
  ------------------
  493|  25.4M|      matcher.set_syllable (0);
  494|  25.4M|    }
_ZN2OT21hb_ot_apply_context_t9matcher_t14set_match_funcEPFbR15hb_glyph_info_tjPKvES5_:
  422|  33.3M|    { match_func = match_func_; match_data = match_data_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t16set_lookup_propsEj:
  416|  27.4M|    void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t15set_ignore_zwnjEb:
  414|  25.4M|    void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t14set_ignore_zwjEb:
  415|  25.4M|    void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t8set_maskEj:
  417|  25.4M|    void set_mask (hb_mask_t mask_) { mask = mask_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t16set_per_syllableEb:
  418|  25.4M|    void set_per_syllable (bool per_syllable_) { per_syllable = per_syllable_; }
_ZN2OT21hb_ot_apply_context_t9matcher_t12set_syllableEh:
  419|  34.1M|    void set_syllable (uint8_t syllable_)  { syllable = per_syllable ? syllable_ : 0; }
  ------------------
  |  Branch (419:57): [True: 1.26M, False: 32.8M]
  ------------------
_ZN2OT21hb_ot_apply_context_t15set_lookup_maskEjb:
  775|   182k|  void set_lookup_mask (hb_mask_t mask, bool init = true) { lookup_mask = mask; last_base = -1; last_base_until = 0; if (init) init_iters (); }
  ------------------
  |  Branch (775:122): [True: 9.63k, False: 172k]
  ------------------
_ZN2OT21hb_ot_apply_context_t16set_lookup_propsEj:
  782|  12.0M|  void set_lookup_props (unsigned int lookup_props_) { lookup_props = lookup_props_; init_iters (); }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t5resetEjj:
  521|  8.67M|    {
  522|  8.67M|      idx = start_index_;
  523|  8.67M|      num_items = num_items_;
  524|  8.67M|      end = c->buffer->len;
  525|  8.67M|      matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0);
  ------------------
  |  |  147|  7.50M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (525:29): [True: 7.50M, False: 1.16M]
  ------------------
  526|  8.67M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t4nextEPj:
  571|  12.1M|    {
  572|  12.1M|      assert (num_items > 0);
  573|       |      /* The alternate condition below is faster at string boundaries,
  574|       |       * but produces subpar "unsafe-to-concat" values. */
  575|      0|      signed stop = (signed) end - (signed) num_items;
  576|  12.1M|      if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT)
  ------------------
  |  Branch (576:11): [True: 0, False: 12.1M]
  ------------------
  577|      0|        stop = (signed) end - 1;
  578|  24.9M|      while ((signed) idx < stop)
  ------------------
  |  Branch (578:14): [True: 24.3M, False: 658k]
  ------------------
  579|  24.3M|      {
  580|  24.3M|	idx++;
  581|  24.3M|	switch (match (c->buffer->info[idx]))
  ------------------
  |  Branch (581:10): [True: 0, False: 24.3M]
  ------------------
  582|  24.3M|	{
  583|  9.60M|	  case MATCH:
  ------------------
  |  Branch (583:4): [True: 9.60M, False: 14.7M]
  ------------------
  584|  9.60M|	  {
  585|  9.60M|	    num_items--;
  586|  9.60M|	    advance_glyph_data ();
  587|  9.60M|	    return true;
  588|      0|	  }
  589|  1.91M|	  case NOT_MATCH:
  ------------------
  |  Branch (589:4): [True: 1.91M, False: 22.4M]
  ------------------
  590|  1.91M|	  {
  591|  1.91M|	    if (unsafe_to)
  ------------------
  |  Branch (591:10): [True: 1.91M, False: 0]
  ------------------
  592|  1.91M|	      *unsafe_to = idx + 1;
  593|  1.91M|	    return false;
  594|      0|	  }
  595|  12.7M|	  case SKIP:
  ------------------
  |  Branch (595:4): [True: 12.7M, False: 11.5M]
  ------------------
  596|  12.7M|	    continue;
  597|  24.3M|	}
  598|  24.3M|      }
  599|   658k|      if (unsafe_to)
  ------------------
  |  Branch (599:11): [True: 658k, False: 0]
  ------------------
  600|   658k|        *unsafe_to = end;
  601|   658k|      return false;
  602|  12.1M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t5matchER15hb_glyph_info_t:
  553|  26.7M|    {
  554|  26.7M|      matcher_t::may_skip_t skip = matcher.may_skip (c, info);
  555|  26.7M|      if (unlikely (skip == matcher_t::SKIP_YES))
  ------------------
  |  |  259|  26.7M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12.0M, False: 14.7M]
  |  |  ------------------
  ------------------
  556|  12.0M|	return SKIP;
  557|       |
  558|  14.7M|      matcher_t::may_match_t match = matcher.may_match (info, get_glyph_data ());
  559|  14.7M|      if (match == matcher_t::MATCH_YES ||
  ------------------
  |  Branch (559:11): [True: 6.39M, False: 8.34M]
  ------------------
  560|  14.7M|	  (match == matcher_t::MATCH_MAYBE &&
  ------------------
  |  Branch (560:5): [True: 5.33M, False: 3.01M]
  ------------------
  561|  8.34M|	   skip == matcher_t::SKIP_NO))
  ------------------
  |  Branch (561:5): [True: 5.33M, False: 4.80k]
  ------------------
  562|  11.7M|	return MATCH;
  563|       |
  564|  3.01M|      if (skip == matcher_t::SKIP_NO)
  ------------------
  |  Branch (564:11): [True: 2.09M, False: 920k]
  ------------------
  565|  2.09M|        return NOT_MATCH;
  566|       |
  567|   920k|      return SKIP;
  568|  3.01M|  }
_ZNK2OT21hb_ot_apply_context_t9matcher_t8may_skipEPKS0_RK15hb_glyph_info_t:
  451|  28.1M|    {
  452|  28.1M|      if (!c->check_glyph_property (&info, lookup_props))
  ------------------
  |  Branch (452:11): [True: 12.0M, False: 16.1M]
  ------------------
  453|  12.0M|	return SKIP_YES;
  454|       |
  455|  16.1M|      if (unlikely (_hb_glyph_info_is_default_ignorable_and_not_hidden (&info) &&
  ------------------
  |  |  259|  37.2M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 930k, False: 15.1M]
  |  |  |  Branch (259:47): [True: 297k, False: 637k]
  |  |  |  Branch (259:47): [True: 635k, False: 1.40k]
  |  |  |  Branch (259:47): [True: 935k, False: 15.1M]
  |  |  |  Branch (259:47): [True: 304k, False: 629k]
  |  |  |  Branch (259:47): [True: 626k, False: 3.17k]
  |  |  ------------------
  ------------------
  456|  16.1M|		    (ignore_zwnj || !_hb_glyph_info_is_zwnj (&info)) &&
  457|  16.1M|		    (ignore_zwj || !_hb_glyph_info_is_zwj (&info))))
  458|   930k|	return SKIP_MAYBE;
  459|       |
  460|  15.1M|      return SKIP_NO;
  461|  16.1M|    }
_ZNK2OT21hb_ot_apply_context_t20check_glyph_propertyEPK15hb_glyph_info_tj:
  813|  44.9M|  {
  814|  44.9M|    unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info);
  815|       |
  816|       |    /* Not covered, if, for example, glyph class is ligature and
  817|       |     * match_props includes LookupFlags::IgnoreLigatures
  818|       |     */
  819|  44.9M|    if (glyph_props & match_props & LookupFlag::IgnoreFlags)
  ------------------
  |  Branch (819:9): [True: 12.7M, False: 32.1M]
  ------------------
  820|  12.7M|      return false;
  821|       |
  822|  32.1M|    if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK))
  ------------------
  |  |  259|  32.1M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.55M, False: 30.6M]
  |  |  ------------------
  ------------------
  823|  1.55M|      return match_properties_mark (info->codepoint, glyph_props, match_props);
  824|       |
  825|  30.6M|    return true;
  826|  32.1M|  }
_ZNK2OT21hb_ot_apply_context_t21match_properties_markEjjj:
  794|  1.55M|  {
  795|       |    /* If using mark filtering sets, the high short of
  796|       |     * match_props has the set index.
  797|       |     */
  798|  1.55M|    if (match_props & LookupFlag::UseMarkFilteringSet)
  ------------------
  |  Branch (798:9): [True: 229k, False: 1.32M]
  ------------------
  799|   229k|      return gdef.mark_set_covers (match_props >> 16, glyph);
  800|       |
  801|       |    /* The second byte of match_props has the meaning
  802|       |     * "ignore marks of attachment type different than
  803|       |     * the attachment type specified."
  804|       |     */
  805|  1.32M|    if (match_props & LookupFlag::MarkAttachmentType)
  ------------------
  |  Branch (805:9): [True: 217k, False: 1.11M]
  ------------------
  806|   217k|      return (match_props & LookupFlag::MarkAttachmentType) == (glyph_props & LookupFlag::MarkAttachmentType);
  807|       |
  808|  1.11M|    return true;
  809|  1.32M|  }
_ZNK2OT21hb_ot_apply_context_t9matcher_t9may_matchER15hb_glyph_info_tj:
  432|  14.7M|    {
  433|  14.7M|      if (!(info.mask & mask) ||
  ------------------
  |  Branch (433:11): [True: 2.73k, False: 14.7M]
  ------------------
  434|  14.7M|	  (syllable && syllable != info.syllable ()))
  ------------------
  |  |  147|  1.72M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (434:5): [True: 1.72M, False: 13.0M]
  |  Branch (434:17): [True: 902k, False: 818k]
  ------------------
  435|   905k|	return MATCH_NO;
  436|       |
  437|  13.8M|      if (match_func)
  ------------------
  |  Branch (437:11): [True: 8.49M, False: 5.33M]
  ------------------
  438|  8.49M|	return match_func (info, glyph_data, match_data) ? MATCH_YES : MATCH_NO;
  ------------------
  |  Branch (438:9): [True: 6.39M, False: 2.10M]
  ------------------
  439|       |
  440|  5.33M|      return MATCH_MAYBE;
  441|  13.8M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t14get_glyph_dataEv:
  639|  14.7M|    {
  640|  14.7M|      if (match_glyph_data16) return *match_glyph_data16;
  ------------------
  |  Branch (640:11): [True: 5.74M, False: 8.99M]
  ------------------
  641|  8.99M|#ifndef HB_NO_BEYOND_64K
  642|  8.99M|      else
  643|  8.99M|      if (match_glyph_data24) return *match_glyph_data24;
  ------------------
  |  Branch (643:11): [True: 2.03M, False: 6.96M]
  ------------------
  644|  6.96M|#endif
  645|  6.96M|      return 0;
  646|  14.7M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t18advance_glyph_dataEv:
  649|  10.3M|    {
  650|  10.3M|      if (match_glyph_data16) match_glyph_data16++;
  ------------------
  |  Branch (650:11): [True: 3.02M, False: 7.29M]
  ------------------
  651|  7.29M|#ifndef HB_NO_BEYOND_64K
  652|  7.29M|      else
  653|  7.29M|      if (match_glyph_data24) match_glyph_data24++;
  ------------------
  |  Branch (653:11): [True: 2.00M, False: 5.29M]
  ------------------
  654|  10.3M|#endif
  655|  10.3M|    }
_ZN2OT21hb_ot_apply_context_tD2Ev:
  763|   649k|  {
  764|   649k|#ifndef HB_NO_VAR
  765|   649k|    VariationStore::destroy_cache (var_store_cache);
  766|   649k|#endif
  767|   649k|  }
_ZN2OT24hb_would_apply_context_t20default_return_valueEv:
  284|  7.33M|  static return_t default_return_value () { return false; }
_ZNK2OT24hb_would_apply_context_t24stop_sublookup_iterationEb:
  285|  8.21M|  bool stop_sublookup_iteration (return_t r) const { return r; }
_ZN2OT24hb_would_apply_context_tC2EP9hb_face_tPKjjb:
  299|  1.72M|			      zero_context (zero_context_) {}
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t16set_lookup_propsEj:
  496|  1.95M|    {
  497|  1.95M|      matcher.set_lookup_props (lookup_props);
  498|  1.95M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t14set_match_funcEPFbR15hb_glyph_info_tjPKvES5_:
  501|  7.92M|    {
  502|  7.92M|      matcher.set_match_func (match_func_, match_data_);
  503|  7.92M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t14set_glyph_dataEPKNS_7IntTypeItLj2EEE:
  505|  6.43M|    {
  506|  6.43M|      match_glyph_data16 = glyph_data;
  507|  6.43M|#ifndef HB_NO_BEYOND_64K
  508|  6.43M|      match_glyph_data24 = nullptr;
  509|  6.43M|#endif
  510|  6.43M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t14set_glyph_dataEPKNS_7IntTypeIjLj3EEE:
  513|  1.49M|    {
  514|  1.49M|      match_glyph_data16 = nullptr;
  515|  1.49M|      match_glyph_data24 = glyph_data;
  516|  1.49M|    }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t10reset_fastEjj:
  530|  3.29M|    {
  531|       |      // Doesn't set end or syllable. Used by GPOS which doesn't care / change.
  532|  3.29M|      idx = start_index_;
  533|  3.29M|      num_items = num_items_;
  534|  3.29M|    }
_ZNK2OT21hb_ot_apply_context_t19skipping_iterator_t8may_skipERK15hb_glyph_info_t:
  544|  1.38M|    { return matcher.may_skip (c, info); }
_ZN2OT21hb_ot_apply_context_t19skipping_iterator_t4prevEPj:
  604|   995k|    {
  605|   995k|      assert (num_items > 0);
  606|       |      /* The alternate condition below is faster at string boundaries,
  607|       |       * but produces subpar "unsafe-to-concat" values. */
  608|      0|      unsigned stop = num_items - 1;
  609|   995k|      if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT)
  ------------------
  |  Branch (609:11): [True: 0, False: 995k]
  ------------------
  610|      0|        stop = 1 - 1;
  611|  1.01M|      while (idx > stop)
  ------------------
  |  Branch (611:14): [True: 912k, False: 98.2k]
  ------------------
  612|   912k|      {
  613|   912k|	idx--;
  614|   912k|	switch (match (c->buffer->out_info[idx]))
  ------------------
  |  Branch (614:10): [True: 0, False: 912k]
  ------------------
  615|   912k|	{
  616|   717k|	  case MATCH:
  ------------------
  |  Branch (616:4): [True: 717k, False: 194k]
  ------------------
  617|   717k|	  {
  618|   717k|	    num_items--;
  619|   717k|	    advance_glyph_data ();
  620|   717k|	    return true;
  621|      0|	  }
  622|   179k|	  case NOT_MATCH:
  ------------------
  |  Branch (622:4): [True: 179k, False: 732k]
  ------------------
  623|   179k|	  {
  624|   179k|	    if (unsafe_from)
  ------------------
  |  Branch (624:10): [True: 179k, False: 0]
  ------------------
  625|   179k|	      *unsafe_from = hb_max (1u, idx) - 1u;
  626|   179k|	    return false;
  627|      0|	  }
  628|  15.0k|	  case SKIP:
  ------------------
  |  Branch (628:4): [True: 15.0k, False: 897k]
  ------------------
  629|  15.0k|	    continue;
  630|   912k|	}
  631|   912k|      }
  632|  98.2k|      if (unsafe_from)
  ------------------
  |  Branch (632:11): [True: 98.2k, False: 0]
  ------------------
  633|  98.2k|        *unsafe_from = 0;
  634|  98.2k|      return false;
  635|   995k|    }
_ZN2OT21hb_ot_apply_context_t20default_return_valueEv:
  684|  11.3M|  static return_t default_return_value () { return false; }
_ZN2OT21hb_ot_apply_context_t7recurseEj:
  687|  17.3M|  {
  688|  17.3M|    if (unlikely (nesting_level_left == 0 || !recurse_func || buffer->max_ops-- <= 0))
  ------------------
  |  |  259|  46.4M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.3M, False: 5.94M]
  |  |  |  Branch (259:47): [True: 11.3M, False: 5.94M]
  |  |  |  Branch (259:47): [True: 0, False: 5.94M]
  |  |  |  Branch (259:47): [True: 0, False: 5.94M]
  |  |  ------------------
  ------------------
  689|  11.3M|    {
  690|  11.3M|      buffer->shaping_failed = true;
  691|  11.3M|      return default_return_value ();
  692|  11.3M|    }
  693|       |
  694|  5.94M|    nesting_level_left--;
  695|  5.94M|    bool ret = recurse_func (this, sub_lookup_index);
  696|  5.94M|    nesting_level_left++;
  697|  5.94M|    return ret;
  698|  17.3M|  }
_ZN2OT21hb_ot_apply_context_t12set_auto_zwjEbb:
  776|   172k|  void set_auto_zwj (bool auto_zwj_, bool init = true) { auto_zwj = auto_zwj_; if (init) init_iters (); }
  ------------------
  |  Branch (776:84): [True: 0, False: 172k]
  ------------------
_ZN2OT21hb_ot_apply_context_t13set_auto_zwnjEbb:
  777|   172k|  void set_auto_zwnj (bool auto_zwnj_, bool init = true) { auto_zwnj = auto_zwnj_; if (init) init_iters (); }
  ------------------
  |  Branch (777:88): [True: 0, False: 172k]
  ------------------
_ZN2OT21hb_ot_apply_context_t16set_per_syllableEbb:
  778|   172k|  void set_per_syllable (bool per_syllable_, bool init = true) { per_syllable = per_syllable_; if (init) init_iters (); }
  ------------------
  |  Branch (778:100): [True: 0, False: 172k]
  ------------------
_ZN2OT21hb_ot_apply_context_t10set_randomEb:
  779|   172k|  void set_random (bool random_) { random = random_; }
_ZN2OT21hb_ot_apply_context_t16set_recurse_funcEPFbPS0_jE:
  780|   639k|  void set_recurse_func (recurse_func_t func) { recurse_func = func; }
_ZN2OT21hb_ot_apply_context_t16set_lookup_indexEj:
  781|  12.0M|  void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
_ZN2OT21hb_ot_apply_context_t13random_numberEv:
  785|    112|  {
  786|       |    /* http://www.cplusplus.com/reference/random/minstd_rand/ */
  787|    112|    random_state = random_state * 48271 % 2147483647;
  788|    112|    return random_state;
  789|    112|  }
_ZN2OT21hb_ot_apply_context_t16_set_glyph_classEjjbb:
  832|  33.1M|  {
  833|  33.1M|    digest.add (glyph_index);
  834|       |
  835|  33.1M|    if (new_syllables != (unsigned) -1)
  ------------------
  |  Branch (835:9): [True: 255k, False: 32.8M]
  ------------------
  836|   255k|      buffer->cur().syllable() = new_syllables;
  ------------------
  |  |  147|   255k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  837|       |
  838|  33.1M|    unsigned int props = _hb_glyph_info_get_glyph_props (&buffer->cur());
  839|  33.1M|    props |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
  840|  33.1M|    if (ligature)
  ------------------
  |  Branch (840:9): [True: 486k, False: 32.6M]
  ------------------
  841|   486k|    {
  842|   486k|      props |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
  843|       |      /* In the only place that the MULTIPLIED bit is used, Uniscribe
  844|       |       * seems to only care about the "last" transformation between
  845|       |       * Ligature and Multiple substitutions.  Ie. if you ligate, expand,
  846|       |       * and ligate again, it forgives the multiplication and acts as
  847|       |       * if only ligation happened.  As such, clear MULTIPLIED bit.
  848|       |       */
  849|   486k|      props &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
  850|   486k|    }
  851|  33.1M|    if (component)
  ------------------
  |  Branch (851:9): [True: 32.0M, False: 1.06M]
  ------------------
  852|  32.0M|      props |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
  853|  33.1M|    if (likely (has_glyph_classes))
  ------------------
  |  |  258|  33.1M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.38M, False: 29.7M]
  |  |  ------------------
  ------------------
  854|  3.38M|    {
  855|  3.38M|      props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
  856|  3.38M|      _hb_glyph_info_set_glyph_props (&buffer->cur(), props | gdef_accel.get_glyph_props (glyph_index));
  857|  3.38M|    }
  858|  29.7M|    else if (class_guess)
  ------------------
  |  Branch (858:14): [True: 1.05M, False: 28.6M]
  ------------------
  859|  1.05M|    {
  860|  1.05M|      props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
  861|  1.05M|      _hb_glyph_info_set_glyph_props (&buffer->cur(), props | class_guess);
  862|  1.05M|    }
  863|  28.6M|    else
  864|  28.6M|      _hb_glyph_info_set_glyph_props (&buffer->cur(), props);
  865|  33.1M|  }
_ZN2OT21hb_ot_apply_context_t13replace_glyphEj:
  868|   540k|  {
  869|   540k|    _set_glyph_class (glyph_index);
  870|   540k|    (void) buffer->replace_glyph (glyph_index);
  871|   540k|  }
_ZN2OT21hb_ot_apply_context_t21replace_glyph_inplaceEj:
  873|  41.5k|  {
  874|  41.5k|    _set_glyph_class (glyph_index);
  875|  41.5k|    buffer->cur().codepoint = glyph_index;
  876|  41.5k|  }
_ZN2OT21hb_ot_apply_context_t27replace_glyph_with_ligatureEjj:
  879|   486k|  {
  880|   486k|    _set_glyph_class (glyph_index, class_guess, true);
  881|   486k|    (void) buffer->replace_glyph (glyph_index);
  882|   486k|  }
_ZN2OT21hb_ot_apply_context_t26output_glyph_for_componentEjj:
  885|  32.0M|  {
  886|  32.0M|    _set_glyph_class (glyph_index, class_guess, false, true);
  887|  32.0M|    (void) buffer->output_glyph (glyph_index);
  888|  32.0M|  }
_ZNK2OT33hb_accelerate_subtables_context_t15hb_applicable_t5applyEPNS_21hb_ot_apply_context_tE:
  954|   179M|    {
  955|   179M|      return digest.may_have (c->buffer->cur().codepoint) && apply_func (obj, c);
  ------------------
  |  Branch (955:14): [True: 21.8M, False: 157M]
  |  Branch (955:62): [True: 5.01M, False: 16.8M]
  ------------------
  956|   179M|    }
_ZNK2OT33hb_accelerate_subtables_context_t15hb_applicable_t12apply_cachedEPNS_21hb_ot_apply_context_tE:
  959|  3.33M|    {
  960|  3.33M|      return digest.may_have (c->buffer->cur().codepoint) &&  apply_cached_func (obj, c);
  ------------------
  |  Branch (960:14): [True: 739k, False: 2.59M]
  |  Branch (960:63): [True: 66.0k, False: 673k]
  ------------------
  961|  3.33M|    }
_ZNK2OT33hb_accelerate_subtables_context_t15hb_applicable_t11cache_enterEPNS_21hb_ot_apply_context_tE:
  963|  8.86k|    {
  964|  8.86k|      return cache_func (obj, c, true);
  965|  8.86k|    }
_ZNK2OT33hb_accelerate_subtables_context_t15hb_applicable_t11cache_leaveEPNS_21hb_ot_apply_context_tE:
  967|  8.70k|    {
  968|  8.70k|      cache_func (obj, c, false);
  969|  8.70k|    }
_ZN2OT33hb_accelerate_subtables_context_t20default_return_valueEv:
 1022|  1.11M|  static return_t default_return_value () { return hb_empty_t (); }
_ZN2OT33hb_accelerate_subtables_context_tC2EPNS0_15hb_applicable_tE:
 1025|  54.9k|				     array (array_) {}
_ZNK2OT14ContextFormat311would_applyEPNS_24hb_would_apply_context_tE:
 2632|  1.44k|  {
 2633|  1.44k|    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
 2634|  1.44k|    struct ContextApplyLookupContext lookup_context = {
 2635|  1.44k|      {match_coverage},
 2636|  1.44k|      this
 2637|  1.44k|    };
 2638|  1.44k|    return context_would_apply_lookup (c,
 2639|  1.44k|				       glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
 2640|  1.44k|				       lookupCount, lookupRecord,
 2641|  1.44k|				       lookup_context);
 2642|  1.44k|  }
_ZNK2OT14ContextFormat312get_coverageEv:
 2644|    864|  const Coverage &get_coverage () const { return this+coverageZ[0]; }
_ZNK2OT14ContextFormat35applyEPNS_21hb_ot_apply_context_tE:
 2647|   200k|  {
 2648|   200k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   200k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2649|   200k|    unsigned int index = (this+coverageZ[0]).get_coverage (c->buffer->cur().codepoint);
 2650|   200k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   200k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 6.04k, False: 194k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  6.04k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2651|       |
 2652|   194k|    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
 2653|   194k|    struct ContextApplyLookupContext lookup_context = {
 2654|   194k|      {match_coverage},
 2655|   194k|      this
 2656|   194k|    };
 2657|   194k|    return_trace (context_apply_lookup (c, glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1), lookupCount, lookupRecord, lookup_context));
  ------------------
  |  |  349|   194k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   194k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2658|   200k|  }
_ZNK2OT14ContextFormat38sanitizeEP21hb_sanitize_context_t:
 2688|  5.08k|  {
 2689|  5.08k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.08k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2690|  5.08k|    if (!c->check_struct (this)) return_trace (false);
  ------------------
  |  |  349|     82|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     82|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2690:9): [True: 82, False: 4.99k]
  ------------------
 2691|  4.99k|    unsigned int count = glyphCount;
 2692|  4.99k|    if (!count) return_trace (false); /* We want to access coverageZ[0] freely. */
  ------------------
  |  |  349|    132|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    132|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2692:9): [True: 132, False: 4.86k]
  ------------------
 2693|  4.86k|    if (!c->check_array (coverageZ.arrayZ, count)) return_trace (false);
  ------------------
  |  |  349|    121|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    121|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2693:9): [True: 121, False: 4.74k]
  ------------------
 2694|   277k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (2694:30): [True: 272k, False: 4.65k]
  ------------------
 2695|   272k|      if (!coverageZ[i].sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|  4.83k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     87|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2695:11): [True: 87, False: 272k]
  ------------------
 2696|  4.65k|    const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
 2697|  4.65k|    return_trace (c->check_array (lookupRecord, lookupCount));
  ------------------
  |  |  349|  4.65k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2698|  4.74k|  }
_ZNK2OT19ChainContextFormat311would_applyEPNS_24hb_would_apply_context_tE:
 3785|  19.6k|  {
 3786|  19.6k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3787|  19.6k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 3788|  19.6k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 3789|  19.6k|    struct ChainContextApplyLookupContext lookup_context = {
 3790|  19.6k|      {{match_coverage, match_coverage, match_coverage}},
 3791|  19.6k|      {this, this, this}
 3792|  19.6k|    };
 3793|  19.6k|    return chain_context_would_apply_lookup (c,
 3794|  19.6k|					     backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
 3795|  19.6k|					     input.len, (const HBUINT16 *) input.arrayZ + 1,
 3796|  19.6k|					     lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
 3797|  19.6k|					     lookup.len, lookup.arrayZ, lookup_context);
 3798|  19.6k|  }
_ZNK2OT19ChainContextFormat312get_coverageEv:
 3801|  1.02k|  {
 3802|  1.02k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3803|  1.02k|    return this+input[0];
 3804|  1.02k|  }
_ZNK2OT19ChainContextFormat35applyEPNS_21hb_ot_apply_context_tE:
 3807|  46.0k|  {
 3808|  46.0k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  46.0k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3809|  46.0k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3810|       |
 3811|  46.0k|    unsigned int index = (this+input[0]).get_coverage (c->buffer->cur().codepoint);
 3812|  46.0k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  46.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 9.03k, False: 36.9k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  9.03k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3813|       |
 3814|  36.9k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 3815|  36.9k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 3816|  36.9k|    struct ChainContextApplyLookupContext lookup_context = {
 3817|  36.9k|      {{match_coverage, match_coverage, match_coverage}},
 3818|  36.9k|      {this, this, this}
 3819|  36.9k|    };
 3820|  36.9k|    return_trace (chain_context_apply_lookup (c,
  ------------------
  |  |  349|  36.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  36.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3821|  46.0k|					      backtrack.len, (const HBUINT16 *) backtrack.arrayZ,
 3822|  46.0k|					      input.len, (const HBUINT16 *) input.arrayZ + 1,
 3823|  46.0k|					      lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
 3824|  46.0k|					      lookup.len, lookup.arrayZ, lookup_context));
 3825|  46.0k|  }
_ZNK2OT19ChainContextFormat38sanitizeEP21hb_sanitize_context_t:
 3874|  4.92k|  {
 3875|  4.92k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.92k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3876|  4.92k|    if (!backtrack.sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|    212|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    212|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3876:9): [True: 212, False: 4.71k]
  ------------------
 3877|  4.71k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3878|  4.71k|    if (!input.sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|    181|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    181|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3878:9): [True: 181, False: 4.53k]
  ------------------
 3879|  4.53k|    if (!input.len) return_trace (false); /* To be consistent with Context. */
  ------------------
  |  |  349|    130|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    130|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3879:9): [True: 130, False: 4.40k]
  ------------------
 3880|  4.40k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 3881|  4.40k|    if (!lookahead.sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|    141|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    141|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3881:9): [True: 141, False: 4.26k]
  ------------------
 3882|  4.26k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 3883|  4.26k|    return_trace (lookup.sanitize (c));
  ------------------
  |  |  349|  4.26k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.26k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3884|  4.40k|  }
_ZNK2OT33hb_ot_layout_lookup_accelerator_t8may_haveEj:
 4089|  1.72M|  { return digest.may_have (g); }
_ZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS_21hb_ot_apply_context_tEjb:
 4092|  19.4M|  {
 4093|  19.4M|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 4094|  19.4M|    if (use_cache)
  ------------------
  |  Branch (4094:9): [True: 674k, False: 18.7M]
  ------------------
 4095|   674k|    {
 4096|   674k|      return
 4097|   674k|      + hb_iter (hb_iter (subtables, subtables_count))
 4098|   674k|      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply_cached (c); })
 4099|   674k|      | hb_any
 4100|   674k|      ;
 4101|   674k|    }
 4102|  18.7M|    else
 4103|  18.7M|#endif
 4104|  18.7M|    {
 4105|  18.7M|      return
 4106|  18.7M|      + hb_iter (hb_iter (subtables, subtables_count))
 4107|  18.7M|      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply (c); })
 4108|  18.7M|      | hb_any
 4109|  18.7M|      ;
 4110|  18.7M|    }
 4111|      0|    return false;
 4112|  19.4M|  }
_ZNK2OT33hb_ot_layout_lookup_accelerator_t11cache_enterEPNS_21hb_ot_apply_context_tE:
 4115|   168k|  {
 4116|   168k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 4117|   168k|    return cache_user_idx != (unsigned) -1 &&
  ------------------
  |  Branch (4117:12): [True: 8.86k, False: 160k]
  ------------------
 4118|   168k|	   subtables[cache_user_idx].cache_enter (c);
  ------------------
  |  Branch (4118:5): [True: 8.70k, False: 158]
  ------------------
 4119|       |#else
 4120|       |    return false;
 4121|       |#endif
 4122|   168k|  }
_ZNK2OT33hb_ot_layout_lookup_accelerator_t11cache_leaveEPNS_21hb_ot_apply_context_tE:
 4124|  8.70k|  {
 4125|  8.70k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 4126|  8.70k|    subtables[cache_user_idx].cache_leave (c);
 4127|  8.70k|#endif
 4128|  8.70k|  }
_ZNK2OT8GSUBGPOS15get_script_listEv:
 4288|  3.34M|  {
 4289|  3.34M|    switch (u.version.major) {
 4290|   618k|    case 1: return this+u.version1.scriptList;
  ------------------
  |  Branch (4290:5): [True: 618k, False: 2.72M]
  ------------------
 4291|      0|#ifndef HB_NO_BEYOND_64K
 4292|  14.5k|    case 2: return this+u.version2.scriptList;
  ------------------
  |  Branch (4292:5): [True: 14.5k, False: 3.33M]
  ------------------
 4293|      0|#endif
 4294|  2.71M|    default: return Null (ScriptList);
  ------------------
  |  |  124|  2.71M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (4294:5): [True: 2.71M, False: 632k]
  ------------------
 4295|  3.34M|    }
 4296|  3.34M|  }
_ZNK2OT8GSUBGPOS16get_feature_listEv:
 4298|  10.4M|  {
 4299|  10.4M|    switch (u.version.major) {
 4300|  10.0M|    case 1: return this+u.version1.featureList;
  ------------------
  |  Branch (4300:5): [True: 10.0M, False: 329k]
  ------------------
 4301|      0|#ifndef HB_NO_BEYOND_64K
 4302|  83.5k|    case 2: return this+u.version2.featureList;
  ------------------
  |  Branch (4302:5): [True: 83.5k, False: 10.3M]
  ------------------
 4303|      0|#endif
 4304|   245k|    default: return Null (FeatureList);
  ------------------
  |  |  124|   245k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (4304:5): [True: 245k, False: 10.1M]
  ------------------
 4305|  10.4M|    }
 4306|  10.4M|  }
_ZNK2OT8GSUBGPOS16get_lookup_countEv:
 4308|   284k|  {
 4309|   284k|    switch (u.version.major) {
 4310|  64.1k|    case 1: return (this+u.version1.lookupList).len;
  ------------------
  |  Branch (4310:5): [True: 64.1k, False: 219k]
  ------------------
 4311|      0|#ifndef HB_NO_BEYOND_64K
 4312|  1.36k|    case 2: return (this+u.version2.lookupList).len;
  ------------------
  |  Branch (4312:5): [True: 1.36k, False: 282k]
  ------------------
 4313|      0|#endif
 4314|   218k|    default: return 0;
  ------------------
  |  Branch (4314:5): [True: 218k, False: 65.4k]
  ------------------
 4315|   284k|    }
 4316|   284k|  }
_ZNK2OT8GSUBGPOS10get_lookupEj:
 4318|  7.88M|  {
 4319|  7.88M|    switch (u.version.major) {
 4320|  7.82M|    case 1: return (this+u.version1.lookupList)[i];
  ------------------
  |  Branch (4320:5): [True: 7.82M, False: 68.5k]
  ------------------
 4321|      0|#ifndef HB_NO_BEYOND_64K
 4322|  68.5k|    case 2: return (this+u.version2.lookupList)[i];
  ------------------
  |  Branch (4322:5): [True: 68.5k, False: 7.82M]
  ------------------
 4323|      0|#endif
 4324|      0|    default: return Null (Lookup);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (4324:5): [True: 0, False: 7.88M]
  ------------------
 4325|  7.88M|    }
 4326|  7.88M|  }
_ZNK2OT8GSUBGPOS22get_feature_variationsEv:
 4328|  1.26M|  {
 4329|  1.26M|    switch (u.version.major) {
 4330|   242k|    case 1: return (u.version.to_int () >= 0x00010001u ? this+u.version1.featureVars : Null (FeatureVariations));
  ------------------
  |  |  124|   188k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (4330:5): [True: 242k, False: 1.02M]
  |  Branch (4330:21): [True: 53.8k, False: 188k]
  ------------------
 4331|      0|#ifndef HB_NO_BEYOND_64K
 4332|  5.65k|    case 2: return this+u.version2.featureVars;
  ------------------
  |  Branch (4332:5): [True: 5.65k, False: 1.25M]
  ------------------
 4333|      0|#endif
 4334|  1.01M|    default: return Null (FeatureVariations);
  ------------------
  |  |  124|  1.01M|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (4334:5): [True: 1.01M, False: 247k]
  ------------------
 4335|  1.26M|    }
 4336|  1.26M|  }
_ZNK2OT8GSUBGPOS8has_dataEv:
 4338|   162k|  bool has_data () const { return u.version.to_int (); }
_ZNK2OT8GSUBGPOS10get_scriptEj:
 4348|  2.96M|  { return get_script_list ()[i]; }
_ZNK2OT8GSUBGPOS17find_script_indexEjPj:
 4350|   385k|  { return get_script_list ().find_index (tag, index); }
_ZNK2OT8GSUBGPOS17get_feature_countEv:
 4353|  33.3k|  { return get_feature_list ().len; }
_ZNK2OT8GSUBGPOS15get_feature_tagEj:
 4355|  10.5M|  { return i == Index::NOT_FOUND_INDEX ? HB_TAG_NONE : get_feature_list ().get_tag (i); }
  ------------------
  |  |  197|   494k|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|   494k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (4355:12): [True: 494k, False: 10.0M]
  ------------------
_ZNK2OT8GSUBGPOS11get_featureEj:
 4361|   326k|  { return get_feature_list ()[i]; }
_ZNK2OT8GSUBGPOS21find_variations_indexEPKijPj:
 4367|  1.23M|  {
 4368|       |#ifdef HB_NO_VAR
 4369|       |    *index = FeatureVariations::NOT_FOUND_INDEX;
 4370|       |    return false;
 4371|       |#endif
 4372|  1.23M|    return get_feature_variations ().find_index (coords, num_coords, index);
 4373|  1.23M|  }
_ZNK2OT8GSUBGPOS21get_feature_variationEjj:
 4376|   293k|  {
 4377|   293k|#ifndef HB_NO_VAR
 4378|   293k|    if (FeatureVariations::NOT_FOUND_INDEX != variations_index &&
  ------------------
  |  Branch (4378:9): [True: 35.0k, False: 258k]
  ------------------
 4379|   293k|	u.version.to_int () >= 0x00010001u)
  ------------------
  |  Branch (4379:2): [True: 35.0k, False: 0]
  ------------------
 4380|  35.0k|    {
 4381|  35.0k|      const Feature *feature = get_feature_variations ().find_substitute (variations_index,
 4382|  35.0k|									  feature_index);
 4383|  35.0k|      if (feature)
  ------------------
  |  Branch (4383:11): [True: 34.0k, False: 956]
  ------------------
 4384|  34.0k|	return *feature;
 4385|  35.0k|    }
 4386|   259k|#endif
 4387|   259k|    return get_feature (feature_index);
 4388|   293k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEE12get_subtableINS2_17PosLookupSubTableEEERKT_v:
 3947|  3.78k|  { return this + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); }
_ZNK2OT16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEE8get_typeEv:
 3943|  5.01k|  unsigned int get_type () const { return extensionLookupType; }
_ZNK2OT16ContextFormat1_4INS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 2237|   583k|  {
 2238|   583k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   583k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2239|   583k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 2240|   583k|    if (likely (index == NOT_COVERED))
  ------------------
  |  |  258|   583k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 61.3k, False: 522k]
  |  |  ------------------
  ------------------
 2241|  61.3k|      return_trace (false);
  ------------------
  |  |  349|  61.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  61.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2242|       |
 2243|   522k|    const RuleSet &rule_set = this+ruleSet[index];
 2244|   522k|    struct ContextApplyLookupContext lookup_context = {
 2245|   522k|      {match_glyph},
 2246|   522k|      nullptr
 2247|   522k|    };
 2248|   522k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|   522k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   522k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2249|   583k|  }
_ZNK2OT7RuleSetINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextE:
 2087|   901k|  {
 2088|   901k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   901k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2089|   901k|    return_trace (
  ------------------
  |  |  349|   901k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   901k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2090|   901k|    + hb_iter (rule)
 2091|   901k|    | hb_map (hb_add (this))
 2092|   901k|    | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); })
 2093|   901k|    | hb_any
 2094|   901k|    )
 2095|   901k|    ;
 2096|   901k|  }
_ZNK2OT4RuleINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextE:
 1956|  1.76M|  {
 1957|  1.76M|    TRACE_APPLY (this);
  ------------------
  |  |  410|  1.76M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1958|  1.76M|    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
 1959|  1.76M|					   (inputZ.as_array (inputCount ? inputCount - 1 : 0));
  ------------------
  |  Branch (1959:27): [True: 1.58M, False: 186k]
  ------------------
 1960|  1.76M|    return_trace (context_apply_lookup (c, inputCount, inputZ.arrayZ, lookupCount, lookupRecord.arrayZ, lookup_context));
  ------------------
  |  |  349|  1.76M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.76M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1961|  1.76M|  }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 2455|   189k|  bool apply (hb_ot_apply_context_t *c) const { return _apply (c, false); }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE6_applyEPNS_21hb_ot_apply_context_tEb:
 2457|   619k|  {
 2458|   619k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   619k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2459|   619k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 2460|   619k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   619k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 249k, False: 370k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   249k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   249k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2461|       |
 2462|   370k|    const ClassDef &class_def = this+classDef;
 2463|       |
 2464|   370k|    struct ContextApplyLookupContext lookup_context = {
 2465|   370k|      {cached ? match_class_cached : match_class},
  ------------------
  |  Branch (2465:8): [True: 200k, False: 170k]
  ------------------
 2466|   370k|      &class_def
 2467|   370k|    };
 2468|       |
 2469|   370k|    if (cached && c->buffer->cur().syllable() < 255)
  ------------------
  |  |  147|   200k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (2469:9): [True: 200k, False: 170k]
  |  Branch (2469:19): [True: 47.2k, False: 153k]
  ------------------
 2470|  47.2k|      index = c->buffer->cur().syllable ();
  ------------------
  |  |  147|  47.2k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2471|   323k|    else
 2472|   323k|    {
 2473|   323k|      index = class_def.get_class (c->buffer->cur().codepoint);
 2474|   323k|      if (cached && index < 255)
  ------------------
  |  Branch (2474:11): [True: 153k, False: 170k]
  |  Branch (2474:21): [True: 144k, False: 8.21k]
  ------------------
 2475|   144k|	c->buffer->cur().syllable() = index;
  ------------------
  |  |  147|   144k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2476|   323k|    }
 2477|   370k|    const RuleSet &rule_set = this+ruleSet[index];
 2478|   370k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|   370k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   370k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2479|   619k|  }
_ZNK2OT16ContextFormat1_4INS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 2237|  30.3k|  {
 2238|  30.3k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  30.3k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2239|  30.3k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 2240|  30.3k|    if (likely (index == NOT_COVERED))
  ------------------
  |  |  258|  30.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 283, False: 30.1k]
  |  |  ------------------
  ------------------
 2241|    283|      return_trace (false);
  ------------------
  |  |  349|    283|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    283|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2242|       |
 2243|  30.1k|    const RuleSet &rule_set = this+ruleSet[index];
 2244|  30.1k|    struct ContextApplyLookupContext lookup_context = {
 2245|  30.1k|      {match_glyph},
 2246|  30.1k|      nullptr
 2247|  30.1k|    };
 2248|  30.1k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|  30.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  30.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2249|  30.3k|  }
_ZNK2OT7RuleSetINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextE:
 2087|  30.1k|  {
 2088|  30.1k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  30.1k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2089|  30.1k|    return_trace (
  ------------------
  |  |  349|  30.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  30.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2090|  30.1k|    + hb_iter (rule)
 2091|  30.1k|    | hb_map (hb_add (this))
 2092|  30.1k|    | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); })
 2093|  30.1k|    | hb_any
 2094|  30.1k|    )
 2095|  30.1k|    ;
 2096|  30.1k|  }
_ZNK2OT4RuleINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_25ContextApplyLookupContextE:
 1956|  27.8k|  {
 1957|  27.8k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  27.8k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1958|  27.8k|    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
 1959|  27.8k|					   (inputZ.as_array (inputCount ? inputCount - 1 : 0));
  ------------------
  |  Branch (1959:27): [True: 27.4k, False: 392]
  ------------------
 1960|  27.8k|    return_trace (context_apply_lookup (c, inputCount, inputZ.arrayZ, lookupCount, lookupRecord.arrayZ, lookup_context));
  ------------------
  |  |  349|  27.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  27.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1961|  27.8k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 2455|  7.31k|  bool apply (hb_ot_apply_context_t *c) const { return _apply (c, false); }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE6_applyEPNS_21hb_ot_apply_context_tEb:
 2457|  10.1k|  {
 2458|  10.1k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  10.1k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2459|  10.1k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 2460|  10.1k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  10.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.60k, False: 8.54k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  1.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2461|       |
 2462|  8.54k|    const ClassDef &class_def = this+classDef;
 2463|       |
 2464|  8.54k|    struct ContextApplyLookupContext lookup_context = {
 2465|  8.54k|      {cached ? match_class_cached : match_class},
  ------------------
  |  Branch (2465:8): [True: 1.87k, False: 6.66k]
  ------------------
 2466|  8.54k|      &class_def
 2467|  8.54k|    };
 2468|       |
 2469|  8.54k|    if (cached && c->buffer->cur().syllable() < 255)
  ------------------
  |  |  147|  1.87k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (2469:9): [True: 1.87k, False: 6.66k]
  |  Branch (2469:19): [True: 348, False: 1.52k]
  ------------------
 2470|    348|      index = c->buffer->cur().syllable ();
  ------------------
  |  |  147|    348|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2471|  8.19k|    else
 2472|  8.19k|    {
 2473|  8.19k|      index = class_def.get_class (c->buffer->cur().codepoint);
 2474|  8.19k|      if (cached && index < 255)
  ------------------
  |  Branch (2474:11): [True: 1.52k, False: 6.66k]
  |  Branch (2474:21): [True: 747, False: 780]
  ------------------
 2475|    747|	c->buffer->cur().syllable() = index;
  ------------------
  |  |  147|    747|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2476|  8.19k|    }
 2477|  8.54k|    const RuleSet &rule_set = this+ruleSet[index];
 2478|  8.54k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|  8.54k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.54k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2479|  10.1k|  }
_ZNK2OT21ChainContextFormat1_4INS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 3319|   372k|  {
 3320|   372k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   372k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3321|   372k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 3322|   372k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   372k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 47.2k, False: 325k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  47.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  47.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3323|       |
 3324|   325k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3325|   325k|    struct ChainContextApplyLookupContext lookup_context = {
 3326|   325k|      {{match_glyph, match_glyph, match_glyph}},
 3327|   325k|      {nullptr, nullptr, nullptr}
 3328|   325k|    };
 3329|   325k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|   325k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   325k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3330|   372k|  }
_ZNK2OT12ChainRuleSetINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 3163|   517k|  {
 3164|   517k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   517k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3165|   517k|    return_trace (
  ------------------
  |  |  349|   517k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   517k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3166|   517k|    + hb_iter (rule)
 3167|   517k|    | hb_map (hb_add (this))
 3168|   517k|    | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); })
 3169|   517k|    | hb_any
 3170|   517k|    )
 3171|   517k|    ;
 3172|   517k|  }
_ZNK2OT9ChainRuleINS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 2987|   532k|  {
 2988|   532k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   532k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2989|   532k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 2990|   532k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 2991|   532k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 2992|   532k|    return_trace (chain_context_apply_lookup (c,
  ------------------
  |  |  349|   532k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   532k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2993|   532k|					      backtrack.len, backtrack.arrayZ,
 2994|   532k|					      input.lenP1, input.arrayZ,
 2995|   532k|					      lookahead.len, lookahead.arrayZ, lookup.len,
 2996|   532k|					      lookup.arrayZ, lookup_context));
 2997|   532k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 3558|  78.6k|  bool apply (hb_ot_apply_context_t *c) const { return _apply (c, false); }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE6_applyEPNS_21hb_ot_apply_context_tEb:
 3560|   310k|  {
 3561|   310k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   310k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3562|   310k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 3563|   310k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   310k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 124k, False: 186k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|   124k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   124k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3564|       |
 3565|   186k|    const ClassDef &backtrack_class_def = this+backtrackClassDef;
 3566|   186k|    const ClassDef &input_class_def = this+inputClassDef;
 3567|   186k|    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 3568|       |
 3569|       |    /* For ChainContextFormat2_5 we cache the LookaheadClassDef instead of InputClassDef.
 3570|       |     * The reason is that most heavy fonts want to identify a glyph in context and apply
 3571|       |     * a lookup to it. In this scenario, the length of the input sequence is one, whereas
 3572|       |     * the lookahead / backtrack are typically longer.  The one glyph in input sequence is
 3573|       |     * looked-up below and no input glyph is looked up in individual rules, whereas the
 3574|       |     * lookahead and backtrack glyphs are tried.  Since we match lookahead before backtrack,
 3575|       |     * we should cache lookahead.  This decisions showed a 20% improvement in shaping of
 3576|       |     * the Gulzar font.
 3577|       |     */
 3578|       |
 3579|   186k|    struct ChainContextApplyLookupContext lookup_context = {
 3580|   186k|      {{cached && &backtrack_class_def == &lookahead_class_def ? match_class_cached : match_class,
  ------------------
  |  Branch (3580:9): [True: 126k, False: 60.1k]
  |  Branch (3580:19): [True: 378, False: 126k]
  ------------------
 3581|   186k|        cached && &input_class_def == &lookahead_class_def ? match_class_cached : match_class,
  ------------------
  |  Branch (3581:9): [True: 126k, False: 60.1k]
  |  Branch (3581:19): [True: 3.41k, False: 123k]
  ------------------
 3582|   186k|        cached ? match_class_cached : match_class}},
  ------------------
  |  Branch (3582:9): [True: 126k, False: 60.1k]
  ------------------
 3583|   186k|      {&backtrack_class_def,
 3584|   186k|       &input_class_def,
 3585|   186k|       &lookahead_class_def}
 3586|   186k|    };
 3587|       |
 3588|   186k|    index = input_class_def.get_class (c->buffer->cur().codepoint);
 3589|   186k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3590|   186k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|   186k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   186k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3591|   310k|  }
_ZNK2OT21ChainContextFormat1_4INS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 3319|   432k|  {
 3320|   432k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   432k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3321|   432k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 3322|   432k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|   432k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.38k, False: 430k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  2.38k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.38k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3323|       |
 3324|   430k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3325|   430k|    struct ChainContextApplyLookupContext lookup_context = {
 3326|   430k|      {{match_glyph, match_glyph, match_glyph}},
 3327|   430k|      {nullptr, nullptr, nullptr}
 3328|   430k|    };
 3329|   430k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|   430k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   430k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3330|   432k|  }
_ZNK2OT12ChainRuleSetINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 3163|   430k|  {
 3164|   430k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   430k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3165|   430k|    return_trace (
  ------------------
  |  |  349|   430k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   430k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3166|   430k|    + hb_iter (rule)
 3167|   430k|    | hb_map (hb_add (this))
 3168|   430k|    | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); })
 3169|   430k|    | hb_any
 3170|   430k|    )
 3171|   430k|    ;
 3172|   430k|  }
_ZNK2OT9ChainRuleINS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 2987|   492k|  {
 2988|   492k|    TRACE_APPLY (this);
  ------------------
  |  |  410|   492k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 2989|   492k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 2990|   492k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 2991|   492k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 2992|   492k|    return_trace (chain_context_apply_lookup (c,
  ------------------
  |  |  349|   492k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   492k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2993|   492k|					      backtrack.len, backtrack.arrayZ,
 2994|   492k|					      input.lenP1, input.arrayZ,
 2995|   492k|					      lookahead.len, lookahead.arrayZ, lookup.len,
 2996|   492k|					      lookup.arrayZ, lookup_context));
 2997|   492k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE5applyEPNS_21hb_ot_apply_context_tE:
 3558|  6.40k|  bool apply (hb_ot_apply_context_t *c) const { return _apply (c, false); }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE6_applyEPNS_21hb_ot_apply_context_tEb:
 3560|  8.46k|  {
 3561|  8.46k|    TRACE_APPLY (this);
  ------------------
  |  |  410|  8.46k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 3562|  8.46k|    unsigned int index = (this+coverage).get_coverage (c->buffer->cur().codepoint);
 3563|  8.46k|    if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  258|  8.46k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 3.30k, False: 5.15k]
  |  |  ------------------
  ------------------
                  if (likely (index == NOT_COVERED)) return_trace (false);
  ------------------
  |  |  349|  3.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.30k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3564|       |
 3565|  5.15k|    const ClassDef &backtrack_class_def = this+backtrackClassDef;
 3566|  5.15k|    const ClassDef &input_class_def = this+inputClassDef;
 3567|  5.15k|    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 3568|       |
 3569|       |    /* For ChainContextFormat2_5 we cache the LookaheadClassDef instead of InputClassDef.
 3570|       |     * The reason is that most heavy fonts want to identify a glyph in context and apply
 3571|       |     * a lookup to it. In this scenario, the length of the input sequence is one, whereas
 3572|       |     * the lookahead / backtrack are typically longer.  The one glyph in input sequence is
 3573|       |     * looked-up below and no input glyph is looked up in individual rules, whereas the
 3574|       |     * lookahead and backtrack glyphs are tried.  Since we match lookahead before backtrack,
 3575|       |     * we should cache lookahead.  This decisions showed a 20% improvement in shaping of
 3576|       |     * the Gulzar font.
 3577|       |     */
 3578|       |
 3579|  5.15k|    struct ChainContextApplyLookupContext lookup_context = {
 3580|  5.15k|      {{cached && &backtrack_class_def == &lookahead_class_def ? match_class_cached : match_class,
  ------------------
  |  Branch (3580:9): [True: 1.08k, False: 4.06k]
  |  Branch (3580:19): [True: 152, False: 934]
  ------------------
 3581|  5.15k|        cached && &input_class_def == &lookahead_class_def ? match_class_cached : match_class,
  ------------------
  |  Branch (3581:9): [True: 1.08k, False: 4.06k]
  |  Branch (3581:19): [True: 0, False: 1.08k]
  ------------------
 3582|  5.15k|        cached ? match_class_cached : match_class}},
  ------------------
  |  Branch (3582:9): [True: 1.08k, False: 4.06k]
  ------------------
 3583|  5.15k|      {&backtrack_class_def,
 3584|  5.15k|       &input_class_def,
 3585|  5.15k|       &lookahead_class_def}
 3586|  5.15k|    };
 3587|       |
 3588|  5.15k|    index = input_class_def.get_class (c->buffer->cur().codepoint);
 3589|  5.15k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3590|  5.15k|    return_trace (rule_set.apply (c, lookup_context));
  ------------------
  |  |  349|  5.15k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3591|  8.46k|  }
_ZNK2OT7Context8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
 2719|   203k|  {
 2720|   203k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   203k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9.34k, False: 194k]
  |  |  ------------------
  ------------------
 2721|   194k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   194k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 2722|   194k|    switch (u.format) {
 2723|  15.3k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  15.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2723:5): [True: 15.3k, False: 179k]
  ------------------
 2724|  18.9k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  18.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2724:5): [True: 18.9k, False: 175k]
  ------------------
 2725|  5.08k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2725:5): [True: 5.08k, False: 189k]
  ------------------
 2726|      0|#ifndef HB_NO_BEYOND_64K
 2727|  9.30k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  9.30k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.30k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2727:5): [True: 9.30k, False: 185k]
  ------------------
 2728|  32.0k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  32.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2728:5): [True: 32.0k, False: 162k]
  ------------------
 2729|      0|#endif
 2730|   113k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|   113k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   113k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2730:5): [True: 113k, False: 80.8k]
  ------------------
 2731|   194k|    }
 2732|   194k|  }
_ZNK2OT16ContextFormat1_4INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 2276|  15.3k|  {
 2277|  15.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  15.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2278|  15.3k|    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|  30.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  15.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 15.2k, False: 104]
  |  |  |  Branch (349:45): [True: 14.7k, False: 533]
  |  |  ------------------
  ------------------
 2279|  15.3k|  }
_ZNK2OT7RuleSetINS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 2129|  45.3k|  {
 2130|  45.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  45.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2131|  45.3k|    return_trace (rule.sanitize (c, this));
  ------------------
  |  |  349|  45.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  45.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2132|  45.3k|  }
_ZNK2OT4RuleINS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 2002|   119k|  {
 2003|   119k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   119k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2004|   119k|    return_trace (inputCount.sanitize (c) &&
  ------------------
  |  |  349|   708k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   119k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 117k, False: 2.08k]
  |  |  |  Branch (349:45): [True: 117k, False: 86]
  |  |  |  Branch (349:45): [True: 94.3k, False: 23.0k]
  |  |  |  Branch (349:45): [True: 115k, False: 2.03k]
  |  |  ------------------
  ------------------
 2005|   119k|		  lookupCount.sanitize (c) &&
 2006|   119k|		  c->check_range (inputZ.arrayZ,
 2007|   119k|				  inputZ.item_size * (inputCount ? inputCount - 1 : 0) +
 2008|   119k|				  LookupRecord::static_size * lookupCount));
 2009|   119k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 2538|  18.9k|  {
 2539|  18.9k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  18.9k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2540|  18.9k|    return_trace (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|  75.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  18.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 18.8k, False: 101]
  |  |  |  Branch (349:45): [True: 18.7k, False: 92]
  |  |  |  Branch (349:45): [True: 18.2k, False: 517]
  |  |  ------------------
  ------------------
 2541|  18.9k|  }
_ZNK2OT16ContextFormat1_4INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 2276|  9.30k|  {
 2277|  9.30k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  9.30k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2278|  9.30k|    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|  18.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.30k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 9.19k, False: 107]
  |  |  |  Branch (349:45): [True: 8.80k, False: 391]
  |  |  ------------------
  ------------------
 2279|  9.30k|  }
_ZNK2OT7RuleSetINS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 2129|  2.95k|  {
 2130|  2.95k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.95k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2131|  2.95k|    return_trace (rule.sanitize (c, this));
  ------------------
  |  |  349|  2.95k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.95k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 2132|  2.95k|  }
_ZNK2OT4RuleINS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 2002|  4.46k|  {
 2003|  4.46k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.46k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2004|  4.46k|    return_trace (inputCount.sanitize (c) &&
  ------------------
  |  |  349|  23.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.71k, False: 752]
  |  |  |  Branch (349:45): [True: 3.67k, False: 40]
  |  |  |  Branch (349:45): [True: 1.67k, False: 2.00k]
  |  |  |  Branch (349:45): [True: 3.29k, False: 384]
  |  |  ------------------
  ------------------
 2005|  4.46k|		  lookupCount.sanitize (c) &&
 2006|  4.46k|		  c->check_range (inputZ.arrayZ,
 2007|  4.46k|				  inputZ.item_size * (inputCount ? inputCount - 1 : 0) +
 2008|  4.46k|				  LookupRecord::static_size * lookupCount));
 2009|  4.46k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 2538|  32.0k|  {
 2539|  32.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  32.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 2540|  32.0k|    return_trace (coverage.sanitize (c, this) && classDef.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|   127k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  32.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 31.9k, False: 101]
  |  |  |  Branch (349:45): [True: 31.8k, False: 95]
  |  |  |  Branch (349:45): [True: 31.5k, False: 259]
  |  |  ------------------
  ------------------
 2541|  32.0k|  }
_ZNK2OT12ChainContext8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS3_DpOT0_:
 3911|   152k|  {
 3912|   152k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   152k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10.0k, False: 142k]
  |  |  ------------------
  ------------------
 3913|   142k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   142k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3914|   142k|    switch (u.format) {
 3915|  12.6k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  12.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3915:5): [True: 12.6k, False: 129k]
  ------------------
 3916|  17.0k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  17.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3916:5): [True: 17.0k, False: 125k]
  ------------------
 3917|  4.92k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.92k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.92k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3917:5): [True: 4.92k, False: 137k]
  ------------------
 3918|      0|#ifndef HB_NO_BEYOND_64K
 3919|  6.59k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  6.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3919:5): [True: 6.59k, False: 135k]
  ------------------
 3920|  13.3k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  13.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3920:5): [True: 13.3k, False: 128k]
  ------------------
 3921|      0|#endif
 3922|  87.7k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  87.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  87.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3922:5): [True: 87.7k, False: 54.5k]
  ------------------
 3923|   142k|    }
 3924|   142k|  }
_ZNK2OT21ChainContextFormat1_4INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 3357|  12.6k|  {
 3358|  12.6k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  12.6k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3359|  12.6k|    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|  25.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 12.4k, False: 211]
  |  |  |  Branch (349:45): [True: 11.8k, False: 554]
  |  |  ------------------
  ------------------
 3360|  12.6k|  }
_ZNK2OT12ChainRuleSetINS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 3211|  35.5k|  {
 3212|  35.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  35.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3213|  35.5k|    return_trace (rule.sanitize (c, this));
  ------------------
  |  |  349|  35.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  35.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3214|  35.5k|  }
_ZNK2OT9ChainRuleINS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 3076|   398k|  {
 3077|   398k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|   398k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3078|   398k|    if (!backtrack.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  3.65k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3078:9): [True: 3.65k, False: 394k]
  ------------------
 3079|   394k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3080|   394k|    if (!input.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|    665|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    665|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3080:9): [True: 665, False: 393k]
  ------------------
 3081|   393k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 3082|   393k|    if (!lookahead.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|    562|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    562|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3082:9): [True: 562, False: 393k]
  ------------------
 3083|   393k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 3084|   393k|    return_trace (lookup.sanitize (c));
  ------------------
  |  |  349|   393k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   393k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3085|   393k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE8sanitizeEP21hb_sanitize_context_t:
 3661|  17.0k|  {
 3662|  17.0k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.0k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3663|  17.0k|    return_trace (coverage.sanitize (c, this) &&
  ------------------
  |  |  349|   134k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  17.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 16.9k, False: 128]
  |  |  |  Branch (349:45): [True: 16.7k, False: 119]
  |  |  |  Branch (349:45): [True: 16.6k, False: 159]
  |  |  |  Branch (349:45): [True: 16.5k, False: 103]
  |  |  |  Branch (349:45): [True: 15.6k, False: 899]
  |  |  ------------------
  ------------------
 3664|  17.0k|		  backtrackClassDef.sanitize (c, this) &&
 3665|  17.0k|		  inputClassDef.sanitize (c, this) &&
 3666|  17.0k|		  lookaheadClassDef.sanitize (c, this) &&
 3667|  17.0k|		  ruleSet.sanitize (c, this));
 3668|  17.0k|  }
_ZNK2OT21ChainContextFormat1_4INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 3357|  6.59k|  {
 3358|  6.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3359|  6.59k|    return_trace (coverage.sanitize (c, this) && ruleSet.sanitize (c, this));
  ------------------
  |  |  349|  13.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.48k, False: 117]
  |  |  |  Branch (349:45): [True: 5.95k, False: 523]
  |  |  ------------------
  ------------------
 3360|  6.59k|  }
_ZNK2OT12ChainRuleSetINS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 3211|  4.59k|  {
 3212|  4.59k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  4.59k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3213|  4.59k|    return_trace (rule.sanitize (c, this));
  ------------------
  |  |  349|  4.59k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.59k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3214|  4.59k|  }
_ZNK2OT9ChainRuleINS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 3076|  80.5k|  {
 3077|  80.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  80.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3078|  80.5k|    if (!backtrack.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  1.87k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.87k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3078:9): [True: 1.87k, False: 78.7k]
  ------------------
 3079|  78.7k|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 3080|  78.7k|    if (!input.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|    354|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    354|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3080:9): [True: 354, False: 78.3k]
  ------------------
 3081|  78.3k|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 3082|  78.3k|    if (!lookahead.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|    304|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    304|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3082:9): [True: 304, False: 78.0k]
  ------------------
 3083|  78.0k|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 3084|  78.0k|    return_trace (lookup.sanitize (c));
  ------------------
  |  |  349|  78.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  78.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3085|  78.3k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE8sanitizeEP21hb_sanitize_context_t:
 3661|  13.3k|  {
 3662|  13.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  13.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3663|  13.3k|    return_trace (coverage.sanitize (c, this) &&
  ------------------
  |  |  349|   106k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  13.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 13.2k, False: 116]
  |  |  |  Branch (349:45): [True: 13.1k, False: 95]
  |  |  |  Branch (349:45): [True: 13.0k, False: 98]
  |  |  |  Branch (349:45): [True: 12.9k, False: 90]
  |  |  |  Branch (349:45): [True: 12.7k, False: 263]
  |  |  ------------------
  ------------------
 3664|  13.3k|		  backtrackClassDef.sanitize (c, this) &&
 3665|  13.3k|		  inputClassDef.sanitize (c, this) &&
 3666|  13.3k|		  lookaheadClassDef.sanitize (c, this) &&
 3667|  13.3k|		  ruleSet.sanitize (c, this));
 3668|  13.3k|  }
_ZNK2OT9ExtensionINS_6Layout9GPOS_impl12ExtensionPosEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS7_DpOT0_:
 4030|  18.9k|  {
 4031|  18.9k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  18.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.50k, False: 17.4k]
  |  |  ------------------
  ------------------
 4032|  17.4k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  17.4k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 4033|  17.4k|    switch (u.format) {
 4034|  3.18k|    case 1: return_trace (u.format1.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.18k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4034:5): [True: 3.18k, False: 14.2k]
  ------------------
 4035|  14.2k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4035:5): [True: 14.2k, False: 3.18k]
  ------------------
 4036|  17.4k|    }
 4037|  17.4k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS7_DpOT0_:
 3951|  3.18k|  {
 3952|  3.18k|    if (unlikely (!c->may_dispatch (this, this))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  3.18k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 105, False: 3.07k]
  |  |  ------------------
  ------------------
 3953|  3.07k|    TRACE_DISPATCH (this, format);
  ------------------
  |  |  467|  3.07k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3954|  3.07k|    return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.07k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3955|  3.18k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEE8sanitizeEP21hb_sanitize_context_t:
 3962|  3.18k|  {
 3963|  3.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3964|  3.18k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  6.29k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 3.11k, False: 70]
  |  |  |  Branch (349:45): [True: 3.07k, False: 35]
  |  |  ------------------
  ------------------
 3965|  3.18k|		  extensionLookupType != T::SubTable::Extension);
 3966|  3.18k|  }
_ZNK2OT9ExtensionINS_6Layout9GPOS_impl12ExtensionPosEE8get_typeEv:
 4001|  7.84k|  {
 4002|  7.84k|    switch (u.format) {
 4003|  1.23k|    case 1: return u.format1.get_type ();
  ------------------
  |  Branch (4003:5): [True: 1.23k, False: 6.60k]
  ------------------
 4004|  6.60k|    default:return 0;
  ------------------
  |  Branch (4004:5): [True: 6.60k, False: 1.23k]
  ------------------
 4005|  7.84k|    }
 4006|  7.84k|  }
_ZNK2OT8GSUBGPOS8sanitizeINS_6Layout9GPOS_impl9PosLookupEEEbP21hb_sanitize_context_t:
 4263|  17.7k|  {
 4264|  17.7k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  17.7k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4265|  17.7k|    if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  17.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 252, False: 17.4k]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|    252|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    252|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4266|  17.4k|    switch (u.version.major) {
 4267|  16.5k|    case 1: return_trace (u.version1.sanitize<TLookup> (c));
  ------------------
  |  |  349|  16.5k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4267:5): [True: 16.5k, False: 926]
  ------------------
 4268|      0|#ifndef HB_NO_BEYOND_64K
 4269|    550|    case 2: return_trace (u.version2.sanitize<TLookup> (c));
  ------------------
  |  |  349|    550|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    550|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4269:5): [True: 550, False: 16.9k]
  ------------------
 4270|      0|#endif
 4271|    376|    default: return_trace (true);
  ------------------
  |  |  349|    376|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    376|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4271:5): [True: 376, False: 17.1k]
  ------------------
 4272|  17.4k|    }
 4273|  17.4k|  }
_ZNK2OT18GSUBGPOSVersion1_2INS_6Layout10SmallTypesEE8sanitizeINS1_9GPOS_impl9PosLookupEEEbP21hb_sanitize_context_t:
 4174|  16.5k|  {
 4175|  16.5k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  16.5k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4176|  16.5k|    typedef List16OfOffsetTo<TLookup, typename Types::HBUINT> TLookupList;
 4177|  16.5k|    if (unlikely (!(scriptList.sanitize (c, this) &&
  ------------------
  |  |  259|  62.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.85k, False: 9.69k]
  |  |  |  Branch (259:47): [True: 15.0k, False: 1.47k]
  |  |  |  Branch (259:47): [True: 14.0k, False: 1.07k]
  |  |  |  Branch (259:47): [True: 9.69k, False: 4.30k]
  |  |  ------------------
  ------------------
 4178|  16.5k|		    featureList.sanitize (c, this) &&
 4179|  16.5k|		    reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))))
 4180|  6.85k|      return_trace (false);
  ------------------
  |  |  349|  6.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4181|       |
 4182|  9.69k|#ifndef HB_NO_VAR
 4183|  9.69k|    if (unlikely (!(version.to_int () < 0x00010001u || featureVars.sanitize (c, this))))
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 126, False: 9.57k]
  |  |  |  Branch (259:47): [True: 8.80k, False: 888]
  |  |  |  Branch (259:47): [True: 762, False: 126]
  |  |  ------------------
  ------------------
 4184|    126|      return_trace (false);
  ------------------
  |  |  349|    126|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    126|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4185|  9.57k|#endif
 4186|       |
 4187|  9.57k|    return_trace (true);
  ------------------
  |  |  349|  9.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.57k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4188|  9.69k|  }
_ZNK2OT18GSUBGPOSVersion1_2INS_6Layout11MediumTypesEE8sanitizeINS1_9GPOS_impl9PosLookupEEEbP21hb_sanitize_context_t:
 4174|    550|  {
 4175|    550|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    550|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4176|    550|    typedef List16OfOffsetTo<TLookup, typename Types::HBUINT> TLookupList;
 4177|    550|    if (unlikely (!(scriptList.sanitize (c, this) &&
  ------------------
  |  |  259|  1.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 211, False: 339]
  |  |  |  Branch (259:47): [True: 417, False: 133]
  |  |  |  Branch (259:47): [True: 387, False: 30]
  |  |  |  Branch (259:47): [True: 339, False: 48]
  |  |  ------------------
  ------------------
 4178|    550|		    featureList.sanitize (c, this) &&
 4179|    550|		    reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))))
 4180|    211|      return_trace (false);
  ------------------
  |  |  349|    211|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    211|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4181|       |
 4182|    339|#ifndef HB_NO_VAR
 4183|    339|    if (unlikely (!(version.to_int () < 0x00010001u || featureVars.sanitize (c, this))))
  ------------------
  |  |  259|    678|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 313]
  |  |  |  Branch (259:47): [True: 0, False: 339]
  |  |  |  Branch (259:47): [True: 313, False: 26]
  |  |  ------------------
  ------------------
 4184|     26|      return_trace (false);
  ------------------
  |  |  349|     26|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     26|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4185|    313|#endif
 4186|       |
 4187|    313|    return_trace (true);
  ------------------
  |  |  349|    313|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    313|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4188|    339|  }
_ZNK2OT8GSUBGPOS13accelerator_tINS_6Layout4GPOSEE9get_accelEj:
 4528|  2.69M|    {
 4529|  2.69M|      if (unlikely (lookup_index >= lookup_count)) return nullptr;
  ------------------
  |  |  259|  2.69M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.00M, False: 1.68M]
  |  |  ------------------
  ------------------
 4530|       |
 4531|  1.68M|    retry:
 4532|  1.68M|      auto *accel = accels[lookup_index].get_acquire ();
 4533|  1.68M|      if (unlikely (!accel))
  ------------------
  |  |  259|  1.68M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 18.0k, False: 1.66M]
  |  |  ------------------
  ------------------
 4534|  18.0k|      {
 4535|  18.0k|	accel = hb_ot_layout_lookup_accelerator_t::create (table->get_lookup (lookup_index));
 4536|  18.0k|	if (unlikely (!accel))
  ------------------
  |  |  259|  18.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 331, False: 17.7k]
  |  |  ------------------
  ------------------
 4537|    331|	  return nullptr;
 4538|       |
 4539|  17.7k|	if (unlikely (!accels[lookup_index].cmpexch (nullptr, accel)))
  ------------------
  |  |  259|  17.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 17.7k]
  |  |  ------------------
  ------------------
 4540|      0|	{
 4541|      0|	  hb_free (accel);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
 4542|      0|	  goto retry;
 4543|      0|	}
 4544|  17.7k|      }
 4545|       |
 4546|  1.68M|      return accel;
 4547|  1.68M|    }
_ZN2OT33hb_ot_layout_lookup_accelerator_t6createINS_6Layout9GPOS_impl9PosLookupEEEPS0_RKT_:
 4055|  18.0k|  {
 4056|  18.0k|    unsigned count = lookup.get_subtable_count ();
 4057|       |
 4058|  18.0k|    unsigned size = sizeof (hb_ot_layout_lookup_accelerator_t) -
 4059|  18.0k|		    HB_VAR_ARRAY * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t) +
  ------------------
  |  |   84|  18.0k|#define HB_VAR_ARRAY 1
  ------------------
 4060|  18.0k|		    count * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t);
 4061|       |
 4062|       |    /* The following is a calloc because when we are collecting subtables,
 4063|       |     * some of them might be invalid and hence not collect; as a result,
 4064|       |     * we might not fill in all the count entries of the subtables array.
 4065|       |     * Zeroing it allows the set digest to gatekeep it without having to
 4066|       |     * initialize it further. */
 4067|  18.0k|    auto *thiz = (hb_ot_layout_lookup_accelerator_t *) hb_calloc (1, size);
  ------------------
  |  |  234|  18.0k|#define hb_calloc hb_calloc_impl
  ------------------
 4068|  18.0k|    if (unlikely (!thiz))
  ------------------
  |  |  259|  18.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 331, False: 17.7k]
  |  |  ------------------
  ------------------
 4069|    331|      return nullptr;
 4070|       |
 4071|  17.7k|    hb_accelerate_subtables_context_t c_accelerate_subtables (thiz->subtables);
 4072|  17.7k|    lookup.dispatch (&c_accelerate_subtables);
 4073|       |
 4074|  17.7k|    thiz->digest.init ();
 4075|  17.7k|    for (auto& subtable : hb_iter (thiz->subtables, count))
  ------------------
  |  Branch (4075:25): [True: 468k, False: 17.7k]
  ------------------
 4076|   468k|      thiz->digest.add (subtable.digest);
 4077|       |
 4078|  17.7k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 4079|  17.7k|    thiz->cache_user_idx = c_accelerate_subtables.cache_user_idx;
 4080|   485k|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (4080:26): [True: 468k, False: 17.7k]
  ------------------
 4081|   468k|      if (i != thiz->cache_user_idx)
  ------------------
  |  Branch (4081:11): [True: 467k, False: 159]
  ------------------
 4082|   467k|	thiz->subtables[i].apply_cached_func = thiz->subtables[i].apply_func;
 4083|  17.7k|#endif
 4084|       |
 4085|  17.7k|    return thiz;
 4086|  18.0k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16SinglePosFormat1EEE10hb_empty_tRKT_:
  992|    382|  {
  993|    382|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    382|    entry->init (obj,
  996|    382|		 apply_to<T>
  997|    382|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    382|		 , apply_cached_to<T>
  999|    382|		 , cache_func_to<T>
 1000|    382|#endif
 1001|    382|		 );
 1002|       |
 1003|    382|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    382|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    382|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    382|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 382]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    382|#endif
 1019|       |
 1020|    382|    return hb_empty_t ();
 1021|    382|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16SinglePosFormat1EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESE_PFbSA_SC_bE:
  942|    382|    {
  943|    382|      obj = &obj_;
  944|    382|      apply_func = apply_func_;
  945|    382|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    382|      apply_cached_func = apply_cached_func_;
  947|    382|      cache_func = cache_func_;
  948|    382|#endif
  949|    382|      digest.init ();
  950|    382|      obj_.get_coverage ().collect_coverage (&digest);
  951|    382|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16SinglePosFormat1EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  5.79k|  {
  898|  5.79k|    const Type *typed_obj = (const Type *) obj;
  899|  5.79k|    return typed_obj->apply (c);
  900|  5.79k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16SinglePosFormat2EEE10hb_empty_tRKT_:
  992|    758|  {
  993|    758|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    758|    entry->init (obj,
  996|    758|		 apply_to<T>
  997|    758|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    758|		 , apply_cached_to<T>
  999|    758|		 , cache_func_to<T>
 1000|    758|#endif
 1001|    758|		 );
 1002|       |
 1003|    758|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    758|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    758|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    758|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 758]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    758|#endif
 1019|       |
 1020|    758|    return hb_empty_t ();
 1021|    758|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16SinglePosFormat2EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESE_PFbSA_SC_bE:
  942|    758|    {
  943|    758|      obj = &obj_;
  944|    758|      apply_func = apply_func_;
  945|    758|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    758|      apply_cached_func = apply_cached_func_;
  947|    758|      cache_func = cache_func_;
  948|    758|#endif
  949|    758|      digest.init ();
  950|    758|      obj_.get_coverage ().collect_coverage (&digest);
  951|    758|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16SinglePosFormat2EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  48.1k|  {
  898|  48.1k|    const Type *typed_obj = (const Type *) obj;
  899|  48.1k|    return typed_obj->apply (c);
  900|  48.1k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  2.23k|  {
  993|  2.23k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  2.23k|    entry->init (obj,
  996|  2.23k|		 apply_to<T>
  997|  2.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  2.23k|		 , apply_cached_to<T>
  999|  2.23k|		 , cache_func_to<T>
 1000|  2.23k|#endif
 1001|  2.23k|		 );
 1002|       |
 1003|  2.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  2.23k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  2.23k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  2.23k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 2.23k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  2.23k|#endif
 1019|       |
 1020|  2.23k|    return hb_empty_t ();
 1021|  2.23k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16PairPosFormat1_3INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  2.23k|    {
  943|  2.23k|      obj = &obj_;
  944|  2.23k|      apply_func = apply_func_;
  945|  2.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  2.23k|      apply_cached_func = apply_cached_func_;
  947|  2.23k|      cache_func = cache_func_;
  948|  2.23k|#endif
  949|  2.23k|      digest.init ();
  950|  2.23k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  2.23k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  4.32M|  {
  898|  4.32M|    const Type *typed_obj = (const Type *) obj;
  899|  4.32M|    return typed_obj->apply (c);
  900|  4.32M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|    954|  {
  993|    954|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    954|    entry->init (obj,
  996|    954|		 apply_to<T>
  997|    954|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    954|		 , apply_cached_to<T>
  999|    954|		 , cache_func_to<T>
 1000|    954|#endif
 1001|    954|		 );
 1002|       |
 1003|    954|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    954|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    954|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    954|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 954]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    954|#endif
 1019|       |
 1020|    954|    return hb_empty_t ();
 1021|    954|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16PairPosFormat2_4INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    954|    {
  943|    954|      obj = &obj_;
  944|    954|      apply_func = apply_func_;
  945|    954|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    954|      apply_cached_func = apply_cached_func_;
  947|    954|      cache_func = cache_func_;
  948|    954|#endif
  949|    954|      digest.init ();
  950|    954|      obj_.get_coverage ().collect_coverage (&digest);
  951|    954|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  41.5k|  {
  898|  41.5k|    const Type *typed_obj = (const Type *) obj;
  899|  41.5k|    return typed_obj->apply (c);
  900|  41.5k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    625|  {
  993|    625|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    625|    entry->init (obj,
  996|    625|		 apply_to<T>
  997|    625|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    625|		 , apply_cached_to<T>
  999|    625|		 , cache_func_to<T>
 1000|    625|#endif
 1001|    625|		 );
 1002|       |
 1003|    625|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    625|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    625|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    625|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 625]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    625|#endif
 1019|       |
 1020|    625|    return hb_empty_t ();
 1021|    625|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16PairPosFormat1_3INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    625|    {
  943|    625|      obj = &obj_;
  944|    625|      apply_func = apply_func_;
  945|    625|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    625|      apply_cached_func = apply_cached_func_;
  947|    625|      cache_func = cache_func_;
  948|    625|#endif
  949|    625|      digest.init ();
  950|    625|      obj_.get_coverage ().collect_coverage (&digest);
  951|    625|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   220k|  {
  898|   220k|    const Type *typed_obj = (const Type *) obj;
  899|   220k|    return typed_obj->apply (c);
  900|   220k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    790|  {
  993|    790|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    790|    entry->init (obj,
  996|    790|		 apply_to<T>
  997|    790|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    790|		 , apply_cached_to<T>
  999|    790|		 , cache_func_to<T>
 1000|    790|#endif
 1001|    790|		 );
 1002|       |
 1003|    790|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    790|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    790|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    790|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 790]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    790|#endif
 1019|       |
 1020|    790|    return hb_empty_t ();
 1021|    790|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl16PairPosFormat2_4INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    790|    {
  943|    790|      obj = &obj_;
  944|    790|      apply_func = apply_func_;
  945|    790|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    790|      apply_cached_func = apply_cached_func_;
  947|    790|      cache_func = cache_func_;
  948|    790|#endif
  949|    790|      digest.init ();
  950|    790|      obj_.get_coverage ().collect_coverage (&digest);
  951|    790|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   101k|  {
  898|   101k|    const Type *typed_obj = (const Type *) obj;
  899|   101k|    return typed_obj->apply (c);
  900|   101k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl17CursivePosFormat1EEE10hb_empty_tRKT_:
  992|  1.23k|  {
  993|  1.23k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.23k|    entry->init (obj,
  996|  1.23k|		 apply_to<T>
  997|  1.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.23k|		 , apply_cached_to<T>
  999|  1.23k|		 , cache_func_to<T>
 1000|  1.23k|#endif
 1001|  1.23k|		 );
 1002|       |
 1003|  1.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.23k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.23k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.23k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.23k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.23k|#endif
 1019|       |
 1020|  1.23k|    return hb_empty_t ();
 1021|  1.23k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl17CursivePosFormat1EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESE_PFbSA_SC_bE:
  942|  1.23k|    {
  943|  1.23k|      obj = &obj_;
  944|  1.23k|      apply_func = apply_func_;
  945|  1.23k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.23k|      apply_cached_func = apply_cached_func_;
  947|  1.23k|      cache_func = cache_func_;
  948|  1.23k|#endif
  949|  1.23k|      digest.init ();
  950|  1.23k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.23k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl17CursivePosFormat1EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  1.62M|  {
  898|  1.62M|    const Type *typed_obj = (const Type *) obj;
  899|  1.62M|    return typed_obj->apply (c);
  900|  1.62M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  1.56k|  {
  993|  1.56k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.56k|    entry->init (obj,
  996|  1.56k|		 apply_to<T>
  997|  1.56k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.56k|		 , apply_cached_to<T>
  999|  1.56k|		 , cache_func_to<T>
 1000|  1.56k|#endif
 1001|  1.56k|		 );
 1002|       |
 1003|  1.56k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.56k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.56k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.56k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.56k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.56k|#endif
 1019|       |
 1020|  1.56k|    return hb_empty_t ();
 1021|  1.56k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.56k|    {
  943|  1.56k|      obj = &obj_;
  944|  1.56k|      apply_func = apply_func_;
  945|  1.56k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.56k|      apply_cached_func = apply_cached_func_;
  947|  1.56k|      cache_func = cache_func_;
  948|  1.56k|#endif
  949|  1.56k|      digest.init ();
  950|  1.56k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.56k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  1.95M|  {
  898|  1.95M|    const Type *typed_obj = (const Type *) obj;
  899|  1.95M|    return typed_obj->apply (c);
  900|  1.95M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|  1.06k|  {
  993|  1.06k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.06k|    entry->init (obj,
  996|  1.06k|		 apply_to<T>
  997|  1.06k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.06k|		 , apply_cached_to<T>
  999|  1.06k|		 , cache_func_to<T>
 1000|  1.06k|#endif
 1001|  1.06k|		 );
 1002|       |
 1003|  1.06k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.06k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.06k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.06k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.06k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.06k|#endif
 1019|       |
 1020|  1.06k|    return hb_empty_t ();
 1021|  1.06k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.06k|    {
  943|  1.06k|      obj = &obj_;
  944|  1.06k|      apply_func = apply_func_;
  945|  1.06k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.06k|      apply_cached_func = apply_cached_func_;
  947|  1.06k|      cache_func = cache_func_;
  948|  1.06k|#endif
  949|  1.06k|      digest.init ();
  950|  1.06k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.06k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   728k|  {
  898|   728k|    const Type *typed_obj = (const Type *) obj;
  899|   728k|    return typed_obj->apply (c);
  900|   728k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  1.01k|  {
  993|  1.01k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.01k|    entry->init (obj,
  996|  1.01k|		 apply_to<T>
  997|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.01k|		 , apply_cached_to<T>
  999|  1.01k|		 , cache_func_to<T>
 1000|  1.01k|#endif
 1001|  1.01k|		 );
 1002|       |
 1003|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.01k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.01k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.01k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.01k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.01k|#endif
 1019|       |
 1020|  1.01k|    return hb_empty_t ();
 1021|  1.01k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.01k|    {
  943|  1.01k|      obj = &obj_;
  944|  1.01k|      apply_func = apply_func_;
  945|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.01k|      apply_cached_func = apply_cached_func_;
  947|  1.01k|      cache_func = cache_func_;
  948|  1.01k|#endif
  949|  1.01k|      digest.init ();
  950|  1.01k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.01k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   194k|  {
  898|   194k|    const Type *typed_obj = (const Type *) obj;
  899|   194k|    return typed_obj->apply (c);
  900|   194k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    990|  {
  993|    990|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    990|    entry->init (obj,
  996|    990|		 apply_to<T>
  997|    990|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    990|		 , apply_cached_to<T>
  999|    990|		 , cache_func_to<T>
 1000|    990|#endif
 1001|    990|		 );
 1002|       |
 1003|    990|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    990|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    990|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    990|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 990]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    990|#endif
 1019|       |
 1020|    990|    return hb_empty_t ();
 1021|    990|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    990|    {
  943|    990|      obj = &obj_;
  944|    990|      apply_func = apply_func_;
  945|    990|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    990|      apply_cached_func = apply_cached_func_;
  947|    990|      cache_func = cache_func_;
  948|    990|#endif
  949|    990|      digest.init ();
  950|    990|      obj_.get_coverage ().collect_coverage (&digest);
  951|    990|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   125k|  {
  898|   125k|    const Type *typed_obj = (const Type *) obj;
  899|   125k|    return typed_obj->apply (c);
  900|   125k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  1.03k|  {
  993|  1.03k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.03k|    entry->init (obj,
  996|  1.03k|		 apply_to<T>
  997|  1.03k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.03k|		 , apply_cached_to<T>
  999|  1.03k|		 , cache_func_to<T>
 1000|  1.03k|#endif
 1001|  1.03k|		 );
 1002|       |
 1003|  1.03k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.03k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.03k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.03k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.03k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.03k|#endif
 1019|       |
 1020|  1.03k|    return hb_empty_t ();
 1021|  1.03k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.03k|    {
  943|  1.03k|      obj = &obj_;
  944|  1.03k|      apply_func = apply_func_;
  945|  1.03k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.03k|      apply_cached_func = apply_cached_func_;
  947|  1.03k|      cache_func = cache_func_;
  948|  1.03k|#endif
  949|  1.03k|      digest.init ();
  950|  1.03k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.03k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   176k|  {
  898|   176k|    const Type *typed_obj = (const Type *) obj;
  899|   176k|    return typed_obj->apply (c);
  900|   176k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|  1.76k|  {
  993|  1.76k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.76k|    entry->init (obj,
  996|  1.76k|		 apply_to<T>
  997|  1.76k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.76k|		 , apply_cached_to<T>
  999|  1.76k|		 , cache_func_to<T>
 1000|  1.76k|#endif
 1001|  1.76k|		 );
 1002|       |
 1003|  1.76k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.76k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.76k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.76k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.76k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.76k|#endif
 1019|       |
 1020|  1.76k|    return hb_empty_t ();
 1021|  1.76k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.76k|    {
  943|  1.76k|      obj = &obj_;
  944|  1.76k|      apply_func = apply_func_;
  945|  1.76k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.76k|      apply_cached_func = apply_cached_func_;
  947|  1.76k|      cache_func = cache_func_;
  948|  1.76k|#endif
  949|  1.76k|      digest.init ();
  950|  1.76k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.76k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  55.7k|  {
  898|  55.7k|    const Type *typed_obj = (const Type *) obj;
  899|  55.7k|    return typed_obj->apply (c);
  900|  55.7k|  }
_ZNK2OT7Context8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS3_DpOT0_:
 2719|  48.7k|  {
 2720|  48.7k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  48.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 48.7k]
  |  |  ------------------
  ------------------
 2721|  48.7k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  48.7k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 2722|  48.7k|    switch (u.format) {
 2723|  4.50k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  4.50k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  4.50k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2723:5): [True: 4.50k, False: 44.2k]
  ------------------
 2724|  3.97k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.97k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.97k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2724:5): [True: 3.97k, False: 44.7k]
  ------------------
 2725|    864|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    864|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    864|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2725:5): [True: 864, False: 47.8k]
  ------------------
 2726|      0|#ifndef HB_NO_BEYOND_64K
 2727|    993|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    993|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    993|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2727:5): [True: 993, False: 47.7k]
  ------------------
 2728|  3.46k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.46k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.46k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2728:5): [True: 3.46k, False: 45.2k]
  ------------------
 2729|      0|#endif
 2730|  34.9k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  34.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2730:5): [True: 34.9k, False: 13.8k]
  ------------------
 2731|  48.7k|    }
 2732|  48.7k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_16ContextFormat1_4INS_6Layout10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  4.50k|  {
  993|  4.50k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  4.50k|    entry->init (obj,
  996|  4.50k|		 apply_to<T>
  997|  4.50k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  4.50k|		 , apply_cached_to<T>
  999|  4.50k|		 , cache_func_to<T>
 1000|  4.50k|#endif
 1001|  4.50k|		 );
 1002|       |
 1003|  4.50k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  4.50k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  4.50k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  4.50k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 4.50k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  4.50k|#endif
 1019|       |
 1020|  4.50k|    return hb_empty_t ();
 1021|  4.50k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_16ContextFormat1_4INS_6Layout10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  4.50k|    {
  943|  4.50k|      obj = &obj_;
  944|  4.50k|      apply_func = apply_func_;
  945|  4.50k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  4.50k|      apply_cached_func = apply_cached_func_;
  947|  4.50k|      cache_func = cache_func_;
  948|  4.50k|#endif
  949|  4.50k|      digest.init ();
  950|  4.50k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  4.50k|    }
_ZNK2OT16ContextFormat1_4INS_6Layout10SmallTypesEE12get_coverageEv:
 2234|  4.50k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_16ContextFormat1_4INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   583k|  {
  898|   583k|    const Type *typed_obj = (const Type *) obj;
  899|   583k|    return typed_obj->apply (c);
  900|   583k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  3.97k|  {
  993|  3.97k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  3.97k|    entry->init (obj,
  996|  3.97k|		 apply_to<T>
  997|  3.97k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  3.97k|		 , apply_cached_to<T>
  999|  3.97k|		 , cache_func_to<T>
 1000|  3.97k|#endif
 1001|  3.97k|		 );
 1002|       |
 1003|  3.97k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  3.97k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  3.97k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  3.97k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 409, False: 3.56k]
  ------------------
 1014|    409|    {
 1015|    409|      cache_user_idx = i - 1;
 1016|    409|      cache_user_cost = cost;
 1017|    409|    }
 1018|  3.97k|#endif
 1019|       |
 1020|  3.97k|    return hb_empty_t ();
 1021|  3.97k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  3.97k|    {
  943|  3.97k|      obj = &obj_;
  944|  3.97k|      apply_func = apply_func_;
  945|  3.97k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  3.97k|      apply_cached_func = apply_cached_func_;
  947|  3.97k|      cache_func = cache_func_;
  948|  3.97k|#endif
  949|  3.97k|      digest.init ();
  950|  3.97k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  3.97k|    }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE12get_coverageEv:
 2426|  3.97k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   189k|  {
  898|   189k|    const Type *typed_obj = (const Type *) obj;
  899|   189k|    return typed_obj->apply (c);
  900|   189k|  }
_ZN2OT33hb_accelerate_subtables_context_t15apply_cached_toINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  909|   429k|  {
  910|   429k|    const Type *typed_obj = (const Type *) obj;
  911|   429k|    return apply_cached_ (typed_obj, c, hb_prioritize);
  ------------------
  |  |   81|   429k|#define hb_prioritize hb_priority<16> ()
  ------------------
  912|   429k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE12apply_cachedEPNS_21hb_ot_apply_context_tE:
 2454|   429k|  bool apply_cached (hb_ot_apply_context_t *c) const { return _apply (c, true); }
_ZN2OT33hb_accelerate_subtables_context_t13cache_func_toINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tEb:
  920|  6.82k|  {
  921|  6.82k|    const Type *typed_obj = (const Type *) obj;
  922|  6.82k|    return cache_func_ (typed_obj, c, enter, hb_prioritize);
  ------------------
  |  |   81|  6.82k|#define hb_prioritize hb_priority<16> ()
  ------------------
  923|  6.82k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE10cache_funcEPNS_21hb_ot_apply_context_tEb:
 2434|  6.82k|  {
 2435|  6.82k|    if (enter)
  ------------------
  |  Branch (2435:9): [True: 3.44k, False: 3.37k]
  ------------------
 2436|  3.44k|    {
 2437|  3.44k|      if (!HB_BUFFER_TRY_ALLOCATE_VAR (c->buffer, syllable))
  ------------------
  |  |  670|  3.44k|#define HB_BUFFER_TRY_ALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, try_allocate_var, var ())
  |  |  ------------------
  |  |  |  |  667|  3.44k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  3.44k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  |  Branch (2437:11): [True: 73, False: 3.37k]
  ------------------
 2438|     73|	return false;
 2439|  3.37k|      auto &info = c->buffer->info;
 2440|  3.37k|      unsigned count = c->buffer->len;
 2441|  2.08M|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (2441:28): [True: 2.08M, False: 3.37k]
  ------------------
 2442|  2.08M|	info[i].syllable() = 255;
  ------------------
  |  |  147|  2.08M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2443|  3.37k|      c->new_syllables = 255;
 2444|  3.37k|      return true;
 2445|  3.44k|    }
 2446|  3.37k|    else
 2447|  3.37k|    {
 2448|  3.37k|      c->new_syllables = (unsigned) -1;
 2449|  3.37k|      HB_BUFFER_DEALLOCATE_VAR (c->buffer, syllable);
  ------------------
  |  |  671|  3.37k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  3.37k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  3.37k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 2450|  3.37k|      return true;
 2451|  3.37k|    }
 2452|  6.82k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE10cache_costEv:
 2429|  3.97k|  {
 2430|  3.97k|    unsigned c = (this+classDef).cost () * ruleSet.len;
 2431|  3.97k|    return c >= 4 ? c : 0;
  ------------------
  |  Branch (2431:12): [True: 712, False: 3.26k]
  ------------------
 2432|  3.97k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_14ContextFormat3EEE10hb_empty_tRKT_:
  992|    864|  {
  993|    864|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    864|    entry->init (obj,
  996|    864|		 apply_to<T>
  997|    864|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    864|		 , apply_cached_to<T>
  999|    864|		 , cache_func_to<T>
 1000|    864|#endif
 1001|    864|		 );
 1002|       |
 1003|    864|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    864|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    864|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    864|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 864]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    864|#endif
 1019|       |
 1020|    864|    return hb_empty_t ();
 1021|    864|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_14ContextFormat3EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESC_PFbS8_SA_bE:
  942|    864|    {
  943|    864|      obj = &obj_;
  944|    864|      apply_func = apply_func_;
  945|    864|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    864|      apply_cached_func = apply_cached_func_;
  947|    864|      cache_func = cache_func_;
  948|    864|#endif
  949|    864|      digest.init ();
  950|    864|      obj_.get_coverage ().collect_coverage (&digest);
  951|    864|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_14ContextFormat3EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   200k|  {
  898|   200k|    const Type *typed_obj = (const Type *) obj;
  899|   200k|    return typed_obj->apply (c);
  900|   200k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_16ContextFormat1_4INS_6Layout11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    993|  {
  993|    993|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    993|    entry->init (obj,
  996|    993|		 apply_to<T>
  997|    993|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    993|		 , apply_cached_to<T>
  999|    993|		 , cache_func_to<T>
 1000|    993|#endif
 1001|    993|		 );
 1002|       |
 1003|    993|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    993|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    993|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    993|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 993]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    993|#endif
 1019|       |
 1020|    993|    return hb_empty_t ();
 1021|    993|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_16ContextFormat1_4INS_6Layout11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|    993|    {
  943|    993|      obj = &obj_;
  944|    993|      apply_func = apply_func_;
  945|    993|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    993|      apply_cached_func = apply_cached_func_;
  947|    993|      cache_func = cache_func_;
  948|    993|#endif
  949|    993|      digest.init ();
  950|    993|      obj_.get_coverage ().collect_coverage (&digest);
  951|    993|    }
_ZNK2OT16ContextFormat1_4INS_6Layout11MediumTypesEE12get_coverageEv:
 2234|    993|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_16ContextFormat1_4INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  30.3k|  {
  898|  30.3k|    const Type *typed_obj = (const Type *) obj;
  899|  30.3k|    return typed_obj->apply (c);
  900|  30.3k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEE10hb_empty_tRKT_:
  992|  3.46k|  {
  993|  3.46k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  3.46k|    entry->init (obj,
  996|  3.46k|		 apply_to<T>
  997|  3.46k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  3.46k|		 , apply_cached_to<T>
  999|  3.46k|		 , cache_func_to<T>
 1000|  3.46k|#endif
 1001|  3.46k|		 );
 1002|       |
 1003|  3.46k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  3.46k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  3.46k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  3.46k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 107, False: 3.35k]
  ------------------
 1014|    107|    {
 1015|    107|      cache_user_idx = i - 1;
 1016|    107|      cache_user_cost = cost;
 1017|    107|    }
 1018|  3.46k|#endif
 1019|       |
 1020|  3.46k|    return hb_empty_t ();
 1021|  3.46k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  3.46k|    {
  943|  3.46k|      obj = &obj_;
  944|  3.46k|      apply_func = apply_func_;
  945|  3.46k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  3.46k|      apply_cached_func = apply_cached_func_;
  947|  3.46k|      cache_func = cache_func_;
  948|  3.46k|#endif
  949|  3.46k|      digest.init ();
  950|  3.46k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  3.46k|    }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE12get_coverageEv:
 2426|  3.46k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  7.31k|  {
  898|  7.31k|    const Type *typed_obj = (const Type *) obj;
  899|  7.31k|    return typed_obj->apply (c);
  900|  7.31k|  }
_ZN2OT33hb_accelerate_subtables_context_t15apply_cached_toINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  909|  2.82k|  {
  910|  2.82k|    const Type *typed_obj = (const Type *) obj;
  911|  2.82k|    return apply_cached_ (typed_obj, c, hb_prioritize);
  ------------------
  |  |   81|  2.82k|#define hb_prioritize hb_priority<16> ()
  ------------------
  912|  2.82k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE12apply_cachedEPNS_21hb_ot_apply_context_tE:
 2454|  2.82k|  bool apply_cached (hb_ot_apply_context_t *c) const { return _apply (c, true); }
_ZN2OT33hb_accelerate_subtables_context_t13cache_func_toINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tEb:
  920|  2.22k|  {
  921|  2.22k|    const Type *typed_obj = (const Type *) obj;
  922|  2.22k|    return cache_func_ (typed_obj, c, enter, hb_prioritize);
  ------------------
  |  |   81|  2.22k|#define hb_prioritize hb_priority<16> ()
  ------------------
  923|  2.22k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE10cache_funcEPNS_21hb_ot_apply_context_tEb:
 2434|  2.22k|  {
 2435|  2.22k|    if (enter)
  ------------------
  |  Branch (2435:9): [True: 1.11k, False: 1.10k]
  ------------------
 2436|  1.11k|    {
 2437|  1.11k|      if (!HB_BUFFER_TRY_ALLOCATE_VAR (c->buffer, syllable))
  ------------------
  |  |  670|  1.11k|#define HB_BUFFER_TRY_ALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, try_allocate_var, var ())
  |  |  ------------------
  |  |  |  |  667|  1.11k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.11k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  |  Branch (2437:11): [True: 13, False: 1.10k]
  ------------------
 2438|     13|	return false;
 2439|  1.10k|      auto &info = c->buffer->info;
 2440|  1.10k|      unsigned count = c->buffer->len;
 2441|  60.6k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (2441:28): [True: 59.5k, False: 1.10k]
  ------------------
 2442|  59.5k|	info[i].syllable() = 255;
  ------------------
  |  |  147|  59.5k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 2443|  1.10k|      c->new_syllables = 255;
 2444|  1.10k|      return true;
 2445|  1.11k|    }
 2446|  1.10k|    else
 2447|  1.10k|    {
 2448|  1.10k|      c->new_syllables = (unsigned) -1;
 2449|  1.10k|      HB_BUFFER_DEALLOCATE_VAR (c->buffer, syllable);
  ------------------
  |  |  671|  1.10k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  1.10k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.10k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 2450|  1.10k|      return true;
 2451|  1.10k|    }
 2452|  2.22k|  }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE10cache_costEv:
 2429|  3.46k|  {
 2430|  3.46k|    unsigned c = (this+classDef).cost () * ruleSet.len;
 2431|  3.46k|    return c >= 4 ? c : 0;
  ------------------
  |  Branch (2431:12): [True: 1.16k, False: 2.30k]
  ------------------
 2432|  3.46k|  }
_ZNK2OT12ChainContext8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS3_DpOT0_:
 3911|  49.6k|  {
 3912|  49.6k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  49.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.6k]
  |  |  ------------------
  ------------------
 3913|  49.6k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  49.6k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3914|  49.6k|    switch (u.format) {
 3915|  2.51k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.51k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.51k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3915:5): [True: 2.51k, False: 47.1k]
  ------------------
 3916|  3.64k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  3.64k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3916:5): [True: 3.64k, False: 46.0k]
  ------------------
 3917|  1.02k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3917:5): [True: 1.02k, False: 48.6k]
  ------------------
 3918|      0|#ifndef HB_NO_BEYOND_64K
 3919|    704|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    704|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    704|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3919:5): [True: 704, False: 48.9k]
  ------------------
 3920|  2.74k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.74k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.74k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3920:5): [True: 2.74k, False: 46.9k]
  ------------------
 3921|      0|#endif
 3922|  39.0k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  39.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  39.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3922:5): [True: 39.0k, False: 10.6k]
  ------------------
 3923|  49.6k|    }
 3924|  49.6k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  2.51k|  {
  993|  2.51k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  2.51k|    entry->init (obj,
  996|  2.51k|		 apply_to<T>
  997|  2.51k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  2.51k|		 , apply_cached_to<T>
  999|  2.51k|		 , cache_func_to<T>
 1000|  2.51k|#endif
 1001|  2.51k|		 );
 1002|       |
 1003|  2.51k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  2.51k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  2.51k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  2.51k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 2.51k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  2.51k|#endif
 1019|       |
 1020|  2.51k|    return hb_empty_t ();
 1021|  2.51k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  2.51k|    {
  943|  2.51k|      obj = &obj_;
  944|  2.51k|      apply_func = apply_func_;
  945|  2.51k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  2.51k|      apply_cached_func = apply_cached_func_;
  947|  2.51k|      cache_func = cache_func_;
  948|  2.51k|#endif
  949|  2.51k|      digest.init ();
  950|  2.51k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  2.51k|    }
_ZNK2OT21ChainContextFormat1_4INS_6Layout10SmallTypesEE12get_coverageEv:
 3316|  2.51k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   372k|  {
  898|   372k|    const Type *typed_obj = (const Type *) obj;
  899|   372k|    return typed_obj->apply (c);
  900|   372k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  3.64k|  {
  993|  3.64k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  3.64k|    entry->init (obj,
  996|  3.64k|		 apply_to<T>
  997|  3.64k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  3.64k|		 , apply_cached_to<T>
  999|  3.64k|		 , cache_func_to<T>
 1000|  3.64k|#endif
 1001|  3.64k|		 );
 1002|       |
 1003|  3.64k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  3.64k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  3.64k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  3.64k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 289, False: 3.35k]
  ------------------
 1014|    289|    {
 1015|    289|      cache_user_idx = i - 1;
 1016|    289|      cache_user_cost = cost;
 1017|    289|    }
 1018|  3.64k|#endif
 1019|       |
 1020|  3.64k|    return hb_empty_t ();
 1021|  3.64k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  3.64k|    {
  943|  3.64k|      obj = &obj_;
  944|  3.64k|      apply_func = apply_func_;
  945|  3.64k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  3.64k|      apply_cached_func = apply_cached_func_;
  947|  3.64k|      cache_func = cache_func_;
  948|  3.64k|#endif
  949|  3.64k|      digest.init ();
  950|  3.64k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  3.64k|    }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE12get_coverageEv:
 3529|  3.64k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  78.6k|  {
  898|  78.6k|    const Type *typed_obj = (const Type *) obj;
  899|  78.6k|    return typed_obj->apply (c);
  900|  78.6k|  }
_ZN2OT33hb_accelerate_subtables_context_t15apply_cached_toINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  909|   232k|  {
  910|   232k|    const Type *typed_obj = (const Type *) obj;
  911|   232k|    return apply_cached_ (typed_obj, c, hb_prioritize);
  ------------------
  |  |   81|   232k|#define hb_prioritize hb_priority<16> ()
  ------------------
  912|   232k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE12apply_cachedEPNS_21hb_ot_apply_context_tE:
 3557|   232k|  bool apply_cached (hb_ot_apply_context_t *c) const { return _apply (c, true); }
_ZN2OT33hb_accelerate_subtables_context_t13cache_func_toINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tEb:
  920|  4.78k|  {
  921|  4.78k|    const Type *typed_obj = (const Type *) obj;
  922|  4.78k|    return cache_func_ (typed_obj, c, enter, hb_prioritize);
  ------------------
  |  |   81|  4.78k|#define hb_prioritize hb_priority<16> ()
  ------------------
  923|  4.78k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE10cache_funcEPNS_21hb_ot_apply_context_tEb:
 3537|  4.78k|  {
 3538|  4.78k|    if (enter)
  ------------------
  |  Branch (3538:9): [True: 2.41k, False: 2.36k]
  ------------------
 3539|  2.41k|    {
 3540|  2.41k|      if (!HB_BUFFER_TRY_ALLOCATE_VAR (c->buffer, syllable))
  ------------------
  |  |  670|  2.41k|#define HB_BUFFER_TRY_ALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, try_allocate_var, var ())
  |  |  ------------------
  |  |  |  |  667|  2.41k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.41k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  |  Branch (3540:11): [True: 45, False: 2.36k]
  ------------------
 3541|     45|	return false;
 3542|  2.36k|      auto &info = c->buffer->info;
 3543|  2.36k|      unsigned count = c->buffer->len;
 3544|   787k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (3544:28): [True: 785k, False: 2.36k]
  ------------------
 3545|   785k|	info[i].syllable() = 255;
  ------------------
  |  |  147|   785k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 3546|  2.36k|      c->new_syllables = 255;
 3547|  2.36k|      return true;
 3548|  2.41k|    }
 3549|  2.36k|    else
 3550|  2.36k|    {
 3551|  2.36k|      c->new_syllables = (unsigned) -1;
 3552|  2.36k|      HB_BUFFER_DEALLOCATE_VAR (c->buffer, syllable);
  ------------------
  |  |  671|  2.36k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  2.36k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.36k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 3553|  2.36k|      return true;
 3554|  2.36k|    }
 3555|  4.78k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE10cache_costEv:
 3532|  3.64k|  {
 3533|  3.64k|    unsigned c = (this+lookaheadClassDef).cost () * ruleSet.len;
 3534|  3.64k|    return c >= 4 ? c : 0;
  ------------------
  |  Branch (3534:12): [True: 805, False: 2.84k]
  ------------------
 3535|  3.64k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_19ChainContextFormat3EEE10hb_empty_tRKT_:
  992|  1.02k|  {
  993|  1.02k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.02k|    entry->init (obj,
  996|  1.02k|		 apply_to<T>
  997|  1.02k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.02k|		 , apply_cached_to<T>
  999|  1.02k|		 , cache_func_to<T>
 1000|  1.02k|#endif
 1001|  1.02k|		 );
 1002|       |
 1003|  1.02k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.02k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.02k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.02k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.02k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.02k|#endif
 1019|       |
 1020|  1.02k|    return hb_empty_t ();
 1021|  1.02k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_19ChainContextFormat3EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESC_PFbS8_SA_bE:
  942|  1.02k|    {
  943|  1.02k|      obj = &obj_;
  944|  1.02k|      apply_func = apply_func_;
  945|  1.02k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.02k|      apply_cached_func = apply_cached_func_;
  947|  1.02k|      cache_func = cache_func_;
  948|  1.02k|#endif
  949|  1.02k|      digest.init ();
  950|  1.02k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.02k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_19ChainContextFormat3EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  46.0k|  {
  898|  46.0k|    const Type *typed_obj = (const Type *) obj;
  899|  46.0k|    return typed_obj->apply (c);
  900|  46.0k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    704|  {
  993|    704|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    704|    entry->init (obj,
  996|    704|		 apply_to<T>
  997|    704|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    704|		 , apply_cached_to<T>
  999|    704|		 , cache_func_to<T>
 1000|    704|#endif
 1001|    704|		 );
 1002|       |
 1003|    704|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    704|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    704|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    704|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 704]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    704|#endif
 1019|       |
 1020|    704|    return hb_empty_t ();
 1021|    704|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|    704|    {
  943|    704|      obj = &obj_;
  944|    704|      apply_func = apply_func_;
  945|    704|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    704|      apply_cached_func = apply_cached_func_;
  947|    704|      cache_func = cache_func_;
  948|    704|#endif
  949|    704|      digest.init ();
  950|    704|      obj_.get_coverage ().collect_coverage (&digest);
  951|    704|    }
_ZNK2OT21ChainContextFormat1_4INS_6Layout11MediumTypesEE12get_coverageEv:
 3316|    704|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   432k|  {
  898|   432k|    const Type *typed_obj = (const Type *) obj;
  899|   432k|    return typed_obj->apply (c);
  900|   432k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEE10hb_empty_tRKT_:
  992|  2.74k|  {
  993|  2.74k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  2.74k|    entry->init (obj,
  996|  2.74k|		 apply_to<T>
  997|  2.74k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  2.74k|		 , apply_cached_to<T>
  999|  2.74k|		 , cache_func_to<T>
 1000|  2.74k|#endif
 1001|  2.74k|		 );
 1002|       |
 1003|  2.74k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  2.74k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  2.74k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  2.74k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 203, False: 2.54k]
  ------------------
 1014|    203|    {
 1015|    203|      cache_user_idx = i - 1;
 1016|    203|      cache_user_cost = cost;
 1017|    203|    }
 1018|  2.74k|#endif
 1019|       |
 1020|  2.74k|    return hb_empty_t ();
 1021|  2.74k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESF_PFbSB_SD_bE:
  942|  2.74k|    {
  943|  2.74k|      obj = &obj_;
  944|  2.74k|      apply_func = apply_func_;
  945|  2.74k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  2.74k|      apply_cached_func = apply_cached_func_;
  947|  2.74k|      cache_func = cache_func_;
  948|  2.74k|#endif
  949|  2.74k|      digest.init ();
  950|  2.74k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  2.74k|    }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE12get_coverageEv:
 3529|  2.74k|  const Coverage &get_coverage () const { return this+coverage; }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  6.40k|  {
  898|  6.40k|    const Type *typed_obj = (const Type *) obj;
  899|  6.40k|    return typed_obj->apply (c);
  900|  6.40k|  }
_ZN2OT33hb_accelerate_subtables_context_t15apply_cached_toINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  909|  2.05k|  {
  910|  2.05k|    const Type *typed_obj = (const Type *) obj;
  911|  2.05k|    return apply_cached_ (typed_obj, c, hb_prioritize);
  ------------------
  |  |   81|  2.05k|#define hb_prioritize hb_priority<16> ()
  ------------------
  912|  2.05k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE12apply_cachedEPNS_21hb_ot_apply_context_tE:
 3557|  2.05k|  bool apply_cached (hb_ot_apply_context_t *c) const { return _apply (c, true); }
_ZN2OT33hb_accelerate_subtables_context_t13cache_func_toINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tEb:
  920|  3.74k|  {
  921|  3.74k|    const Type *typed_obj = (const Type *) obj;
  922|  3.74k|    return cache_func_ (typed_obj, c, enter, hb_prioritize);
  ------------------
  |  |   81|  3.74k|#define hb_prioritize hb_priority<16> ()
  ------------------
  923|  3.74k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE10cache_funcEPNS_21hb_ot_apply_context_tEb:
 3537|  3.74k|  {
 3538|  3.74k|    if (enter)
  ------------------
  |  Branch (3538:9): [True: 1.88k, False: 1.85k]
  ------------------
 3539|  1.88k|    {
 3540|  1.88k|      if (!HB_BUFFER_TRY_ALLOCATE_VAR (c->buffer, syllable))
  ------------------
  |  |  670|  1.88k|#define HB_BUFFER_TRY_ALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, try_allocate_var, var ())
  |  |  ------------------
  |  |  |  |  667|  1.88k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.88k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  |  Branch (3540:11): [True: 27, False: 1.85k]
  ------------------
 3541|     27|	return false;
 3542|  1.85k|      auto &info = c->buffer->info;
 3543|  1.85k|      unsigned count = c->buffer->len;
 3544|  8.16k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (3544:28): [True: 6.30k, False: 1.85k]
  ------------------
 3545|  6.30k|	info[i].syllable() = 255;
  ------------------
  |  |  147|  6.30k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 3546|  1.85k|      c->new_syllables = 255;
 3547|  1.85k|      return true;
 3548|  1.88k|    }
 3549|  1.85k|    else
 3550|  1.85k|    {
 3551|  1.85k|      c->new_syllables = (unsigned) -1;
 3552|  1.85k|      HB_BUFFER_DEALLOCATE_VAR (c->buffer, syllable);
  ------------------
  |  |  671|  1.85k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  1.85k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.85k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 3553|  1.85k|      return true;
 3554|  1.85k|    }
 3555|  3.74k|  }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE10cache_costEv:
 3532|  2.74k|  {
 3533|  2.74k|    unsigned c = (this+lookaheadClassDef).cost () * ruleSet.len;
 3534|  2.74k|    return c >= 4 ? c : 0;
  ------------------
  |  Branch (3534:12): [True: 244, False: 2.50k]
  ------------------
 3535|  2.74k|  }
_ZNK2OT9ExtensionINS_6Layout9GPOS_impl12ExtensionPosEE8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS7_DpOT0_:
 4030|  3.08k|  {
 4031|  3.08k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  3.08k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.08k]
  |  |  ------------------
  ------------------
 4032|  3.08k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  3.08k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 4033|  3.08k|    switch (u.format) {
 4034|    705|    case 1: return_trace (u.format1.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    705|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    705|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4034:5): [True: 705, False: 2.37k]
  ------------------
 4035|  2.37k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  2.37k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.37k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4035:5): [True: 2.37k, False: 705]
  ------------------
 4036|  3.08k|    }
 4037|  3.08k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GPOS_impl12ExtensionPosEE8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS7_DpOT0_:
 3951|    705|  {
 3952|    705|    if (unlikely (!c->may_dispatch (this, this))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|    705|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 705]
  |  |  ------------------
  ------------------
 3953|    705|    TRACE_DISPATCH (this, format);
  ------------------
  |  |  467|    705|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3954|    705|    return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    705|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    705|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3955|    705|  }
_ZN2OT8GSUBGPOS13accelerator_tINS_6Layout4GSUBEED2Ev:
 4520|  32.9k|    {
 4521|   305k|      for (unsigned int i = 0; i < this->lookup_count; i++)
  ------------------
  |  Branch (4521:32): [True: 272k, False: 32.9k]
  ------------------
 4522|   272k|	hb_free (this->accels[i]);
  ------------------
  |  |  236|   272k|#define hb_free hb_free_impl
  ------------------
 4523|  32.9k|      hb_free (this->accels);
  ------------------
  |  |  236|  32.9k|#define hb_free hb_free_impl
  ------------------
 4524|  32.9k|      this->table.destroy ();
 4525|  32.9k|    }
_ZN2OT8GSUBGPOS13accelerator_tINS_6Layout4GPOSEED2Ev:
 4520|  32.8k|    {
 4521|   102k|      for (unsigned int i = 0; i < this->lookup_count; i++)
  ------------------
  |  Branch (4521:32): [True: 69.8k, False: 32.8k]
  ------------------
 4522|  69.8k|	hb_free (this->accels[i]);
  ------------------
  |  |  236|  69.8k|#define hb_free hb_free_impl
  ------------------
 4523|  32.8k|      hb_free (this->accels);
  ------------------
  |  |  236|  32.8k|#define hb_free hb_free_impl
  ------------------
 4524|  32.8k|      this->table.destroy ();
 4525|  32.8k|    }
_ZNK2OT16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEE12get_subtableINS2_19SubstLookupSubTableEEERKT_v:
 3947|  7.49k|  { return this + reinterpret_cast<const Offset32To<typename T::SubTable> &> (extensionOffset); }
_ZNK2OT16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEE8get_typeEv:
 3943|  9.25k|  unsigned int get_type () const { return extensionLookupType; }
_ZNK2OT9ExtensionINS_6Layout9GSUB_impl14ExtensionSubstEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS7_DpOT0_:
 4030|  43.6k|  {
 4031|  43.6k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  43.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.64k, False: 41.9k]
  |  |  ------------------
  ------------------
 4032|  41.9k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  41.9k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 4033|  41.9k|    switch (u.format) {
 4034|  7.15k|    case 1: return_trace (u.format1.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.15k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4034:5): [True: 7.15k, False: 34.8k]
  ------------------
 4035|  34.8k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  34.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4035:5): [True: 34.8k, False: 7.15k]
  ------------------
 4036|  41.9k|    }
 4037|  41.9k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEE8dispatchI21hb_sanitize_context_tJEEENT_8return_tEPS7_DpOT0_:
 3951|  7.15k|  {
 3952|  7.15k|    if (unlikely (!c->may_dispatch (this, this))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  7.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 103, False: 7.05k]
  |  |  ------------------
  ------------------
 3953|  7.05k|    TRACE_DISPATCH (this, format);
  ------------------
  |  |  467|  7.05k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3954|  7.05k|    return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  7.05k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.05k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3955|  7.15k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEE8sanitizeEP21hb_sanitize_context_t:
 3962|  7.15k|  {
 3963|  7.15k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.15k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 3964|  7.15k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  14.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.15k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.06k, False: 89]
  |  |  |  Branch (349:45): [True: 7.05k, False: 14]
  |  |  ------------------
  ------------------
 3965|  7.15k|		  extensionLookupType != T::SubTable::Extension);
 3966|  7.15k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEbRKT_:
  283|  5.66k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEbRKT_:
  283|  1.50k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEEEbRKT_:
  283|  1.56k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEEEbRKT_:
  283|    753|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEEEbRKT_:
  283|   161k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEEEbRKT_:
  283|  2.18k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEEEbRKT_:
  283|    265|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEEEbRKT_:
  283|     38|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEbRKT_:
  283|  71.8k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEEEbRKT_:
  283|  21.6k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT7Context8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS3_DpOT0_:
 2719|   330k|  {
 2720|   330k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|   330k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 330k]
  |  |  ------------------
  ------------------
 2721|   330k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|   330k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 2722|   330k|    switch (u.format) {
 2723|  20.6k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  20.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  20.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2723:5): [True: 20.6k, False: 309k]
  ------------------
 2724|  55.8k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  55.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  55.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2724:5): [True: 55.8k, False: 274k]
  ------------------
 2725|  1.44k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  1.44k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.44k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2725:5): [True: 1.44k, False: 329k]
  ------------------
 2726|      0|#ifndef HB_NO_BEYOND_64K
 2727|  2.25k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  2.25k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.25k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2727:5): [True: 2.25k, False: 328k]
  ------------------
 2728|  12.8k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  12.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  12.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2728:5): [True: 12.8k, False: 317k]
  ------------------
 2729|      0|#endif
 2730|   237k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|   237k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   237k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (2730:5): [True: 237k, False: 93.1k]
  ------------------
 2731|   330k|    }
 2732|   330k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_16ContextFormat1_4INS_6Layout10SmallTypesEEEEEbRKT_:
  283|  20.6k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT16ContextFormat1_4INS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 2225|  20.6k|  {
 2226|  20.6k|    const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
 2227|  20.6k|    struct ContextApplyLookupContext lookup_context = {
 2228|  20.6k|      {match_glyph},
 2229|  20.6k|      nullptr
 2230|  20.6k|    };
 2231|  20.6k|    return rule_set.would_apply (c, lookup_context);
 2232|  20.6k|  }
_ZNK2OT7RuleSetINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextE:
 2076|  89.4k|  {
 2077|  89.4k|    return
 2078|  89.4k|    + hb_iter (rule)
 2079|  89.4k|    | hb_map (hb_add (this))
 2080|  89.4k|    | hb_map ([&] (const Rule &_) { return _.would_apply (c, lookup_context); })
 2081|  89.4k|    | hb_any
 2082|  89.4k|    ;
 2083|  89.4k|  }
_ZNK2OT4RuleINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextE:
 1945|   116k|  {
 1946|   116k|    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
 1947|   116k|					   (inputZ.as_array (inputCount ? inputCount - 1 : 0));
  ------------------
  |  Branch (1947:27): [True: 87.5k, False: 29.1k]
  ------------------
 1948|   116k|    return context_would_apply_lookup (c,
 1949|   116k|				       inputCount, inputZ.arrayZ,
 1950|   116k|				       lookupCount, lookupRecord.arrayZ,
 1951|   116k|				       lookup_context);
 1952|   116k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_16ContextFormat2_5INS_6Layout10SmallTypesEEEEEbRKT_:
  283|  55.8k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT16ContextFormat2_5INS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 2415|  55.8k|  {
 2416|  55.8k|    const ClassDef &class_def = this+classDef;
 2417|  55.8k|    unsigned int index = class_def.get_class (c->glyphs[0]);
 2418|  55.8k|    const RuleSet &rule_set = this+ruleSet[index];
 2419|  55.8k|    struct ContextApplyLookupContext lookup_context = {
 2420|  55.8k|      {match_class},
 2421|  55.8k|      &class_def
 2422|  55.8k|    };
 2423|  55.8k|    return rule_set.would_apply (c, lookup_context);
 2424|  55.8k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_14ContextFormat3EEEbRKT_:
  283|  1.44k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_16ContextFormat1_4INS_6Layout11MediumTypesEEEEEbRKT_:
  283|  2.25k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT16ContextFormat1_4INS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 2225|  2.25k|  {
 2226|  2.25k|    const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
 2227|  2.25k|    struct ContextApplyLookupContext lookup_context = {
 2228|  2.25k|      {match_glyph},
 2229|  2.25k|      nullptr
 2230|  2.25k|    };
 2231|  2.25k|    return rule_set.would_apply (c, lookup_context);
 2232|  2.25k|  }
_ZNK2OT7RuleSetINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextE:
 2076|  2.25k|  {
 2077|  2.25k|    return
 2078|  2.25k|    + hb_iter (rule)
 2079|  2.25k|    | hb_map (hb_add (this))
 2080|  2.25k|    | hb_map ([&] (const Rule &_) { return _.would_apply (c, lookup_context); })
 2081|  2.25k|    | hb_any
 2082|  2.25k|    ;
 2083|  2.25k|  }
_ZNK2OT4RuleINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextE:
 1945|  1.81k|  {
 1946|  1.81k|    const auto &lookupRecord = StructAfter<UnsizedArrayOf<LookupRecord>>
 1947|  1.81k|					   (inputZ.as_array (inputCount ? inputCount - 1 : 0));
  ------------------
  |  Branch (1947:27): [True: 448, False: 1.36k]
  ------------------
 1948|  1.81k|    return context_would_apply_lookup (c,
 1949|  1.81k|				       inputCount, inputZ.arrayZ,
 1950|  1.81k|				       lookupCount, lookupRecord.arrayZ,
 1951|  1.81k|				       lookup_context);
 1952|  1.81k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_16ContextFormat2_5INS_6Layout11MediumTypesEEEEEbRKT_:
  283|  12.8k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT16ContextFormat2_5INS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 2415|  12.8k|  {
 2416|  12.8k|    const ClassDef &class_def = this+classDef;
 2417|  12.8k|    unsigned int index = class_def.get_class (c->glyphs[0]);
 2418|  12.8k|    const RuleSet &rule_set = this+ruleSet[index];
 2419|  12.8k|    struct ContextApplyLookupContext lookup_context = {
 2420|  12.8k|      {match_class},
 2421|  12.8k|      &class_def
 2422|  12.8k|    };
 2423|  12.8k|    return rule_set.would_apply (c, lookup_context);
 2424|  12.8k|  }
_ZNK2OT12ChainContext8dispatchINS_24hb_would_apply_context_tEJEEENT_8return_tEPS3_DpOT0_:
 3911|  2.24M|  {
 3912|  2.24M|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  2.24M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.24M]
  |  |  ------------------
  ------------------
 3913|  2.24M|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  2.24M|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3914|  2.24M|    switch (u.format) {
 3915|   274k|    case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|   274k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   274k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3915:5): [True: 274k, False: 1.96M]
  ------------------
 3916|  33.8k|    case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  33.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  33.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3916:5): [True: 33.8k, False: 2.21M]
  ------------------
 3917|  19.6k|    case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  19.6k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3917:5): [True: 19.6k, False: 2.22M]
  ------------------
 3918|      0|#ifndef HB_NO_BEYOND_64K
 3919|  5.24k|    case 4: return_trace (c->dispatch (u.format4, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  5.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3919:5): [True: 5.24k, False: 2.23M]
  ------------------
 3920|  26.7k|    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|  26.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  26.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3920:5): [True: 26.7k, False: 2.21M]
  ------------------
 3921|      0|#endif
 3922|  1.88M|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  1.88M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.88M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (3922:5): [True: 1.88M, False: 360k]
  ------------------
 3923|  2.24M|    }
 3924|  2.24M|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_21ChainContextFormat1_4INS_6Layout10SmallTypesEEEEEbRKT_:
  283|   274k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT21ChainContextFormat1_4INS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 3307|   274k|  {
 3308|   274k|    const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
 3309|   274k|    struct ChainContextApplyLookupContext lookup_context = {
 3310|   274k|      {{match_glyph, match_glyph, match_glyph}},
 3311|   274k|      {nullptr, nullptr, nullptr}
 3312|   274k|    };
 3313|   274k|    return rule_set.would_apply (c, lookup_context);
 3314|   274k|  }
_ZNK2OT12ChainRuleSetINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 3152|   335k|  {
 3153|   335k|    return
 3154|   335k|    + hb_iter (rule)
 3155|   335k|    | hb_map (hb_add (this))
 3156|   335k|    | hb_map ([&] (const ChainRule &_) { return _.would_apply (c, lookup_context); })
 3157|   335k|    | hb_any
 3158|   335k|    ;
 3159|   335k|  }
_ZNK2OT9ChainRuleINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 2974|  6.54M|  {
 2975|  6.54M|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 2976|  6.54M|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 2977|  6.54M|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 2978|  6.54M|    return chain_context_would_apply_lookup (c,
 2979|  6.54M|					     backtrack.len, backtrack.arrayZ,
 2980|  6.54M|					     input.lenP1, input.arrayZ,
 2981|  6.54M|					     lookahead.len, lookahead.arrayZ, lookup.len,
 2982|  6.54M|					     lookup.arrayZ, lookup_context);
 2983|  6.54M|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_21ChainContextFormat2_5INS_6Layout10SmallTypesEEEEEbRKT_:
  283|  33.8k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT21ChainContextFormat2_5INS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 3513|  33.8k|  {
 3514|  33.8k|    const ClassDef &backtrack_class_def = this+backtrackClassDef;
 3515|  33.8k|    const ClassDef &input_class_def = this+inputClassDef;
 3516|  33.8k|    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 3517|       |
 3518|  33.8k|    unsigned int index = input_class_def.get_class (c->glyphs[0]);
 3519|  33.8k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3520|  33.8k|    struct ChainContextApplyLookupContext lookup_context = {
 3521|  33.8k|      {{match_class, match_class, match_class}},
 3522|  33.8k|      {&backtrack_class_def,
 3523|  33.8k|       &input_class_def,
 3524|  33.8k|       &lookahead_class_def}
 3525|  33.8k|    };
 3526|  33.8k|    return rule_set.would_apply (c, lookup_context);
 3527|  33.8k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_19ChainContextFormat3EEEbRKT_:
  283|  19.6k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZN2OT24hb_would_apply_context_t8dispatchINS_21ChainContextFormat1_4INS_6Layout11MediumTypesEEEEEbRKT_:
  283|  5.24k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT21ChainContextFormat1_4INS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 3307|  5.24k|  {
 3308|  5.24k|    const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
 3309|  5.24k|    struct ChainContextApplyLookupContext lookup_context = {
 3310|  5.24k|      {{match_glyph, match_glyph, match_glyph}},
 3311|  5.24k|      {nullptr, nullptr, nullptr}
 3312|  5.24k|    };
 3313|  5.24k|    return rule_set.would_apply (c, lookup_context);
 3314|  5.24k|  }
_ZNK2OT12ChainRuleSetINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 3152|  5.24k|  {
 3153|  5.24k|    return
 3154|  5.24k|    + hb_iter (rule)
 3155|  5.24k|    | hb_map (hb_add (this))
 3156|  5.24k|    | hb_map ([&] (const ChainRule &_) { return _.would_apply (c, lookup_context); })
 3157|  5.24k|    | hb_any
 3158|  5.24k|    ;
 3159|  5.24k|  }
_ZNK2OT9ChainRuleINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextE:
 2974|    870|  {
 2975|    870|    const auto &input = StructAfter<decltype (inputX)> (backtrack);
 2976|    870|    const auto &lookahead = StructAfter<decltype (lookaheadX)> (input);
 2977|    870|    const auto &lookup = StructAfter<decltype (lookupX)> (lookahead);
 2978|    870|    return chain_context_would_apply_lookup (c,
 2979|    870|					     backtrack.len, backtrack.arrayZ,
 2980|    870|					     input.lenP1, input.arrayZ,
 2981|    870|					     lookahead.len, lookahead.arrayZ, lookup.len,
 2982|    870|					     lookup.arrayZ, lookup_context);
 2983|    870|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_21ChainContextFormat2_5INS_6Layout11MediumTypesEEEEEbRKT_:
  283|  26.7k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT21ChainContextFormat2_5INS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tE:
 3513|  26.7k|  {
 3514|  26.7k|    const ClassDef &backtrack_class_def = this+backtrackClassDef;
 3515|  26.7k|    const ClassDef &input_class_def = this+inputClassDef;
 3516|  26.7k|    const ClassDef &lookahead_class_def = this+lookaheadClassDef;
 3517|       |
 3518|  26.7k|    unsigned int index = input_class_def.get_class (c->glyphs[0]);
 3519|  26.7k|    const ChainRuleSet &rule_set = this+ruleSet[index];
 3520|  26.7k|    struct ChainContextApplyLookupContext lookup_context = {
 3521|  26.7k|      {{match_class, match_class, match_class}},
 3522|  26.7k|      {&backtrack_class_def,
 3523|  26.7k|       &input_class_def,
 3524|  26.7k|       &lookahead_class_def}
 3525|  26.7k|    };
 3526|  26.7k|    return rule_set.would_apply (c, lookup_context);
 3527|  26.7k|  }
_ZN2OT24hb_would_apply_context_t8dispatchINS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EEEbRKT_:
  283|   505k|  return_t dispatch (const T &obj) { return obj.would_apply (this); }
_ZNK2OT8GSUBGPOS8sanitizeINS_6Layout9GSUB_impl11SubstLookupEEEbP21hb_sanitize_context_t:
 4263|  24.8k|  {
 4264|  24.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  24.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4265|  24.8k|    if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  24.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 287, False: 24.5k]
  |  |  ------------------
  ------------------
                  if (unlikely (!u.version.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|    287|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    287|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4266|  24.5k|    switch (u.version.major) {
 4267|  23.8k|    case 1: return_trace (u.version1.sanitize<TLookup> (c));
  ------------------
  |  |  349|  23.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4267:5): [True: 23.8k, False: 724]
  ------------------
 4268|      0|#ifndef HB_NO_BEYOND_64K
 4269|    483|    case 2: return_trace (u.version2.sanitize<TLookup> (c));
  ------------------
  |  |  349|    483|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    483|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4269:5): [True: 483, False: 24.0k]
  ------------------
 4270|      0|#endif
 4271|    241|    default: return_trace (true);
  ------------------
  |  |  349|    241|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    241|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4271:5): [True: 241, False: 24.3k]
  ------------------
 4272|  24.5k|    }
 4273|  24.5k|  }
_ZNK2OT18GSUBGPOSVersion1_2INS_6Layout10SmallTypesEE8sanitizeINS1_9GSUB_impl11SubstLookupEEEbP21hb_sanitize_context_t:
 4174|  23.8k|  {
 4175|  23.8k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  23.8k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4176|  23.8k|    typedef List16OfOffsetTo<TLookup, typename Types::HBUINT> TLookupList;
 4177|  23.8k|    if (unlikely (!(scriptList.sanitize (c, this) &&
  ------------------
  |  |  259|  90.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9.24k, False: 14.5k]
  |  |  |  Branch (259:47): [True: 22.1k, False: 1.70k]
  |  |  |  Branch (259:47): [True: 20.7k, False: 1.39k]
  |  |  |  Branch (259:47): [True: 14.5k, False: 6.14k]
  |  |  ------------------
  ------------------
 4178|  23.8k|		    featureList.sanitize (c, this) &&
 4179|  23.8k|		    reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))))
 4180|  9.24k|      return_trace (false);
  ------------------
  |  |  349|  9.24k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  9.24k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4181|       |
 4182|  14.5k|#ifndef HB_NO_VAR
 4183|  14.5k|    if (unlikely (!(version.to_int () < 0x00010001u || featureVars.sanitize (c, this))))
  ------------------
  |  |  259|  15.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 180, False: 14.4k]
  |  |  |  Branch (259:47): [True: 13.2k, False: 1.35k]
  |  |  |  Branch (259:47): [True: 1.17k, False: 180]
  |  |  ------------------
  ------------------
 4184|    180|      return_trace (false);
  ------------------
  |  |  349|    180|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    180|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4185|  14.4k|#endif
 4186|       |
 4187|  14.4k|    return_trace (true);
  ------------------
  |  |  349|  14.4k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  14.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4188|  14.5k|  }
_ZNK2OT18GSUBGPOSVersion1_2INS_6Layout11MediumTypesEE8sanitizeINS1_9GSUB_impl11SubstLookupEEEbP21hb_sanitize_context_t:
 4174|    483|  {
 4175|    483|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    483|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 4176|    483|    typedef List16OfOffsetTo<TLookup, typename Types::HBUINT> TLookupList;
 4177|    483|    if (unlikely (!(scriptList.sanitize (c, this) &&
  ------------------
  |  |  259|  1.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 187, False: 296]
  |  |  |  Branch (259:47): [True: 366, False: 117]
  |  |  |  Branch (259:47): [True: 336, False: 30]
  |  |  |  Branch (259:47): [True: 296, False: 40]
  |  |  ------------------
  ------------------
 4178|    483|		    featureList.sanitize (c, this) &&
 4179|    483|		    reinterpret_cast<const typename Types::template OffsetTo<TLookupList> &> (lookupList).sanitize (c, this))))
 4180|    187|      return_trace (false);
  ------------------
  |  |  349|    187|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    187|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4181|       |
 4182|    296|#ifndef HB_NO_VAR
 4183|    296|    if (unlikely (!(version.to_int () < 0x00010001u || featureVars.sanitize (c, this))))
  ------------------
  |  |  259|    592|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39, False: 257]
  |  |  |  Branch (259:47): [True: 0, False: 296]
  |  |  |  Branch (259:47): [True: 257, False: 39]
  |  |  ------------------
  ------------------
 4184|     39|      return_trace (false);
  ------------------
  |  |  349|     39|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     39|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4185|    257|#endif
 4186|       |
 4187|    257|    return_trace (true);
  ------------------
  |  |  349|    257|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    257|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 4188|    296|  }
_ZNK2OT9ExtensionINS_6Layout9GSUB_impl14ExtensionSubstEE8get_typeEv:
 4001|  21.3k|  {
 4002|  21.3k|    switch (u.format) {
 4003|  1.76k|    case 1: return u.format1.get_type ();
  ------------------
  |  Branch (4003:5): [True: 1.76k, False: 19.6k]
  ------------------
 4004|  19.6k|    default:return 0;
  ------------------
  |  Branch (4004:5): [True: 19.6k, False: 1.76k]
  ------------------
 4005|  21.3k|    }
 4006|  21.3k|  }
_ZNK2OT8GSUBGPOS13accelerator_tINS_6Layout4GSUBEE9get_accelEj:
 4528|  5.68M|    {
 4529|  5.68M|      if (unlikely (lookup_index >= lookup_count)) return nullptr;
  ------------------
  |  |  259|  5.68M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.15M, False: 4.52M]
  |  |  ------------------
  ------------------
 4530|       |
 4531|  4.52M|    retry:
 4532|  4.52M|      auto *accel = accels[lookup_index].get_acquire ();
 4533|  4.52M|      if (unlikely (!accel))
  ------------------
  |  |  259|  4.52M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36.3k, False: 4.49M]
  |  |  ------------------
  ------------------
 4534|  36.3k|      {
 4535|  36.3k|	accel = hb_ot_layout_lookup_accelerator_t::create (table->get_lookup (lookup_index));
 4536|  36.3k|	if (unlikely (!accel))
  ------------------
  |  |  259|  36.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 546, False: 35.8k]
  |  |  ------------------
  ------------------
 4537|    546|	  return nullptr;
 4538|       |
 4539|  35.8k|	if (unlikely (!accels[lookup_index].cmpexch (nullptr, accel)))
  ------------------
  |  |  259|  35.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 35.8k]
  |  |  ------------------
  ------------------
 4540|      0|	{
 4541|      0|	  hb_free (accel);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
 4542|      0|	  goto retry;
 4543|      0|	}
 4544|  35.8k|      }
 4545|       |
 4546|  4.52M|      return accel;
 4547|  4.52M|    }
_ZN2OT33hb_ot_layout_lookup_accelerator_t6createINS_6Layout9GSUB_impl11SubstLookupEEEPS0_RKT_:
 4055|  37.8k|  {
 4056|  37.8k|    unsigned count = lookup.get_subtable_count ();
 4057|       |
 4058|  37.8k|    unsigned size = sizeof (hb_ot_layout_lookup_accelerator_t) -
 4059|  37.8k|		    HB_VAR_ARRAY * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t) +
  ------------------
  |  |   84|  37.8k|#define HB_VAR_ARRAY 1
  ------------------
 4060|  37.8k|		    count * sizeof (hb_accelerate_subtables_context_t::hb_applicable_t);
 4061|       |
 4062|       |    /* The following is a calloc because when we are collecting subtables,
 4063|       |     * some of them might be invalid and hence not collect; as a result,
 4064|       |     * we might not fill in all the count entries of the subtables array.
 4065|       |     * Zeroing it allows the set digest to gatekeep it without having to
 4066|       |     * initialize it further. */
 4067|  37.8k|    auto *thiz = (hb_ot_layout_lookup_accelerator_t *) hb_calloc (1, size);
  ------------------
  |  |  234|  37.8k|#define hb_calloc hb_calloc_impl
  ------------------
 4068|  37.8k|    if (unlikely (!thiz))
  ------------------
  |  |  259|  37.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 569, False: 37.2k]
  |  |  ------------------
  ------------------
 4069|    569|      return nullptr;
 4070|       |
 4071|  37.2k|    hb_accelerate_subtables_context_t c_accelerate_subtables (thiz->subtables);
 4072|  37.2k|    lookup.dispatch (&c_accelerate_subtables);
 4073|       |
 4074|  37.2k|    thiz->digest.init ();
 4075|  37.2k|    for (auto& subtable : hb_iter (thiz->subtables, count))
  ------------------
  |  Branch (4075:25): [True: 656k, False: 37.2k]
  ------------------
 4076|   656k|      thiz->digest.add (subtable.digest);
 4077|       |
 4078|  37.2k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 4079|  37.2k|    thiz->cache_user_idx = c_accelerate_subtables.cache_user_idx;
 4080|   693k|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (4080:26): [True: 656k, False: 37.2k]
  ------------------
 4081|   656k|      if (i != thiz->cache_user_idx)
  ------------------
  |  Branch (4081:11): [True: 655k, False: 814]
  ------------------
 4082|   655k|	thiz->subtables[i].apply_cached_func = thiz->subtables[i].apply_func;
 4083|  37.2k|#endif
 4084|       |
 4085|  37.2k|    return thiz;
 4086|  37.8k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|    558|  {
  993|    558|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    558|    entry->init (obj,
  996|    558|		 apply_to<T>
  997|    558|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    558|		 , apply_cached_to<T>
  999|    558|		 , cache_func_to<T>
 1000|    558|#endif
 1001|    558|		 );
 1002|       |
 1003|    558|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    558|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    558|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    558|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 558]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    558|#endif
 1019|       |
 1020|    558|    return hb_empty_t ();
 1021|    558|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    558|    {
  943|    558|      obj = &obj_;
  944|    558|      apply_func = apply_func_;
  945|    558|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    558|      apply_cached_func = apply_cached_func_;
  947|    558|      cache_func = cache_func_;
  948|    558|#endif
  949|    558|      digest.init ();
  950|    558|      obj_.get_coverage ().collect_coverage (&digest);
  951|    558|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   216k|  {
  898|   216k|    const Type *typed_obj = (const Type *) obj;
  899|   216k|    return typed_obj->apply (c);
  900|   216k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  1.42k|  {
  993|  1.42k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.42k|    entry->init (obj,
  996|  1.42k|		 apply_to<T>
  997|  1.42k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.42k|		 , apply_cached_to<T>
  999|  1.42k|		 , cache_func_to<T>
 1000|  1.42k|#endif
 1001|  1.42k|		 );
 1002|       |
 1003|  1.42k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.42k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.42k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.42k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.42k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.42k|#endif
 1019|       |
 1020|  1.42k|    return hb_empty_t ();
 1021|  1.42k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.42k|    {
  943|  1.42k|      obj = &obj_;
  944|  1.42k|      apply_func = apply_func_;
  945|  1.42k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.42k|      apply_cached_func = apply_cached_func_;
  947|  1.42k|      cache_func = cache_func_;
  948|  1.42k|#endif
  949|  1.42k|      digest.init ();
  950|  1.42k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.42k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   125k|  {
  898|   125k|    const Type *typed_obj = (const Type *) obj;
  899|   125k|    return typed_obj->apply (c);
  900|   125k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    137|  {
  993|    137|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    137|    entry->init (obj,
  996|    137|		 apply_to<T>
  997|    137|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    137|		 , apply_cached_to<T>
  999|    137|		 , cache_func_to<T>
 1000|    137|#endif
 1001|    137|		 );
 1002|       |
 1003|    137|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    137|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    137|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    137|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 137]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    137|#endif
 1019|       |
 1020|    137|    return hb_empty_t ();
 1021|    137|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    137|    {
  943|    137|      obj = &obj_;
  944|    137|      apply_func = apply_func_;
  945|    137|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    137|      apply_cached_func = apply_cached_func_;
  947|    137|      cache_func = cache_func_;
  948|    137|#endif
  949|    137|      digest.init ();
  950|    137|      obj_.get_coverage ().collect_coverage (&digest);
  951|    137|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  5.04k|  {
  898|  5.04k|    const Type *typed_obj = (const Type *) obj;
  899|  5.04k|    return typed_obj->apply (c);
  900|  5.04k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    613|  {
  993|    613|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    613|    entry->init (obj,
  996|    613|		 apply_to<T>
  997|    613|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    613|		 , apply_cached_to<T>
  999|    613|		 , cache_func_to<T>
 1000|    613|#endif
 1001|    613|		 );
 1002|       |
 1003|    613|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    613|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    613|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    613|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 613]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    613|#endif
 1019|       |
 1020|    613|    return hb_empty_t ();
 1021|    613|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    613|    {
  943|    613|      obj = &obj_;
  944|    613|      apply_func = apply_func_;
  945|    613|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    613|      apply_cached_func = apply_cached_func_;
  947|    613|      cache_func = cache_func_;
  948|    613|#endif
  949|    613|      digest.init ();
  950|    613|      obj_.get_coverage ().collect_coverage (&digest);
  951|    613|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl20SingleSubstFormat2_4INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  6.22k|  {
  898|  6.22k|    const Type *typed_obj = (const Type *) obj;
  899|  6.22k|    return typed_obj->apply (c);
  900|  6.22k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  7.13k|  {
  993|  7.13k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  7.13k|    entry->init (obj,
  996|  7.13k|		 apply_to<T>
  997|  7.13k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  7.13k|		 , apply_cached_to<T>
  999|  7.13k|		 , cache_func_to<T>
 1000|  7.13k|#endif
 1001|  7.13k|		 );
 1002|       |
 1003|  7.13k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  7.13k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  7.13k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  7.13k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 7.13k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  7.13k|#endif
 1019|       |
 1020|  7.13k|    return hb_empty_t ();
 1021|  7.13k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  7.13k|    {
  943|  7.13k|      obj = &obj_;
  944|  7.13k|      apply_func = apply_func_;
  945|  7.13k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  7.13k|      apply_cached_func = apply_cached_func_;
  947|  7.13k|      cache_func = cache_func_;
  948|  7.13k|#endif
  949|  7.13k|      digest.init ();
  950|  7.13k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  7.13k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  2.88M|  {
  898|  2.88M|    const Type *typed_obj = (const Type *) obj;
  899|  2.88M|    return typed_obj->apply (c);
  900|  2.88M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    874|  {
  993|    874|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    874|    entry->init (obj,
  996|    874|		 apply_to<T>
  997|    874|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    874|		 , apply_cached_to<T>
  999|    874|		 , cache_func_to<T>
 1000|    874|#endif
 1001|    874|		 );
 1002|       |
 1003|    874|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    874|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    874|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    874|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 874]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    874|#endif
 1019|       |
 1020|    874|    return hb_empty_t ();
 1021|    874|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    874|    {
  943|    874|      obj = &obj_;
  944|    874|      apply_func = apply_func_;
  945|    874|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    874|      apply_cached_func = apply_cached_func_;
  947|    874|      cache_func = cache_func_;
  948|    874|#endif
  949|    874|      digest.init ();
  950|    874|      obj_.get_coverage ().collect_coverage (&digest);
  951|    874|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl22MultipleSubstFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  25.7k|  {
  898|  25.7k|    const Type *typed_obj = (const Type *) obj;
  899|  25.7k|    return typed_obj->apply (c);
  900|  25.7k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  1.00k|  {
  993|  1.00k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.00k|    entry->init (obj,
  996|  1.00k|		 apply_to<T>
  997|  1.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.00k|		 , apply_cached_to<T>
  999|  1.00k|		 , cache_func_to<T>
 1000|  1.00k|#endif
 1001|  1.00k|		 );
 1002|       |
 1003|  1.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.00k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.00k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.00k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.00k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.00k|#endif
 1019|       |
 1020|  1.00k|    return hb_empty_t ();
 1021|  1.00k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.00k|    {
  943|  1.00k|      obj = &obj_;
  944|  1.00k|      apply_func = apply_func_;
  945|  1.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.00k|      apply_cached_func = apply_cached_func_;
  947|  1.00k|      cache_func = cache_func_;
  948|  1.00k|#endif
  949|  1.00k|      digest.init ();
  950|  1.00k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.00k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  1.41M|  {
  898|  1.41M|    const Type *typed_obj = (const Type *) obj;
  899|  1.41M|    return typed_obj->apply (c);
  900|  1.41M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|    450|  {
  993|    450|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|    450|    entry->init (obj,
  996|    450|		 apply_to<T>
  997|    450|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|    450|		 , apply_cached_to<T>
  999|    450|		 , cache_func_to<T>
 1000|    450|#endif
 1001|    450|		 );
 1002|       |
 1003|    450|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|    450|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|    450|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|    450|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 450]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|    450|#endif
 1019|       |
 1020|    450|    return hb_empty_t ();
 1021|    450|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|    450|    {
  943|    450|      obj = &obj_;
  944|    450|      apply_func = apply_func_;
  945|    450|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|    450|      apply_cached_func = apply_cached_func_;
  947|    450|      cache_func = cache_func_;
  948|    450|#endif
  949|    450|      digest.init ();
  950|    450|      obj_.get_coverage ().collect_coverage (&digest);
  951|    450|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl23AlternateSubstFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   130k|  {
  898|   130k|    const Type *typed_obj = (const Type *) obj;
  899|   130k|    return typed_obj->apply (c);
  900|   130k|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEE10hb_empty_tRKT_:
  992|  5.16k|  {
  993|  5.16k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  5.16k|    entry->init (obj,
  996|  5.16k|		 apply_to<T>
  997|  5.16k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  5.16k|		 , apply_cached_to<T>
  999|  5.16k|		 , cache_func_to<T>
 1000|  5.16k|#endif
 1001|  5.16k|		 );
 1002|       |
 1003|  5.16k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  5.16k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  5.16k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  5.16k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 5.16k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  5.16k|#endif
 1019|       |
 1020|  5.16k|    return hb_empty_t ();
 1021|  5.16k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS3_10SmallTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  5.16k|    {
  943|  5.16k|      obj = &obj_;
  944|  5.16k|      apply_func = apply_func_;
  945|  5.16k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  5.16k|      apply_cached_func = apply_cached_func_;
  947|  5.16k|      cache_func = cache_func_;
  948|  5.16k|#endif
  949|  5.16k|      digest.init ();
  950|  5.16k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  5.16k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  3.08M|  {
  898|  3.08M|    const Type *typed_obj = (const Type *) obj;
  899|  3.08M|    return typed_obj->apply (c);
  900|  3.08M|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEEE10hb_empty_tRKT_:
  992|  1.01k|  {
  993|  1.01k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  1.01k|    entry->init (obj,
  996|  1.01k|		 apply_to<T>
  997|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  1.01k|		 , apply_cached_to<T>
  999|  1.01k|		 , cache_func_to<T>
 1000|  1.01k|#endif
 1001|  1.01k|		 );
 1002|       |
 1003|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  1.01k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  1.01k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  1.01k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 1.01k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  1.01k|#endif
 1019|       |
 1020|  1.01k|    return hb_empty_t ();
 1021|  1.01k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS3_11MediumTypesEEEEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESG_PFbSC_SE_bE:
  942|  1.01k|    {
  943|  1.01k|      obj = &obj_;
  944|  1.01k|      apply_func = apply_func_;
  945|  1.01k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  1.01k|      apply_cached_func = apply_cached_func_;
  947|  1.01k|      cache_func = cache_func_;
  948|  1.01k|#endif
  949|  1.01k|      digest.init ();
  950|  1.01k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  1.01k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_11MediumTypesEEEEEbPKvPNS_21hb_ot_apply_context_tE:
  897|   134k|  {
  898|   134k|    const Type *typed_obj = (const Type *) obj;
  899|   134k|    return typed_obj->apply (c);
  900|   134k|  }
_ZNK2OT9ExtensionINS_6Layout9GSUB_impl14ExtensionSubstEE8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS7_DpOT0_:
 4030|  7.21k|  {
 4031|  7.21k|    if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|  7.21k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.21k]
  |  |  ------------------
  ------------------
 4032|  7.21k|    TRACE_DISPATCH (this, u.format);
  ------------------
  |  |  467|  7.21k|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 4033|  7.21k|    switch (u.format) {
 4034|    442|    case 1: return_trace (u.format1.dispatch (c, std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    442|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    442|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4034:5): [True: 442, False: 6.77k]
  ------------------
 4035|  6.77k|    default:return_trace (c->default_return_value ());
  ------------------
  |  |  349|  6.77k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (4035:5): [True: 6.77k, False: 442]
  ------------------
 4036|  7.21k|    }
 4037|  7.21k|  }
_ZNK2OT16ExtensionFormat1INS_6Layout9GSUB_impl14ExtensionSubstEE8dispatchINS_33hb_accelerate_subtables_context_tEJEEENT_8return_tEPS7_DpOT0_:
 3951|    442|  {
 3952|    442|    if (unlikely (!c->may_dispatch (this, this))) return c->no_dispatch_return_value ();
  ------------------
  |  |  259|    442|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 442]
  |  |  ------------------
  ------------------
 3953|    442|    TRACE_DISPATCH (this, format);
  ------------------
  |  |  467|    442|#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
  ------------------
 3954|    442|    return_trace (get_subtable<typename T::SubTable> ().dispatch (c, get_type (), std::forward<Ts> (ds)...));
  ------------------
  |  |  349|    442|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    442|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 3955|    442|  }
_ZN2OT33hb_accelerate_subtables_context_t8dispatchINS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EEE10hb_empty_tRKT_:
  992|  3.00k|  {
  993|  3.00k|    hb_applicable_t *entry = &array[i++];
  994|       |
  995|  3.00k|    entry->init (obj,
  996|  3.00k|		 apply_to<T>
  997|  3.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  998|  3.00k|		 , apply_cached_to<T>
  999|  3.00k|		 , cache_func_to<T>
 1000|  3.00k|#endif
 1001|  3.00k|		 );
 1002|       |
 1003|  3.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
 1004|       |    /* Cache handling
 1005|       |     *
 1006|       |     * We allow one subtable from each lookup to use a cache. The assumption
 1007|       |     * being that multiple subtables of the same lookup cannot use a cache
 1008|       |     * because the resources they would use will collide.  As such, we ask
 1009|       |     * each subtable to tell us how much it costs (which a cache would avoid),
 1010|       |     * and we allocate the cache opportunity to the costliest subtable.
 1011|       |     */
 1012|  3.00k|    unsigned cost = cache_cost (obj, hb_prioritize);
  ------------------
  |  |   81|  3.00k|#define hb_prioritize hb_priority<16> ()
  ------------------
 1013|  3.00k|    if (cost > cache_user_cost)
  ------------------
  |  Branch (1013:9): [True: 0, False: 3.00k]
  ------------------
 1014|      0|    {
 1015|      0|      cache_user_idx = i - 1;
 1016|      0|      cache_user_cost = cost;
 1017|      0|    }
 1018|  3.00k|#endif
 1019|       |
 1020|  3.00k|    return hb_empty_t ();
 1021|  3.00k|  }
_ZN2OT33hb_accelerate_subtables_context_t15hb_applicable_t4initINS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EEEvRKT_PFbPKvPNS_21hb_ot_apply_context_tEESE_PFbSA_SC_bE:
  942|  3.00k|    {
  943|  3.00k|      obj = &obj_;
  944|  3.00k|      apply_func = apply_func_;
  945|  3.00k|#ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE
  946|  3.00k|      apply_cached_func = apply_cached_func_;
  947|  3.00k|      cache_func = cache_func_;
  948|  3.00k|#endif
  949|  3.00k|      digest.init ();
  950|  3.00k|      obj_.get_coverage ().collect_coverage (&digest);
  951|  3.00k|    }
_ZN2OT33hb_accelerate_subtables_context_t8apply_toINS_6Layout9GSUB_impl30ReverseChainSingleSubstFormat1EEEbPKvPNS_21hb_ot_apply_context_tE:
  897|  2.34M|  {
  898|  2.34M|    const Type *typed_obj = (const Type *) obj;
  899|  2.34M|    return typed_obj->apply (c);
  900|  2.34M|  }
hb-ot-layout.cc:_ZN2OTL11match_glyphER15hb_glyph_info_tjPKv:
 1169|  5.80M|{
 1170|  5.80M|  return info.codepoint == value;
 1171|  5.80M|}
_ZZNK2OT7RuleSetINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextEENKUlRKNS_4RuleIS2_EEE_clESC_:
 2080|   116k|    | hb_map ([&] (const Rule &_) { return _.would_apply (c, lookup_context); })
hb-ot-layout.cc:_ZN2OTL26context_would_apply_lookupINS_7IntTypeItLj2EEEEEbPNS_24hb_would_apply_context_tEjPKT_jPKNS_12LookupRecordERKNS_25ContextApplyLookupContextE:
 1864|   118k|{
 1865|   118k|  return would_match_input (c,
 1866|   118k|			    inputCount, input,
 1867|   118k|			    lookup_context.funcs.match, lookup_context.match_data);
 1868|   118k|}
hb-ot-layout.cc:_ZN2OTL17would_match_inputINS_7IntTypeItLj2EEEEEbPNS_24hb_would_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_:
 1201|  6.67M|{
 1202|  6.67M|  if (count != c->len)
  ------------------
  |  Branch (1202:7): [True: 6.57M, False: 106k]
  ------------------
 1203|  6.57M|    return false;
 1204|       |
 1205|   146k|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1205:28): [True: 106k, False: 40.1k]
  ------------------
 1206|   106k|  {
 1207|   106k|    hb_glyph_info_t info;
 1208|   106k|    info.codepoint = c->glyphs[i];
 1209|   106k|    if (likely (!match_func (info, input[i - 1], match_data)))
  ------------------
  |  |  258|   106k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 66.2k, False: 40.5k]
  |  |  ------------------
  ------------------
 1210|  66.2k|      return false;
 1211|   106k|  }
 1212|       |
 1213|  40.1k|  return true;
 1214|   106k|}
hb-ot-layout.cc:_ZN2OTL11match_classER15hb_glyph_info_tjPKv:
 1173|   344k|{
 1174|   344k|  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
 1175|   344k|  return class_def.get_class (info.codepoint) == value;
 1176|   344k|}
hb-ot-layout.cc:_ZN2OTL14match_coverageER15hb_glyph_info_tjPKv:
 1189|   623k|{
 1190|   623k|  Offset16To<Coverage> coverage;
 1191|   623k|  coverage = value;
 1192|   623k|  return (data+coverage).get_coverage (info.codepoint) != NOT_COVERED;
  ------------------
  |  |   37|   623k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
 1193|   623k|}
_ZZNK2OT7RuleSetINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_25ContextApplyLookupContextEENKUlRKNS_4RuleIS2_EEE_clESC_:
 2080|  1.81k|    | hb_map ([&] (const Rule &_) { return _.would_apply (c, lookup_context); })
hb-ot-layout.cc:_ZN2OTL26context_would_apply_lookupINS_7IntTypeIjLj3EEEEEbPNS_24hb_would_apply_context_tEjPKT_jPKNS_12LookupRecordERKNS_25ContextApplyLookupContextE:
 1864|  1.81k|{
 1865|  1.81k|  return would_match_input (c,
 1866|  1.81k|			    inputCount, input,
 1867|  1.81k|			    lookup_context.funcs.match, lookup_context.match_data);
 1868|  1.81k|}
hb-ot-layout.cc:_ZN2OTL17would_match_inputINS_7IntTypeIjLj3EEEEEbPNS_24hb_would_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_:
 1201|  2.68k|{
 1202|  2.68k|  if (count != c->len)
  ------------------
  |  Branch (1202:7): [True: 2.46k, False: 222]
  ------------------
 1203|  2.46k|    return false;
 1204|       |
 1205|    361|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1205:28): [True: 325, False: 36]
  ------------------
 1206|    325|  {
 1207|    325|    hb_glyph_info_t info;
 1208|    325|    info.codepoint = c->glyphs[i];
 1209|    325|    if (likely (!match_func (info, input[i - 1], match_data)))
  ------------------
  |  |  258|    325|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 186, False: 139]
  |  |  ------------------
  ------------------
 1210|    186|      return false;
 1211|    325|  }
 1212|       |
 1213|     36|  return true;
 1214|    222|}
_ZZNK2OT12ChainRuleSetINS_6Layout10SmallTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextEENKUlRKNS_9ChainRuleIS2_EEE_clESC_:
 3156|  6.54M|    | hb_map ([&] (const ChainRule &_) { return _.would_apply (c, lookup_context); })
hb-ot-layout.cc:_ZN2OTL32chain_context_would_apply_lookupINS_7IntTypeItLj2EEEEEbPNS_24hb_would_apply_context_tEjPKT_jS7_jS7_jPKNS_12LookupRecordERKNS_30ChainContextApplyLookupContextE:
 2862|  6.56M|{
 2863|  6.56M|  return (c->zero_context ? !backtrackCount && !lookaheadCount : true)
  ------------------
  |  Branch (2863:10): [True: 6.56M, False: 120]
  |  Branch (2863:11): [True: 217, False: 6.56M]
  |  Branch (2863:29): [True: 136, False: 81]
  |  Branch (2863:48): [True: 97, False: 39]
  ------------------
 2864|  6.56M|      && would_match_input (c,
  ------------------
  |  Branch (2864:10): [True: 514, False: 6.56M]
  ------------------
 2865|  6.56M|			    inputCount, input,
 2866|  6.56M|			    lookup_context.funcs.match[1], lookup_context.match_data[1]);
 2867|  6.56M|}
_ZZNK2OT12ChainRuleSetINS_6Layout11MediumTypesEE11would_applyEPNS_24hb_would_apply_context_tERKNS_30ChainContextApplyLookupContextEENKUlRKNS_9ChainRuleIS2_EEE_clESC_:
 3156|    870|    | hb_map ([&] (const ChainRule &_) { return _.would_apply (c, lookup_context); })
hb-ot-layout.cc:_ZN2OTL32chain_context_would_apply_lookupINS_7IntTypeIjLj3EEEEEbPNS_24hb_would_apply_context_tEjPKT_jS7_jS7_jPKNS_12LookupRecordERKNS_30ChainContextApplyLookupContextE:
 2862|    870|{
 2863|    870|  return (c->zero_context ? !backtrackCount && !lookaheadCount : true)
  ------------------
  |  Branch (2863:10): [True: 870, False: 0]
  |  Branch (2863:11): [True: 0, False: 870]
  |  Branch (2863:29): [True: 0, False: 0]
  |  Branch (2863:48): [True: 0, False: 0]
  ------------------
 2864|    870|      && would_match_input (c,
  ------------------
  |  Branch (2864:10): [True: 15, False: 855]
  ------------------
 2865|    870|			    inputCount, input,
 2866|    870|			    lookup_context.funcs.match[1], lookup_context.match_data[1]);
 2867|    870|}
_ZN2OT8GSUBGPOS13accelerator_tINS_6Layout4GSUBEEC2EP9hb_face_t:
 4501|  32.9k|    {
 4502|  32.9k|      this->table = hb_sanitize_context_t ().reference_table<T> (face);
 4503|  32.9k|      if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
  ------------------
  |  |  259|  32.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.9k]
  |  |  ------------------
  ------------------
 4504|      0|      {
 4505|      0|	hb_blob_destroy (this->table.get_blob ());
 4506|      0|	this->table = hb_blob_get_empty ();
 4507|      0|      }
 4508|       |
 4509|  32.9k|      this->lookup_count = table->get_lookup_count ();
 4510|       |
 4511|  32.9k|      this->accels = (hb_atomic_ptr_t<hb_ot_layout_lookup_accelerator_t> *) hb_calloc (this->lookup_count, sizeof (*accels));
  ------------------
  |  |  234|  32.9k|#define hb_calloc hb_calloc_impl
  ------------------
 4512|  32.9k|      if (unlikely (!this->accels))
  ------------------
  |  |  259|  32.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 726, False: 32.1k]
  |  |  ------------------
  ------------------
 4513|    726|      {
 4514|    726|	this->lookup_count = 0;
 4515|    726|	this->table.destroy ();
 4516|    726|	this->table = hb_blob_get_empty ();
 4517|    726|      }
 4518|  32.9k|    }
_ZN2OT8GSUBGPOS13accelerator_tINS_6Layout4GPOSEEC2EP9hb_face_t:
 4501|  32.8k|    {
 4502|  32.8k|      this->table = hb_sanitize_context_t ().reference_table<T> (face);
 4503|  32.8k|      if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.8k]
  |  |  ------------------
  ------------------
 4504|      0|      {
 4505|      0|	hb_blob_destroy (this->table.get_blob ());
 4506|      0|	this->table = hb_blob_get_empty ();
 4507|      0|      }
 4508|       |
 4509|  32.8k|      this->lookup_count = table->get_lookup_count ();
 4510|       |
 4511|  32.8k|      this->accels = (hb_atomic_ptr_t<hb_ot_layout_lookup_accelerator_t> *) hb_calloc (this->lookup_count, sizeof (*accels));
  ------------------
  |  |  234|  32.8k|#define hb_calloc hb_calloc_impl
  ------------------
 4512|  32.8k|      if (unlikely (!this->accels))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 303, False: 32.5k]
  |  |  ------------------
  ------------------
 4513|    303|      {
 4514|    303|	this->lookup_count = 0;
 4515|    303|	this->table.destroy ();
 4516|    303|	this->table = hb_blob_get_empty ();
 4517|    303|      }
 4518|  32.8k|    }
hb-ot-layout.cc:_ZN2OTL11match_inputINS_11HBGlyphID16EEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESA_PjSD_SD_:
 1224|  1.21M|{
 1225|  1.21M|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|  1.21M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1226|       |
 1227|  1.21M|  if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  259|  1.21M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.0k, False: 1.20M]
  |  |  ------------------
  ------------------
                if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  349|  16.0k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  16.0k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1228|       |
 1229|  1.20M|  hb_buffer_t *buffer = c->buffer;
 1230|       |
 1231|  1.20M|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
 1232|  1.20M|  skippy_iter.reset (buffer->idx, count - 1);
 1233|  1.20M|  skippy_iter.set_match_func (match_func, match_data);
 1234|  1.20M|  skippy_iter.set_glyph_data (input);
 1235|       |
 1236|       |  /*
 1237|       |   * This is perhaps the trickiest part of OpenType...  Remarks:
 1238|       |   *
 1239|       |   * - If all components of the ligature were marks, we call this a mark ligature.
 1240|       |   *
 1241|       |   * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
 1242|       |   *   it as a ligature glyph.
 1243|       |   *
 1244|       |   * - Ligatures cannot be formed across glyphs attached to different components
 1245|       |   *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
 1246|       |   *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
 1247|       |   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.
 1248|       |   *   There are a couple of exceptions to this:
 1249|       |   *
 1250|       |   *   o If a ligature tries ligating with marks that belong to it itself, go ahead,
 1251|       |   *     assuming that the font designer knows what they are doing (otherwise it can
 1252|       |   *     break Indic stuff when a matra wants to ligate with a conjunct,
 1253|       |   *
 1254|       |   *   o If two marks want to ligate and they belong to different components of the
 1255|       |   *     same ligature glyph, and said ligature glyph is to be ignored according to
 1256|       |   *     mark-filtering rules, then allow.
 1257|       |   *     https://github.com/harfbuzz/harfbuzz/issues/545
 1258|       |   */
 1259|       |
 1260|  1.20M|  unsigned int total_component_count = 0;
 1261|       |
 1262|  1.20M|  unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1263|  1.20M|  unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 1264|       |
 1265|  1.20M|  enum {
 1266|  1.20M|    LIGBASE_NOT_CHECKED,
 1267|  1.20M|    LIGBASE_MAY_NOT_SKIP,
 1268|  1.20M|    LIGBASE_MAY_SKIP
 1269|  1.20M|  } ligbase = LIGBASE_NOT_CHECKED;
 1270|       |
 1271|  2.90M|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1271:28): [True: 2.41M, False: 483k]
  ------------------
 1272|  2.41M|  {
 1273|  2.41M|    unsigned unsafe_to;
 1274|  2.41M|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1274:9): [True: 681k, False: 1.73M]
  ------------------
 1275|   681k|    {
 1276|   681k|      *end_position = unsafe_to;
 1277|   681k|      return_trace (false);
  ------------------
  |  |  349|   681k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   681k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1278|   681k|    }
 1279|       |
 1280|  1.73M|    match_positions[i] = skippy_iter.idx;
 1281|       |
 1282|  1.73M|    unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
 1283|  1.73M|    unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
 1284|       |
 1285|  1.73M|    if (first_lig_id && first_lig_comp)
  ------------------
  |  Branch (1285:9): [True: 527k, False: 1.20M]
  |  Branch (1285:25): [True: 192k, False: 335k]
  ------------------
 1286|   192k|    {
 1287|       |      /* If first component was attached to a previous ligature component,
 1288|       |       * all subsequent components should be attached to the same ligature
 1289|       |       * component, otherwise we shouldn't ligate them... */
 1290|   192k|      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
  ------------------
  |  Branch (1290:11): [True: 21.4k, False: 170k]
  |  Branch (1290:42): [True: 28.9k, False: 141k]
  ------------------
 1291|  50.3k|      {
 1292|       |	/* ...unless, we are attached to a base ligature and that base
 1293|       |	 * ligature is ignorable. */
 1294|  50.3k|	if (ligbase == LIGBASE_NOT_CHECKED)
  ------------------
  |  Branch (1294:6): [True: 39.6k, False: 10.7k]
  ------------------
 1295|  39.6k|	{
 1296|  39.6k|	  bool found = false;
 1297|  39.6k|	  const auto *out = buffer->out_info;
 1298|  39.6k|	  unsigned int j = buffer->out_len;
 1299|  2.69M|	  while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
  ------------------
  |  Branch (1299:11): [True: 2.69M, False: 2.75k]
  |  Branch (1299:16): [True: 2.66M, False: 23.1k]
  ------------------
 1300|  2.66M|	  {
 1301|  2.66M|	    if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
  ------------------
  |  Branch (1301:10): [True: 13.7k, False: 2.65M]
  ------------------
 1302|  13.7k|	    {
 1303|  13.7k|	      j--;
 1304|  13.7k|	      found = true;
 1305|  13.7k|	      break;
 1306|  13.7k|	    }
 1307|  2.65M|	    j--;
 1308|  2.65M|	  }
 1309|       |
 1310|  39.6k|	  if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
  ------------------
  |  Branch (1310:8): [True: 13.7k, False: 25.9k]
  |  Branch (1310:17): [True: 4.61k, False: 9.09k]
  ------------------
 1311|  4.61k|	    ligbase = LIGBASE_MAY_SKIP;
 1312|  34.9k|	  else
 1313|  34.9k|	    ligbase = LIGBASE_MAY_NOT_SKIP;
 1314|  39.6k|	}
 1315|       |
 1316|  50.3k|	if (ligbase == LIGBASE_MAY_NOT_SKIP)
  ------------------
  |  Branch (1316:6): [True: 34.9k, False: 15.3k]
  ------------------
 1317|  34.9k|	  return_trace (false);
  ------------------
  |  |  349|  34.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1318|  50.3k|      }
 1319|   192k|    }
 1320|  1.54M|    else
 1321|  1.54M|    {
 1322|       |      /* If first component was NOT attached to a previous ligature component,
 1323|       |       * all subsequent components should also NOT be attached to any ligature
 1324|       |       * component, unless they are attached to the first component itself! */
 1325|  1.54M|      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
  ------------------
  |  Branch (1325:11): [True: 358k, False: 1.18M]
  |  Branch (1325:26): [True: 4.04k, False: 354k]
  |  Branch (1325:43): [True: 1.44k, False: 2.60k]
  ------------------
 1326|  1.44k|	return_trace (false);
  ------------------
  |  |  349|  1.44k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.44k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1327|  1.54M|    }
 1328|       |
 1329|  1.70M|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
 1330|  1.70M|  }
 1331|       |
 1332|   483k|  *end_position = skippy_iter.idx + 1;
 1333|       |
 1334|   483k|  if (p_total_component_count)
  ------------------
  |  Branch (1334:7): [True: 483k, False: 0]
  ------------------
 1335|   483k|  {
 1336|   483k|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1337|   483k|    *p_total_component_count = total_component_count;
 1338|   483k|  }
 1339|       |
 1340|   483k|  match_positions[0] = buffer->idx;
 1341|       |
 1342|   483k|  return_trace (true);
  ------------------
  |  |  349|   483k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   483k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1343|  1.20M|}
hb-ot-layout.cc:_ZN2OTL12ligate_inputEPNS_21hb_ot_apply_context_tEjPKjjjj:
 1350|   486k|{
 1351|   486k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   486k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1352|       |
 1353|   486k|  hb_buffer_t *buffer = c->buffer;
 1354|       |
 1355|   486k|  buffer->merge_clusters (buffer->idx, match_end);
 1356|       |
 1357|       |  /* - If a base and one or more marks ligate, consider that as a base, NOT
 1358|       |   *   ligature, such that all following marks can still attach to it.
 1359|       |   *   https://github.com/harfbuzz/harfbuzz/issues/1109
 1360|       |   *
 1361|       |   * - If all components of the ligature were marks, we call this a mark ligature.
 1362|       |   *   If it *is* a mark ligature, we don't allocate a new ligature id, and leave
 1363|       |   *   the ligature to keep its old ligature id.  This will allow it to attach to
 1364|       |   *   a base ligature in GPOS.  Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,
 1365|       |   *   and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a
 1366|       |   *   ligature id and component value of 2.  Then if SHADDA,FATHA form a ligature
 1367|       |   *   later, we don't want them to lose their ligature id/component, otherwise
 1368|       |   *   GPOS will fail to correctly position the mark ligature on top of the
 1369|       |   *   LAM,LAM,HEH ligature.  See:
 1370|       |   *     https://bugzilla.gnome.org/show_bug.cgi?id=676343
 1371|       |   *
 1372|       |   * - If a ligature is formed of components that some of which are also ligatures
 1373|       |   *   themselves, and those ligature components had marks attached to *their*
 1374|       |   *   components, we have to attach the marks to the new ligature component
 1375|       |   *   positions!  Now *that*'s tricky!  And these marks may be following the
 1376|       |   *   last component of the whole sequence, so we should loop forward looking
 1377|       |   *   for them and update them.
 1378|       |   *
 1379|       |   *   Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a
 1380|       |   *   'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature
 1381|       |   *   id and component == 1.  Now, during 'liga', the LAM and the LAM-HEH ligature
 1382|       |   *   form a LAM-LAM-HEH ligature.  We need to reassign the SHADDA and FATHA to
 1383|       |   *   the new ligature with a component value of 2.
 1384|       |   *
 1385|       |   *   This in fact happened to a font...  See:
 1386|       |   *   https://bugzilla.gnome.org/show_bug.cgi?id=437633
 1387|       |   */
 1388|       |
 1389|   486k|  bool is_base_ligature = _hb_glyph_info_is_base_glyph (&buffer->info[match_positions[0]]);
 1390|   486k|  bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->info[match_positions[0]]);
 1391|   527k|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1391:28): [True: 487k, False: 39.1k]
  ------------------
 1392|   487k|    if (!_hb_glyph_info_is_mark (&buffer->info[match_positions[i]]))
  ------------------
  |  Branch (1392:9): [True: 447k, False: 40.6k]
  ------------------
 1393|   447k|    {
 1394|   447k|      is_base_ligature = false;
 1395|   447k|      is_mark_ligature = false;
 1396|   447k|      break;
 1397|   447k|    }
 1398|   486k|  bool is_ligature = !is_base_ligature && !is_mark_ligature;
  ------------------
  |  Branch (1398:22): [True: 473k, False: 13.2k]
  |  Branch (1398:43): [True: 447k, False: 25.5k]
  ------------------
 1399|       |
 1400|   486k|  unsigned int klass = is_ligature ? HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE : 0;
  ------------------
  |  Branch (1400:24): [True: 447k, False: 38.7k]
  ------------------
 1401|   486k|  unsigned int lig_id = is_ligature ? _hb_allocate_lig_id (buffer) : 0;
  ------------------
  |  Branch (1401:25): [True: 447k, False: 38.7k]
  ------------------
 1402|   486k|  unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1403|   486k|  unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1404|   486k|  unsigned int components_so_far = last_num_components;
 1405|       |
 1406|   486k|  if (is_ligature)
  ------------------
  |  Branch (1406:7): [True: 447k, False: 38.7k]
  ------------------
 1407|   447k|  {
 1408|   447k|    _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_component_count);
 1409|   447k|    if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
  ------------------
  |  Branch (1409:9): [True: 5.66k, False: 441k]
  ------------------
 1410|  5.66k|    {
 1411|  5.66k|      _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER);
 1412|  5.66k|    }
 1413|   447k|  }
 1414|   486k|  c->replace_glyph_with_ligature (lig_glyph, klass);
 1415|       |
 1416|  1.18M|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1416:28): [True: 695k, False: 486k]
  ------------------
 1417|   695k|  {
 1418|  1.04M|    while (buffer->idx < match_positions[i] && buffer->successful)
  ------------------
  |  Branch (1418:12): [True: 347k, False: 695k]
  |  Branch (1418:48): [True: 347k, False: 43]
  ------------------
 1419|   347k|    {
 1420|   347k|      if (is_ligature)
  ------------------
  |  Branch (1420:11): [True: 346k, False: 288]
  ------------------
 1421|   346k|      {
 1422|   346k|	unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 1423|   346k|	if (this_comp == 0)
  ------------------
  |  Branch (1423:6): [True: 26.1k, False: 320k]
  ------------------
 1424|  26.1k|	  this_comp = last_num_components;
 1425|   346k|	unsigned int new_lig_comp = components_so_far - last_num_components +
 1426|   346k|				    hb_min (this_comp, last_num_components);
 1427|   346k|	  _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp);
 1428|   346k|      }
 1429|   347k|      (void) buffer->next_glyph ();
 1430|   347k|    }
 1431|       |
 1432|   695k|    last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1433|   695k|    last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1434|   695k|    components_so_far += last_num_components;
 1435|       |
 1436|       |    /* Skip the base glyph */
 1437|   695k|    buffer->idx++;
 1438|   695k|  }
 1439|       |
 1440|   486k|  if (!is_mark_ligature && last_lig_id)
  ------------------
  |  Branch (1440:7): [True: 460k, False: 25.5k]
  |  Branch (1440:28): [True: 236k, False: 224k]
  ------------------
 1441|   236k|  {
 1442|       |    /* Re-adjust components for any marks following. */
 1443|  5.25M|    for (unsigned i = buffer->idx; i < buffer->len; ++i)
  ------------------
  |  Branch (1443:36): [True: 5.24M, False: 5.32k]
  ------------------
 1444|  5.24M|    {
 1445|  5.24M|      if (last_lig_id != _hb_glyph_info_get_lig_id (&buffer->info[i])) break;
  ------------------
  |  Branch (1445:11): [True: 66.5k, False: 5.18M]
  ------------------
 1446|       |
 1447|  5.18M|      unsigned this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
 1448|  5.18M|      if (!this_comp) break;
  ------------------
  |  Branch (1448:11): [True: 164k, False: 5.01M]
  ------------------
 1449|       |
 1450|  5.01M|      unsigned new_lig_comp = components_so_far - last_num_components +
 1451|  5.01M|			      hb_min (this_comp, last_num_components);
 1452|  5.01M|      _hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp);
 1453|  5.01M|    }
 1454|   236k|  }
 1455|   486k|  return_trace (true);
  ------------------
  |  |  349|   486k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   486k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1456|   486k|}
hb-ot-layout.cc:_ZN2OTL11match_inputINS_11HBGlyphID24EEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESA_PjSD_SD_:
 1224|  57.8k|{
 1225|  57.8k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|  57.8k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1226|       |
 1227|  57.8k|  if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  259|  57.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19.1k, False: 38.6k]
  |  |  ------------------
  ------------------
                if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  349|  19.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1228|       |
 1229|  38.6k|  hb_buffer_t *buffer = c->buffer;
 1230|       |
 1231|  38.6k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
 1232|  38.6k|  skippy_iter.reset (buffer->idx, count - 1);
 1233|  38.6k|  skippy_iter.set_match_func (match_func, match_data);
 1234|  38.6k|  skippy_iter.set_glyph_data (input);
 1235|       |
 1236|       |  /*
 1237|       |   * This is perhaps the trickiest part of OpenType...  Remarks:
 1238|       |   *
 1239|       |   * - If all components of the ligature were marks, we call this a mark ligature.
 1240|       |   *
 1241|       |   * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
 1242|       |   *   it as a ligature glyph.
 1243|       |   *
 1244|       |   * - Ligatures cannot be formed across glyphs attached to different components
 1245|       |   *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
 1246|       |   *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
 1247|       |   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.
 1248|       |   *   There are a couple of exceptions to this:
 1249|       |   *
 1250|       |   *   o If a ligature tries ligating with marks that belong to it itself, go ahead,
 1251|       |   *     assuming that the font designer knows what they are doing (otherwise it can
 1252|       |   *     break Indic stuff when a matra wants to ligate with a conjunct,
 1253|       |   *
 1254|       |   *   o If two marks want to ligate and they belong to different components of the
 1255|       |   *     same ligature glyph, and said ligature glyph is to be ignored according to
 1256|       |   *     mark-filtering rules, then allow.
 1257|       |   *     https://github.com/harfbuzz/harfbuzz/issues/545
 1258|       |   */
 1259|       |
 1260|  38.6k|  unsigned int total_component_count = 0;
 1261|       |
 1262|  38.6k|  unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1263|  38.6k|  unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 1264|       |
 1265|  38.6k|  enum {
 1266|  38.6k|    LIGBASE_NOT_CHECKED,
 1267|  38.6k|    LIGBASE_MAY_NOT_SKIP,
 1268|  38.6k|    LIGBASE_MAY_SKIP
 1269|  38.6k|  } ligbase = LIGBASE_NOT_CHECKED;
 1270|       |
 1271|  44.2k|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1271:28): [True: 41.1k, False: 3.08k]
  ------------------
 1272|  41.1k|  {
 1273|  41.1k|    unsigned unsafe_to;
 1274|  41.1k|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1274:9): [True: 34.9k, False: 6.28k]
  ------------------
 1275|  34.9k|    {
 1276|  34.9k|      *end_position = unsafe_to;
 1277|  34.9k|      return_trace (false);
  ------------------
  |  |  349|  34.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  34.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1278|  34.9k|    }
 1279|       |
 1280|  6.28k|    match_positions[i] = skippy_iter.idx;
 1281|       |
 1282|  6.28k|    unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
 1283|  6.28k|    unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
 1284|       |
 1285|  6.28k|    if (first_lig_id && first_lig_comp)
  ------------------
  |  Branch (1285:9): [True: 2.21k, False: 4.06k]
  |  Branch (1285:25): [True: 1.68k, False: 532]
  ------------------
 1286|  1.68k|    {
 1287|       |      /* If first component was attached to a previous ligature component,
 1288|       |       * all subsequent components should be attached to the same ligature
 1289|       |       * component, otherwise we shouldn't ligate them... */
 1290|  1.68k|      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
  ------------------
  |  Branch (1290:11): [True: 1.43k, False: 246]
  |  Branch (1290:42): [True: 10, False: 236]
  ------------------
 1291|  1.44k|      {
 1292|       |	/* ...unless, we are attached to a base ligature and that base
 1293|       |	 * ligature is ignorable. */
 1294|  1.44k|	if (ligbase == LIGBASE_NOT_CHECKED)
  ------------------
  |  Branch (1294:6): [True: 1.43k, False: 11]
  ------------------
 1295|  1.43k|	{
 1296|  1.43k|	  bool found = false;
 1297|  1.43k|	  const auto *out = buffer->out_info;
 1298|  1.43k|	  unsigned int j = buffer->out_len;
 1299|  1.73k|	  while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
  ------------------
  |  Branch (1299:11): [True: 1.73k, False: 0]
  |  Branch (1299:16): [True: 1.73k, False: 0]
  ------------------
 1300|  1.73k|	  {
 1301|  1.73k|	    if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
  ------------------
  |  Branch (1301:10): [True: 1.43k, False: 299]
  ------------------
 1302|  1.43k|	    {
 1303|  1.43k|	      j--;
 1304|  1.43k|	      found = true;
 1305|  1.43k|	      break;
 1306|  1.43k|	    }
 1307|    299|	    j--;
 1308|    299|	  }
 1309|       |
 1310|  1.43k|	  if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
  ------------------
  |  Branch (1310:8): [True: 1.43k, False: 0]
  |  Branch (1310:17): [True: 1.05k, False: 380]
  ------------------
 1311|  1.05k|	    ligbase = LIGBASE_MAY_SKIP;
 1312|    380|	  else
 1313|    380|	    ligbase = LIGBASE_MAY_NOT_SKIP;
 1314|  1.43k|	}
 1315|       |
 1316|  1.44k|	if (ligbase == LIGBASE_MAY_NOT_SKIP)
  ------------------
  |  Branch (1316:6): [True: 380, False: 1.06k]
  ------------------
 1317|    380|	  return_trace (false);
  ------------------
  |  |  349|    380|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    380|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1318|  1.44k|      }
 1319|  1.68k|    }
 1320|  4.59k|    else
 1321|  4.59k|    {
 1322|       |      /* If first component was NOT attached to a previous ligature component,
 1323|       |       * all subsequent components should also NOT be attached to any ligature
 1324|       |       * component, unless they are attached to the first component itself! */
 1325|  4.59k|      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
  ------------------
  |  Branch (1325:11): [True: 386, False: 4.21k]
  |  Branch (1325:26): [True: 320, False: 66]
  |  Branch (1325:43): [True: 296, False: 24]
  ------------------
 1326|    296|	return_trace (false);
  ------------------
  |  |  349|    296|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    296|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1327|  4.59k|    }
 1328|       |
 1329|  5.60k|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
 1330|  5.60k|  }
 1331|       |
 1332|  3.08k|  *end_position = skippy_iter.idx + 1;
 1333|       |
 1334|  3.08k|  if (p_total_component_count)
  ------------------
  |  Branch (1334:7): [True: 3.08k, False: 0]
  ------------------
 1335|  3.08k|  {
 1336|  3.08k|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1337|  3.08k|    *p_total_component_count = total_component_count;
 1338|  3.08k|  }
 1339|       |
 1340|  3.08k|  match_positions[0] = buffer->idx;
 1341|       |
 1342|  3.08k|  return_trace (true);
  ------------------
  |  |  349|  3.08k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1343|  38.6k|}
hb-ot-layout.cc:_ZN2OTL20context_apply_lookupINS_7IntTypeItLj2EEEEEbPNS_21hb_ot_apply_context_tEjPKT_jPKNS_12LookupRecordERKNS_25ContextApplyLookupContextE:
 1877|  1.96M|{
 1878|  1.96M|  unsigned match_end = 0;
 1879|  1.96M|  unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
 1880|  1.96M|  if (match_input (c,
  ------------------
  |  Branch (1880:7): [True: 779k, False: 1.18M]
  ------------------
 1881|  1.96M|		   inputCount, input,
 1882|  1.96M|		   lookup_context.funcs.match, lookup_context.match_data,
 1883|  1.96M|		   &match_end, match_positions))
 1884|   779k|  {
 1885|   779k|    c->buffer->unsafe_to_break (c->buffer->idx, match_end);
 1886|   779k|    apply_lookup (c,
 1887|   779k|		  inputCount, match_positions,
 1888|   779k|		  lookupCount, lookupRecord,
 1889|   779k|		  match_end);
 1890|   779k|    return true;
 1891|   779k|  }
 1892|  1.18M|  else
 1893|  1.18M|  {
 1894|  1.18M|    c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
 1895|  1.18M|    return false;
 1896|  1.18M|  }
 1897|  1.96M|}
hb-ot-layout.cc:_ZN2OTL11match_inputINS_7IntTypeItLj2EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_PjSE_SE_:
 1224|  2.53M|{
 1225|  2.53M|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|  2.53M|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1226|       |
 1227|  2.53M|  if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  259|  2.53M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19.3k, False: 2.51M]
  |  |  ------------------
  ------------------
                if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  349|  19.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  19.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1228|       |
 1229|  2.51M|  hb_buffer_t *buffer = c->buffer;
 1230|       |
 1231|  2.51M|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
 1232|  2.51M|  skippy_iter.reset (buffer->idx, count - 1);
 1233|  2.51M|  skippy_iter.set_match_func (match_func, match_data);
 1234|  2.51M|  skippy_iter.set_glyph_data (input);
 1235|       |
 1236|       |  /*
 1237|       |   * This is perhaps the trickiest part of OpenType...  Remarks:
 1238|       |   *
 1239|       |   * - If all components of the ligature were marks, we call this a mark ligature.
 1240|       |   *
 1241|       |   * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
 1242|       |   *   it as a ligature glyph.
 1243|       |   *
 1244|       |   * - Ligatures cannot be formed across glyphs attached to different components
 1245|       |   *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
 1246|       |   *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
 1247|       |   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.
 1248|       |   *   There are a couple of exceptions to this:
 1249|       |   *
 1250|       |   *   o If a ligature tries ligating with marks that belong to it itself, go ahead,
 1251|       |   *     assuming that the font designer knows what they are doing (otherwise it can
 1252|       |   *     break Indic stuff when a matra wants to ligate with a conjunct,
 1253|       |   *
 1254|       |   *   o If two marks want to ligate and they belong to different components of the
 1255|       |   *     same ligature glyph, and said ligature glyph is to be ignored according to
 1256|       |   *     mark-filtering rules, then allow.
 1257|       |   *     https://github.com/harfbuzz/harfbuzz/issues/545
 1258|       |   */
 1259|       |
 1260|  2.51M|  unsigned int total_component_count = 0;
 1261|       |
 1262|  2.51M|  unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1263|  2.51M|  unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 1264|       |
 1265|  2.51M|  enum {
 1266|  2.51M|    LIGBASE_NOT_CHECKED,
 1267|  2.51M|    LIGBASE_MAY_NOT_SKIP,
 1268|  2.51M|    LIGBASE_MAY_SKIP
 1269|  2.51M|  } ligbase = LIGBASE_NOT_CHECKED;
 1270|       |
 1271|  3.46M|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1271:28): [True: 2.30M, False: 1.16M]
  ------------------
 1272|  2.30M|  {
 1273|  2.30M|    unsigned unsafe_to;
 1274|  2.30M|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1274:9): [True: 1.33M, False: 966k]
  ------------------
 1275|  1.33M|    {
 1276|  1.33M|      *end_position = unsafe_to;
 1277|  1.33M|      return_trace (false);
  ------------------
  |  |  349|  1.33M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.33M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1278|  1.33M|    }
 1279|       |
 1280|   966k|    match_positions[i] = skippy_iter.idx;
 1281|       |
 1282|   966k|    unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
 1283|   966k|    unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
 1284|       |
 1285|   966k|    if (first_lig_id && first_lig_comp)
  ------------------
  |  Branch (1285:9): [True: 126k, False: 839k]
  |  Branch (1285:25): [True: 21.3k, False: 105k]
  ------------------
 1286|  21.3k|    {
 1287|       |      /* If first component was attached to a previous ligature component,
 1288|       |       * all subsequent components should be attached to the same ligature
 1289|       |       * component, otherwise we shouldn't ligate them... */
 1290|  21.3k|      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
  ------------------
  |  Branch (1290:11): [True: 9.06k, False: 12.3k]
  |  Branch (1290:42): [True: 1.00k, False: 11.3k]
  ------------------
 1291|  10.0k|      {
 1292|       |	/* ...unless, we are attached to a base ligature and that base
 1293|       |	 * ligature is ignorable. */
 1294|  10.0k|	if (ligbase == LIGBASE_NOT_CHECKED)
  ------------------
  |  Branch (1294:6): [True: 9.76k, False: 307]
  ------------------
 1295|  9.76k|	{
 1296|  9.76k|	  bool found = false;
 1297|  9.76k|	  const auto *out = buffer->out_info;
 1298|  9.76k|	  unsigned int j = buffer->out_len;
 1299|   414k|	  while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
  ------------------
  |  Branch (1299:11): [True: 414k, False: 349]
  |  Branch (1299:16): [True: 410k, False: 3.17k]
  ------------------
 1300|   410k|	  {
 1301|   410k|	    if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
  ------------------
  |  Branch (1301:10): [True: 6.23k, False: 404k]
  ------------------
 1302|  6.23k|	    {
 1303|  6.23k|	      j--;
 1304|  6.23k|	      found = true;
 1305|  6.23k|	      break;
 1306|  6.23k|	    }
 1307|   404k|	    j--;
 1308|   404k|	  }
 1309|       |
 1310|  9.76k|	  if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
  ------------------
  |  Branch (1310:8): [True: 6.23k, False: 3.52k]
  |  Branch (1310:17): [True: 1.56k, False: 4.67k]
  ------------------
 1311|  1.56k|	    ligbase = LIGBASE_MAY_SKIP;
 1312|  8.20k|	  else
 1313|  8.20k|	    ligbase = LIGBASE_MAY_NOT_SKIP;
 1314|  9.76k|	}
 1315|       |
 1316|  10.0k|	if (ligbase == LIGBASE_MAY_NOT_SKIP)
  ------------------
  |  Branch (1316:6): [True: 8.20k, False: 1.86k]
  ------------------
 1317|  8.20k|	  return_trace (false);
  ------------------
  |  |  349|  8.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  8.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1318|  10.0k|      }
 1319|  21.3k|    }
 1320|   944k|    else
 1321|   944k|    {
 1322|       |      /* If first component was NOT attached to a previous ligature component,
 1323|       |       * all subsequent components should also NOT be attached to any ligature
 1324|       |       * component, unless they are attached to the first component itself! */
 1325|   944k|      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
  ------------------
  |  Branch (1325:11): [True: 101k, False: 843k]
  |  Branch (1325:26): [True: 42.4k, False: 58.7k]
  |  Branch (1325:43): [True: 1.67k, False: 40.7k]
  ------------------
 1326|  1.67k|	return_trace (false);
  ------------------
  |  |  349|  1.67k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1327|   944k|    }
 1328|       |
 1329|   956k|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
 1330|   956k|  }
 1331|       |
 1332|  1.16M|  *end_position = skippy_iter.idx + 1;
 1333|       |
 1334|  1.16M|  if (p_total_component_count)
  ------------------
  |  Branch (1334:7): [True: 0, False: 1.16M]
  ------------------
 1335|      0|  {
 1336|      0|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1337|      0|    *p_total_component_count = total_component_count;
 1338|      0|  }
 1339|       |
 1340|  1.16M|  match_positions[0] = buffer->idx;
 1341|       |
 1342|  1.16M|  return_trace (true);
  ------------------
  |  |  349|  1.16M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.16M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1343|  2.51M|}
hb-ot-layout.cc:_ZN2OTL12apply_lookupEPNS_21hb_ot_apply_context_tEjPjjPKNS_12LookupRecordEj:
 1649|  1.43M|{
 1650|  1.43M|  hb_buffer_t *buffer = c->buffer;
 1651|  1.43M|  int end;
 1652|       |
 1653|       |  /* All positions are distance from beginning of *output* buffer.
 1654|       |   * Adjust. */
 1655|  1.43M|  {
 1656|  1.43M|    unsigned int bl = buffer->backtrack_len ();
 1657|  1.43M|    end = bl + match_end - buffer->idx;
 1658|       |
 1659|  1.43M|    int delta = bl - buffer->idx;
 1660|       |    /* Convert positions to new indexing. */
 1661|  4.89M|    for (unsigned int j = 0; j < count; j++)
  ------------------
  |  Branch (1661:30): [True: 3.45M, False: 1.43M]
  ------------------
 1662|  3.45M|      match_positions[j] += delta;
 1663|  1.43M|  }
 1664|       |
 1665|  47.0M|  for (unsigned int i = 0; i < lookupCount && buffer->successful; i++)
  ------------------
  |  Branch (1665:28): [True: 45.6M, False: 1.33M]
  |  Branch (1665:47): [True: 45.6M, False: 624]
  ------------------
 1666|  45.6M|  {
 1667|  45.6M|    unsigned int idx = lookupRecord[i].sequenceIndex;
 1668|  45.6M|    if (idx >= count)
  ------------------
  |  Branch (1668:9): [True: 28.3M, False: 17.3M]
  ------------------
 1669|  28.3M|      continue;
 1670|       |
 1671|  17.3M|    unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();
 1672|       |
 1673|       |    /* This can happen if earlier recursed lookups deleted many entries. */
 1674|  17.3M|    if (unlikely (match_positions[idx] >= orig_len))
  ------------------
  |  |  259|  17.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.72k, False: 17.3M]
  |  |  ------------------
  ------------------
 1675|  3.72k|      continue;
 1676|       |
 1677|  17.3M|    if (unlikely (!buffer->move_to (match_positions[idx])))
  ------------------
  |  |  259|  17.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 17.3M]
  |  |  ------------------
  ------------------
 1678|     16|      break;
 1679|       |
 1680|  17.3M|    if (unlikely (buffer->max_ops <= 0))
  ------------------
  |  |  259|  17.3M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16.1k, False: 17.3M]
  |  |  ------------------
  ------------------
 1681|  16.1k|      break;
 1682|       |
 1683|  17.3M|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  34.6M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  17.3M|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (1683:35): [True: 0, False: 17.3M]
  ------------------
 1684|      0|    {
 1685|      0|      if (buffer->have_output)
  ------------------
  |  Branch (1685:11): [True: 0, False: 0]
  ------------------
 1686|      0|        c->buffer->sync_so_far ();
 1687|      0|      c->buffer->message (c->font,
 1688|      0|			  "recursing to lookup %u at %u",
 1689|      0|			  (unsigned) lookupRecord[i].lookupListIndex,
 1690|      0|			  buffer->idx);
 1691|      0|    }
 1692|       |
 1693|  17.3M|    if (!c->recurse (lookupRecord[i].lookupListIndex))
  ------------------
  |  Branch (1693:9): [True: 15.4M, False: 1.89M]
  ------------------
 1694|  15.4M|      continue;
 1695|       |
 1696|  1.89M|    if (HB_BUFFER_MESSAGE_MORE && c->buffer->messaging ())
  ------------------
  |  |  472|  3.79M|#define HB_BUFFER_MESSAGE_MORE (HB_DEBUG+1)
  |  |  ------------------
  |  |  |  |   36|  1.89M|#define HB_DEBUG 0
  |  |  ------------------
  |  |  |  Branch (472:32): [Folded - Ignored]
  |  |  ------------------
  ------------------
  |  Branch (1696:35): [True: 0, False: 1.89M]
  ------------------
 1697|      0|    {
 1698|      0|      if (buffer->have_output)
  ------------------
  |  Branch (1698:11): [True: 0, False: 0]
  ------------------
 1699|      0|        c->buffer->sync_so_far ();
 1700|      0|      c->buffer->message (c->font,
 1701|      0|			  "recursed to lookup %u",
 1702|      0|			  (unsigned) lookupRecord[i].lookupListIndex);
 1703|      0|    }
 1704|       |
 1705|  1.89M|    unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len ();
 1706|  1.89M|    int delta = new_len - orig_len;
 1707|       |
 1708|  1.89M|    if (!delta)
  ------------------
  |  Branch (1708:9): [True: 1.39M, False: 505k]
  ------------------
 1709|  1.39M|      continue;
 1710|       |
 1711|       |    /* Recursed lookup changed buffer len.  Adjust.
 1712|       |     *
 1713|       |     * TODO:
 1714|       |     *
 1715|       |     * Right now, if buffer length increased by n, we assume n new glyphs
 1716|       |     * were added right after the current position, and if buffer length
 1717|       |     * was decreased by n, we assume n match positions after the current
 1718|       |     * one where removed.  The former (buffer length increased) case is
 1719|       |     * fine, but the decrease case can be improved in at least two ways,
 1720|       |     * both of which are significant:
 1721|       |     *
 1722|       |     *   - If recursed-to lookup is MultipleSubst and buffer length
 1723|       |     *     decreased, then it's current match position that was deleted,
 1724|       |     *     NOT the one after it.
 1725|       |     *
 1726|       |     *   - If buffer length was decreased by n, it does not necessarily
 1727|       |     *     mean that n match positions where removed, as there recursed-to
 1728|       |     *     lookup might had a different LookupFlag.  Here's a constructed
 1729|       |     *     case of that:
 1730|       |     *     https://github.com/harfbuzz/harfbuzz/discussions/3538
 1731|       |     *
 1732|       |     * It should be possible to construct tests for both of these cases.
 1733|       |     */
 1734|       |
 1735|   505k|    end += delta;
 1736|   505k|    if (end < int (match_positions[idx]))
  ------------------
  |  Branch (1736:9): [True: 25.3k, False: 480k]
  ------------------
 1737|  25.3k|    {
 1738|       |      /* End might end up being smaller than match_positions[idx] if the recursed
 1739|       |       * lookup ended up removing many items.
 1740|       |       * Just never rewind end beyond start of current position, since that is
 1741|       |       * not possible in the recursed lookup.  Also adjust delta as such.
 1742|       |       *
 1743|       |       * https://bugs.chromium.org/p/chromium/issues/detail?id=659496
 1744|       |       * https://github.com/harfbuzz/harfbuzz/issues/1611
 1745|       |       */
 1746|  25.3k|      delta += match_positions[idx] - end;
 1747|  25.3k|      end = match_positions[idx];
 1748|  25.3k|    }
 1749|       |
 1750|   505k|    unsigned int next = idx + 1; /* next now is the position after the recursed lookup. */
 1751|       |
 1752|   505k|    if (delta > 0)
  ------------------
  |  Branch (1752:9): [True: 305k, False: 200k]
  ------------------
 1753|   305k|    {
 1754|   305k|      if (unlikely (delta + count > HB_MAX_CONTEXT_LENGTH))
  ------------------
  |  |  259|   305k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 86.3k, False: 218k]
  |  |  ------------------
  ------------------
 1755|  86.3k|	break;
 1756|   305k|    }
 1757|   200k|    else
 1758|   200k|    {
 1759|       |      /* NOTE: delta is non-positive. */
 1760|   200k|      delta = hb_max (delta, (int) next - (int) count);
 1761|   200k|      next -= delta;
 1762|   200k|    }
 1763|       |
 1764|       |    /* Shift! */
 1765|   419k|    memmove (match_positions + next + delta, match_positions + next,
 1766|   419k|	     (count - next) * sizeof (match_positions[0]));
 1767|   419k|    next += delta;
 1768|   419k|    count += delta;
 1769|       |
 1770|       |    /* Fill in new entries. */
 1771|  2.17M|    for (unsigned int j = idx + 1; j < next; j++)
  ------------------
  |  Branch (1771:36): [True: 1.75M, False: 419k]
  ------------------
 1772|  1.75M|      match_positions[j] = match_positions[j - 1] + 1;
 1773|       |
 1774|       |    /* And fixup the rest. */
 1775|  3.65M|    for (; next < count; next++)
  ------------------
  |  Branch (1775:12): [True: 3.23M, False: 419k]
  ------------------
 1776|  3.23M|      match_positions[next] += delta;
 1777|   419k|  }
 1778|       |
 1779|  1.43M|  (void) buffer->move_to (end);
 1780|  1.43M|}
hb-ot-layout.cc:_ZN2OTL18match_class_cachedER15hb_glyph_info_tjPKv:
 1178|   470k|{
 1179|   470k|  unsigned klass = info.syllable();
  ------------------
  |  |  147|   470k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 1180|   470k|  if (klass < 255)
  ------------------
  |  Branch (1180:7): [True: 292k, False: 177k]
  ------------------
 1181|   292k|    return klass == value;
 1182|   177k|  const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
 1183|   177k|  klass = class_def.get_class (info.codepoint);
 1184|   177k|  if (likely (klass < 255))
  ------------------
  |  |  258|   177k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 158k, False: 19.3k]
  |  |  ------------------
  ------------------
 1185|   158k|    info.syllable() = klass;
  ------------------
  |  |  147|   158k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
 1186|   177k|  return klass == value;
 1187|   470k|}
hb-ot-layout.cc:_ZN2OTL20context_apply_lookupINS_7IntTypeIjLj3EEEEEbPNS_21hb_ot_apply_context_tEjPKT_jPKNS_12LookupRecordERKNS_25ContextApplyLookupContextE:
 1877|  27.8k|{
 1878|  27.8k|  unsigned match_end = 0;
 1879|  27.8k|  unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
 1880|  27.8k|  if (match_input (c,
  ------------------
  |  Branch (1880:7): [True: 26.3k, False: 1.43k]
  ------------------
 1881|  27.8k|		   inputCount, input,
 1882|  27.8k|		   lookup_context.funcs.match, lookup_context.match_data,
 1883|  27.8k|		   &match_end, match_positions))
 1884|  26.3k|  {
 1885|  26.3k|    c->buffer->unsafe_to_break (c->buffer->idx, match_end);
 1886|  26.3k|    apply_lookup (c,
 1887|  26.3k|		  inputCount, match_positions,
 1888|  26.3k|		  lookupCount, lookupRecord,
 1889|  26.3k|		  match_end);
 1890|  26.3k|    return true;
 1891|  26.3k|  }
 1892|  1.43k|  else
 1893|  1.43k|  {
 1894|  1.43k|    c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
 1895|  1.43k|    return false;
 1896|  1.43k|  }
 1897|  27.8k|}
hb-ot-layout.cc:_ZN2OTL11match_inputINS_7IntTypeIjLj3EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_PjSE_SE_:
 1224|   520k|{
 1225|   520k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   520k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1226|       |
 1227|   520k|  if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  259|   520k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 247, False: 520k]
  |  |  ------------------
  ------------------
                if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
  ------------------
  |  |  349|    247|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    247|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1228|       |
 1229|   520k|  hb_buffer_t *buffer = c->buffer;
 1230|       |
 1231|   520k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
 1232|   520k|  skippy_iter.reset (buffer->idx, count - 1);
 1233|   520k|  skippy_iter.set_match_func (match_func, match_data);
 1234|   520k|  skippy_iter.set_glyph_data (input);
 1235|       |
 1236|       |  /*
 1237|       |   * This is perhaps the trickiest part of OpenType...  Remarks:
 1238|       |   *
 1239|       |   * - If all components of the ligature were marks, we call this a mark ligature.
 1240|       |   *
 1241|       |   * - If there is no GDEF, and the ligature is NOT a mark ligature, we categorize
 1242|       |   *   it as a ligature glyph.
 1243|       |   *
 1244|       |   * - Ligatures cannot be formed across glyphs attached to different components
 1245|       |   *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
 1246|       |   *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
 1247|       |   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.
 1248|       |   *   There are a couple of exceptions to this:
 1249|       |   *
 1250|       |   *   o If a ligature tries ligating with marks that belong to it itself, go ahead,
 1251|       |   *     assuming that the font designer knows what they are doing (otherwise it can
 1252|       |   *     break Indic stuff when a matra wants to ligate with a conjunct,
 1253|       |   *
 1254|       |   *   o If two marks want to ligate and they belong to different components of the
 1255|       |   *     same ligature glyph, and said ligature glyph is to be ignored according to
 1256|       |   *     mark-filtering rules, then allow.
 1257|       |   *     https://github.com/harfbuzz/harfbuzz/issues/545
 1258|       |   */
 1259|       |
 1260|   520k|  unsigned int total_component_count = 0;
 1261|       |
 1262|   520k|  unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
 1263|   520k|  unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 1264|       |
 1265|   520k|  enum {
 1266|   520k|    LIGBASE_NOT_CHECKED,
 1267|   520k|    LIGBASE_MAY_NOT_SKIP,
 1268|   520k|    LIGBASE_MAY_SKIP
 1269|   520k|  } ligbase = LIGBASE_NOT_CHECKED;
 1270|       |
 1271|  2.08M|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (1271:28): [True: 1.58M, False: 496k]
  ------------------
 1272|  1.58M|  {
 1273|  1.58M|    unsigned unsafe_to;
 1274|  1.58M|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1274:9): [True: 23.8k, False: 1.56M]
  ------------------
 1275|  23.8k|    {
 1276|  23.8k|      *end_position = unsafe_to;
 1277|  23.8k|      return_trace (false);
  ------------------
  |  |  349|  23.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  23.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1278|  23.8k|    }
 1279|       |
 1280|  1.56M|    match_positions[i] = skippy_iter.idx;
 1281|       |
 1282|  1.56M|    unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
 1283|  1.56M|    unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
 1284|       |
 1285|  1.56M|    if (first_lig_id && first_lig_comp)
  ------------------
  |  Branch (1285:9): [True: 0, False: 1.56M]
  |  Branch (1285:25): [True: 0, False: 0]
  ------------------
 1286|      0|    {
 1287|       |      /* If first component was attached to a previous ligature component,
 1288|       |       * all subsequent components should be attached to the same ligature
 1289|       |       * component, otherwise we shouldn't ligate them... */
 1290|      0|      if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
  ------------------
  |  Branch (1290:11): [True: 0, False: 0]
  |  Branch (1290:42): [True: 0, False: 0]
  ------------------
 1291|      0|      {
 1292|       |	/* ...unless, we are attached to a base ligature and that base
 1293|       |	 * ligature is ignorable. */
 1294|      0|	if (ligbase == LIGBASE_NOT_CHECKED)
  ------------------
  |  Branch (1294:6): [True: 0, False: 0]
  ------------------
 1295|      0|	{
 1296|      0|	  bool found = false;
 1297|      0|	  const auto *out = buffer->out_info;
 1298|      0|	  unsigned int j = buffer->out_len;
 1299|      0|	  while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
  ------------------
  |  Branch (1299:11): [True: 0, False: 0]
  |  Branch (1299:16): [True: 0, False: 0]
  ------------------
 1300|      0|	  {
 1301|      0|	    if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
  ------------------
  |  Branch (1301:10): [True: 0, False: 0]
  ------------------
 1302|      0|	    {
 1303|      0|	      j--;
 1304|      0|	      found = true;
 1305|      0|	      break;
 1306|      0|	    }
 1307|      0|	    j--;
 1308|      0|	  }
 1309|       |
 1310|      0|	  if (found && skippy_iter.may_skip (out[j]) == hb_ot_apply_context_t::matcher_t::SKIP_YES)
  ------------------
  |  Branch (1310:8): [True: 0, False: 0]
  |  Branch (1310:17): [True: 0, False: 0]
  ------------------
 1311|      0|	    ligbase = LIGBASE_MAY_SKIP;
 1312|      0|	  else
 1313|      0|	    ligbase = LIGBASE_MAY_NOT_SKIP;
 1314|      0|	}
 1315|       |
 1316|      0|	if (ligbase == LIGBASE_MAY_NOT_SKIP)
  ------------------
  |  Branch (1316:6): [True: 0, False: 0]
  ------------------
 1317|      0|	  return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1318|      0|      }
 1319|      0|    }
 1320|  1.56M|    else
 1321|  1.56M|    {
 1322|       |      /* If first component was NOT attached to a previous ligature component,
 1323|       |       * all subsequent components should also NOT be attached to any ligature
 1324|       |       * component, unless they are attached to the first component itself! */
 1325|  1.56M|      if (this_lig_id && this_lig_comp && (this_lig_id != first_lig_id))
  ------------------
  |  Branch (1325:11): [True: 0, False: 1.56M]
  |  Branch (1325:26): [True: 0, False: 0]
  |  Branch (1325:43): [True: 0, False: 0]
  ------------------
 1326|      0|	return_trace (false);
  ------------------
  |  |  349|      0|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1327|  1.56M|    }
 1328|       |
 1329|  1.56M|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
 1330|  1.56M|  }
 1331|       |
 1332|   496k|  *end_position = skippy_iter.idx + 1;
 1333|       |
 1334|   496k|  if (p_total_component_count)
  ------------------
  |  Branch (1334:7): [True: 0, False: 496k]
  ------------------
 1335|      0|  {
 1336|      0|    total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->cur());
 1337|      0|    *p_total_component_count = total_component_count;
 1338|      0|  }
 1339|       |
 1340|   496k|  match_positions[0] = buffer->idx;
 1341|       |
 1342|   496k|  return_trace (true);
  ------------------
  |  |  349|   496k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   496k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1343|   520k|}
hb-ot-layout.cc:_ZN2OTL26chain_context_apply_lookupINS_7IntTypeItLj2EEEEEbPNS_21hb_ot_apply_context_tEjPKT_jS7_jS7_jPKNS_12LookupRecordERKNS_30ChainContextApplyLookupContextE:
 2880|   569k|{
 2881|   569k|  unsigned end_index = c->buffer->idx;
 2882|   569k|  unsigned match_end = 0;
 2883|   569k|  unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
 2884|   569k|  if (!(match_input (c,
  ------------------
  |  Branch (2884:9): [True: 387k, False: 182k]
  ------------------
 2885|   569k|		     inputCount, input,
 2886|   569k|		     lookup_context.funcs.match[1], lookup_context.match_data[1],
 2887|   569k|		     &match_end, match_positions) && (end_index = match_end)
  ------------------
  |  Branch (2887:40): [True: 387k, False: 0]
  ------------------
 2888|   569k|       && match_lookahead (c,
  ------------------
  |  Branch (2888:11): [True: 336k, False: 50.7k]
  ------------------
 2889|   387k|			   lookaheadCount, lookahead,
 2890|   387k|			   lookup_context.funcs.match[2], lookup_context.match_data[2],
 2891|   387k|			   match_end, &end_index)))
 2892|   233k|  {
 2893|   233k|    c->buffer->unsafe_to_concat (c->buffer->idx, end_index);
 2894|   233k|    return false;
 2895|   233k|  }
 2896|       |
 2897|   336k|  unsigned start_index = c->buffer->out_len;
 2898|   336k|  if (!match_backtrack (c,
  ------------------
  |  Branch (2898:7): [True: 107k, False: 229k]
  ------------------
 2899|   336k|			backtrackCount, backtrack,
 2900|   336k|			lookup_context.funcs.match[0], lookup_context.match_data[0],
 2901|   336k|			&start_index))
 2902|   107k|  {
 2903|   107k|    c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
 2904|   107k|    return false;
 2905|   107k|  }
 2906|       |
 2907|   229k|  c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
 2908|   229k|  apply_lookup (c,
 2909|   229k|		inputCount, match_positions,
 2910|   229k|		lookupCount, lookupRecord,
 2911|   229k|		match_end);
 2912|   229k|  return true;
 2913|   336k|}
hb-ot-layout.cc:_ZN2OTL15match_lookaheadINS_7IntTypeItLj2EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_jPj:
 1495|   531k|{
 1496|   531k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   531k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1497|       |
 1498|   531k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
 1499|   531k|  skippy_iter.reset (start_index - 1, count);
 1500|   531k|  skippy_iter.set_match_func (match_func, match_data);
 1501|   531k|  skippy_iter.set_glyph_data (lookahead);
 1502|       |
 1503|   725k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1503:28): [True: 347k, False: 377k]
  ------------------
 1504|   347k|  {
 1505|   347k|    unsigned unsafe_to;
 1506|   347k|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1506:9): [True: 153k, False: 193k]
  ------------------
 1507|   153k|    {
 1508|   153k|      *end_index = unsafe_to;
 1509|   153k|      return_trace (false);
  ------------------
  |  |  349|   153k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   153k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1510|   153k|    }
 1511|   347k|  }
 1512|       |
 1513|   377k|  *end_index = skippy_iter.idx + 1;
 1514|   377k|  return_trace (true);
  ------------------
  |  |  349|   377k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   377k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1515|   531k|}
hb-ot-layout.cc:_ZN2OTL15match_backtrackINS_7IntTypeItLj2EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_Pj:
 1465|   560k|{
 1466|   560k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   560k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1467|       |
 1468|   560k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
 1469|   560k|  skippy_iter.reset (c->buffer->backtrack_len (), count);
 1470|   560k|  skippy_iter.set_match_func (match_func, match_data);
 1471|   560k|  skippy_iter.set_glyph_data (backtrack);
 1472|       |
 1473|   689k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1473:28): [True: 316k, False: 373k]
  ------------------
 1474|   316k|  {
 1475|   316k|    unsigned unsafe_from;
 1476|   316k|    if (!skippy_iter.prev (&unsafe_from))
  ------------------
  |  Branch (1476:9): [True: 187k, False: 128k]
  ------------------
 1477|   187k|    {
 1478|   187k|      *match_start = unsafe_from;
 1479|   187k|      return_trace (false);
  ------------------
  |  |  349|   187k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   187k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1480|   187k|    }
 1481|   316k|  }
 1482|       |
 1483|   373k|  *match_start = skippy_iter.idx;
 1484|   373k|  return_trace (true);
  ------------------
  |  |  349|   373k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   373k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1485|   560k|}
hb-ot-layout.cc:_ZN2OTL26chain_context_apply_lookupINS_7IntTypeIjLj3EEEEEbPNS_21hb_ot_apply_context_tEjPKT_jS7_jS7_jPKNS_12LookupRecordERKNS_30ChainContextApplyLookupContextE:
 2880|   492k|{
 2881|   492k|  unsigned end_index = c->buffer->idx;
 2882|   492k|  unsigned match_end = 0;
 2883|   492k|  unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
 2884|   492k|  if (!(match_input (c,
  ------------------
  |  Branch (2884:9): [True: 470k, False: 22.7k]
  ------------------
 2885|   492k|		     inputCount, input,
 2886|   492k|		     lookup_context.funcs.match[1], lookup_context.match_data[1],
 2887|   492k|		     &match_end, match_positions) && (end_index = match_end)
  ------------------
  |  Branch (2887:40): [True: 470k, False: 0]
  ------------------
 2888|   492k|       && match_lookahead (c,
  ------------------
  |  Branch (2888:11): [True: 467k, False: 2.31k]
  ------------------
 2889|   470k|			   lookaheadCount, lookahead,
 2890|   470k|			   lookup_context.funcs.match[2], lookup_context.match_data[2],
 2891|   470k|			   match_end, &end_index)))
 2892|  25.0k|  {
 2893|  25.0k|    c->buffer->unsafe_to_concat (c->buffer->idx, end_index);
 2894|  25.0k|    return false;
 2895|  25.0k|  }
 2896|       |
 2897|   467k|  unsigned start_index = c->buffer->out_len;
 2898|   467k|  if (!match_backtrack (c,
  ------------------
  |  Branch (2898:7): [True: 68.1k, False: 399k]
  ------------------
 2899|   467k|			backtrackCount, backtrack,
 2900|   467k|			lookup_context.funcs.match[0], lookup_context.match_data[0],
 2901|   467k|			&start_index))
 2902|  68.1k|  {
 2903|  68.1k|    c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
 2904|  68.1k|    return false;
 2905|  68.1k|  }
 2906|       |
 2907|   399k|  c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
 2908|   399k|  apply_lookup (c,
 2909|   399k|		inputCount, match_positions,
 2910|   399k|		lookupCount, lookupRecord,
 2911|   399k|		match_end);
 2912|   399k|  return true;
 2913|   467k|}
hb-ot-layout.cc:_ZN2OTL15match_lookaheadINS_7IntTypeIjLj3EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_jPj:
 1495|   470k|{
 1496|   470k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   470k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1497|       |
 1498|   470k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
 1499|   470k|  skippy_iter.reset (start_index - 1, count);
 1500|   470k|  skippy_iter.set_match_func (match_func, match_data);
 1501|   470k|  skippy_iter.set_glyph_data (lookahead);
 1502|       |
 1503|   849k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1503:28): [True: 382k, False: 467k]
  ------------------
 1504|   382k|  {
 1505|   382k|    unsigned unsafe_to;
 1506|   382k|    if (!skippy_iter.next (&unsafe_to))
  ------------------
  |  Branch (1506:9): [True: 2.31k, False: 379k]
  ------------------
 1507|  2.31k|    {
 1508|  2.31k|      *end_index = unsafe_to;
 1509|  2.31k|      return_trace (false);
  ------------------
  |  |  349|  2.31k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.31k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1510|  2.31k|    }
 1511|   382k|  }
 1512|       |
 1513|   467k|  *end_index = skippy_iter.idx + 1;
 1514|   467k|  return_trace (true);
  ------------------
  |  |  349|   467k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   467k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1515|   470k|}
hb-ot-layout.cc:_ZN2OTL15match_backtrackINS_7IntTypeIjLj3EEEEEbPNS_21hb_ot_apply_context_tEjPKT_PFbR15hb_glyph_info_tjPKvESB_Pj:
 1465|   467k|{
 1466|   467k|  TRACE_APPLY (nullptr);
  ------------------
  |  |  410|   467k|#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
  ------------------
 1467|       |
 1468|   467k|  hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
 1469|   467k|  skippy_iter.reset (c->buffer->backtrack_len (), count);
 1470|   467k|  skippy_iter.set_match_func (match_func, match_data);
 1471|   467k|  skippy_iter.set_glyph_data (backtrack);
 1472|       |
 1473|   521k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1473:28): [True: 121k, False: 399k]
  ------------------
 1474|   121k|  {
 1475|   121k|    unsigned unsafe_from;
 1476|   121k|    if (!skippy_iter.prev (&unsafe_from))
  ------------------
  |  Branch (1476:9): [True: 68.1k, False: 53.7k]
  ------------------
 1477|  68.1k|    {
 1478|  68.1k|      *match_start = unsafe_from;
 1479|  68.1k|      return_trace (false);
  ------------------
  |  |  349|  68.1k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  68.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1480|  68.1k|    }
 1481|   121k|  }
 1482|       |
 1483|   399k|  *match_start = skippy_iter.idx;
 1484|   399k|  return_trace (true);
  ------------------
  |  |  349|   399k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|   399k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
 1485|   467k|}
_ZZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS_21hb_ot_apply_context_tEjbENKUlRKNS_33hb_accelerate_subtables_context_t15hb_applicable_tEE_clES6_:
 4098|  3.33M|      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply_cached (c); })
_ZZNK2OT33hb_ot_layout_lookup_accelerator_t5applyEPNS_21hb_ot_apply_context_tEjbENKUlRKNS_33hb_accelerate_subtables_context_t15hb_applicable_tEE0_clES6_:
 4107|   179M|      | hb_map ([&c] (const hb_accelerate_subtables_context_t::hb_applicable_t &_) { return _.apply (c); })

_Z24hb_ot_layout_has_kerningP9hb_face_t:
   89|  47.1k|{
   90|  47.1k|  return face->table.kern->has_data ();
   91|  47.1k|}
_Z32hb_ot_layout_has_machine_kerningP9hb_face_t:
  105|    862|{
  106|    862|  return face->table.kern->has_state_machine ();
  107|    862|}
_Z30hb_ot_layout_has_cross_kerningP9hb_face_t:
  125|    869|{
  126|    869|  return face->table.kern->has_cross_stream ();
  127|    869|}
_Z17hb_ot_layout_kernPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  133|  5.02k|{
  134|  5.02k|  hb_blob_t *blob = font->face->table.kern.get_blob ();
  135|  5.02k|  const AAT::kern& kern = *blob->as<AAT::kern> ();
  136|       |
  137|  5.02k|  AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
  138|       |
  139|  5.02k|  if (!buffer->message (font, "start table kern")) return;
  ------------------
  |  Branch (139:7): [True: 0, False: 5.02k]
  ------------------
  140|  5.02k|  kern.apply (&c);
  141|  5.02k|  (void) buffer->message (font, "end table kern");
  142|  5.02k|}
_ZNK2OT4GDEF14is_blocklistedEP9hb_blob_tP9hb_face_t:
  153|  32.8k|{
  154|       |#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
  155|       |  return false;
  156|       |#endif
  157|       |  /* The ugly business of blocklisting individual fonts' tables happen here!
  158|       |   * See this thread for why we finally had to bend in and do this:
  159|       |   * https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
  160|       |   *
  161|       |   * In certain versions of Times New Roman Italic and Bold Italic,
  162|       |   * ASCII double quotation mark U+0022 has wrong glyph class 3 (mark)
  163|       |   * in GDEF.  Many versions of Tahoma have bad GDEF tables that
  164|       |   * incorrectly classify some spacing marks such as certain IPA
  165|       |   * symbols as glyph class 3. So do older versions of Microsoft
  166|       |   * Himalaya, and the version of Cantarell shipped by Ubuntu 16.04.
  167|       |   *
  168|       |   * Nuke the GDEF tables of to avoid unwanted width-zeroing.
  169|       |   *
  170|       |   * See https://bugzilla.mozilla.org/show_bug.cgi?id=1279925
  171|       |   *     https://bugzilla.mozilla.org/show_bug.cgi?id=1279693
  172|       |   *     https://bugzilla.mozilla.org/show_bug.cgi?id=1279875
  173|       |   */
  174|  32.8k|  switch HB_CODEPOINT_ENCODE3(blob->length,
  ------------------
  |  |  212|  32.8k|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  |  |  ------------------
  |  |  |  Branch (212:38): [True: 32.8k, False: 0]
  |  |  ------------------
  ------------------
  175|  32.8k|			      face->table.GSUB->table.get_length (),
  176|  32.8k|			      face->table.GPOS->table.get_length ())
  177|  32.8k|  {
  178|       |    /* sha1sum:c5ee92f0bca4bfb7d06c4d03e8cf9f9cf75d2e8a Windows 7? timesi.ttf */
  179|      0|    case HB_CODEPOINT_ENCODE3 (442, 2874, 42038):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (179:5): [True: 0, False: 32.8k]
  ------------------
  180|       |    /* sha1sum:37fc8c16a0894ab7b749e35579856c73c840867b Windows 7? timesbi.ttf */
  181|      0|    case HB_CODEPOINT_ENCODE3 (430, 2874, 40662):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (181:5): [True: 0, False: 32.8k]
  ------------------
  182|       |    /* sha1sum:19fc45110ea6cd3cdd0a5faca256a3797a069a80 Windows 7 timesi.ttf */
  183|      0|    case HB_CODEPOINT_ENCODE3 (442, 2874, 39116):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (183:5): [True: 0, False: 32.8k]
  ------------------
  184|       |    /* sha1sum:6d2d3c9ed5b7de87bc84eae0df95ee5232ecde26 Windows 7 timesbi.ttf */
  185|      0|    case HB_CODEPOINT_ENCODE3 (430, 2874, 39374):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (185:5): [True: 0, False: 32.8k]
  ------------------
  186|       |    /* sha1sum:8583225a8b49667c077b3525333f84af08c6bcd8 OS X 10.11.3 Times New Roman Italic.ttf */
  187|      0|    case HB_CODEPOINT_ENCODE3 (490, 3046, 41638):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (187:5): [True: 0, False: 32.8k]
  ------------------
  188|       |    /* sha1sum:ec0f5a8751845355b7c3271d11f9918a966cb8c9 OS X 10.11.3 Times New Roman Bold Italic.ttf */
  189|      0|    case HB_CODEPOINT_ENCODE3 (478, 3046, 41902):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (189:5): [True: 0, False: 32.8k]
  ------------------
  190|       |    /* sha1sum:96eda93f7d33e79962451c6c39a6b51ee893ce8c  tahoma.ttf from Windows 8 */
  191|      0|    case HB_CODEPOINT_ENCODE3 (898, 12554, 46470):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (191:5): [True: 0, False: 32.8k]
  ------------------
  192|       |    /* sha1sum:20928dc06014e0cd120b6fc942d0c3b1a46ac2bc  tahomabd.ttf from Windows 8 */
  193|      0|    case HB_CODEPOINT_ENCODE3 (910, 12566, 47732):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (193:5): [True: 0, False: 32.8k]
  ------------------
  194|       |    /* sha1sum:4f95b7e4878f60fa3a39ca269618dfde9721a79e  tahoma.ttf from Windows 8.1 */
  195|      0|    case HB_CODEPOINT_ENCODE3 (928, 23298, 59332):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (195:5): [True: 0, False: 32.8k]
  ------------------
  196|       |    /* sha1sum:6d400781948517c3c0441ba42acb309584b73033  tahomabd.ttf from Windows 8.1 */
  197|      0|    case HB_CODEPOINT_ENCODE3 (940, 23310, 60732):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (197:5): [True: 0, False: 32.8k]
  ------------------
  198|       |    /* tahoma.ttf v6.04 from Windows 8.1 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
  199|      0|    case HB_CODEPOINT_ENCODE3 (964, 23836, 60072):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (199:5): [True: 0, False: 32.8k]
  ------------------
  200|       |    /* tahomabd.ttf v6.04 from Windows 8.1 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
  201|      0|    case HB_CODEPOINT_ENCODE3 (976, 23832, 61456):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (201:5): [True: 0, False: 32.8k]
  ------------------
  202|       |    /* sha1sum:e55fa2dfe957a9f7ec26be516a0e30b0c925f846  tahoma.ttf from Windows 10 */
  203|      0|    case HB_CODEPOINT_ENCODE3 (994, 24474, 60336):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (203:5): [True: 0, False: 32.8k]
  ------------------
  204|       |    /* sha1sum:7199385abb4c2cc81c83a151a7599b6368e92343  tahomabd.ttf from Windows 10 */
  205|      0|    case HB_CODEPOINT_ENCODE3 (1006, 24470, 61740):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (205:5): [True: 0, False: 32.8k]
  ------------------
  206|       |    /* tahoma.ttf v6.91 from Windows 10 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
  207|      0|    case HB_CODEPOINT_ENCODE3 (1006, 24576, 61346):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (207:5): [True: 0, False: 32.8k]
  ------------------
  208|       |    /* tahomabd.ttf v6.91 from Windows 10 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
  209|      0|    case HB_CODEPOINT_ENCODE3 (1018, 24572, 62828):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (209:5): [True: 0, False: 32.8k]
  ------------------
  210|       |    /* sha1sum:b9c84d820c49850d3d27ec498be93955b82772b5  tahoma.ttf from Windows 10 AU */
  211|      0|    case HB_CODEPOINT_ENCODE3 (1006, 24576, 61352):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (211:5): [True: 0, False: 32.8k]
  ------------------
  212|       |    /* sha1sum:2bdfaab28174bdadd2f3d4200a30a7ae31db79d2  tahomabd.ttf from Windows 10 AU */
  213|      0|    case HB_CODEPOINT_ENCODE3 (1018, 24572, 62834):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (213:5): [True: 0, False: 32.8k]
  ------------------
  214|       |    /* sha1sum:b0d36cf5a2fbe746a3dd277bffc6756a820807a7  Tahoma.ttf from Mac OS X 10.9 */
  215|      0|    case HB_CODEPOINT_ENCODE3 (832, 7324, 47162):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (215:5): [True: 0, False: 32.8k]
  ------------------
  216|       |    /* sha1sum:12fc4538e84d461771b30c18b5eb6bd434e30fba  Tahoma Bold.ttf from Mac OS X 10.9 */
  217|      0|    case HB_CODEPOINT_ENCODE3 (844, 7302, 45474):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (217:5): [True: 0, False: 32.8k]
  ------------------
  218|       |    /* sha1sum:eb8afadd28e9cf963e886b23a30b44ab4fd83acc  himalaya.ttf from Windows 7 */
  219|      0|    case HB_CODEPOINT_ENCODE3 (180, 13054, 7254):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (219:5): [True: 0, False: 32.8k]
  ------------------
  220|       |    /* sha1sum:73da7f025b238a3f737aa1fde22577a6370f77b0  himalaya.ttf from Windows 8 */
  221|      0|    case HB_CODEPOINT_ENCODE3 (192, 12638, 7254):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (221:5): [True: 0, False: 32.8k]
  ------------------
  222|       |    /* sha1sum:6e80fd1c0b059bbee49272401583160dc1e6a427  himalaya.ttf from Windows 8.1 */
  223|      0|    case HB_CODEPOINT_ENCODE3 (192, 12690, 7254):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (223:5): [True: 0, False: 32.8k]
  ------------------
  224|       |    /* 8d9267aea9cd2c852ecfb9f12a6e834bfaeafe44  cantarell-fonts-0.0.21/otf/Cantarell-Regular.otf */
  225|       |    /* 983988ff7b47439ab79aeaf9a45bd4a2c5b9d371  cantarell-fonts-0.0.21/otf/Cantarell-Oblique.otf */
  226|      0|    case HB_CODEPOINT_ENCODE3 (188, 248, 3852):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (226:5): [True: 0, False: 32.8k]
  ------------------
  227|       |    /* 2c0c90c6f6087ffbfea76589c93113a9cbb0e75f  cantarell-fonts-0.0.21/otf/Cantarell-Bold.otf */
  228|       |    /* 55461f5b853c6da88069ffcdf7f4dd3f8d7e3e6b  cantarell-fonts-0.0.21/otf/Cantarell-Bold-Oblique.otf */
  229|      0|    case HB_CODEPOINT_ENCODE3 (188, 264, 3426):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (229:5): [True: 0, False: 32.8k]
  ------------------
  230|       |    /* d125afa82a77a6475ac0e74e7c207914af84b37a padauk-2.80/Padauk.ttf RHEL 7.2 */
  231|      0|    case HB_CODEPOINT_ENCODE3 (1058, 47032, 11818):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (231:5): [True: 0, False: 32.8k]
  ------------------
  232|       |    /* 0f7b80437227b90a577cc078c0216160ae61b031 padauk-2.80/Padauk-Bold.ttf RHEL 7.2*/
  233|      0|    case HB_CODEPOINT_ENCODE3 (1046, 47030, 12600):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (233:5): [True: 0, False: 32.8k]
  ------------------
  234|       |    /* d3dde9aa0a6b7f8f6a89ef1002e9aaa11b882290 padauk-2.80/Padauk.ttf Ubuntu 16.04 */
  235|      0|    case HB_CODEPOINT_ENCODE3 (1058, 71796, 16770):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (235:5): [True: 0, False: 32.8k]
  ------------------
  236|       |    /* 5f3c98ccccae8a953be2d122c1b3a77fd805093f padauk-2.80/Padauk-Bold.ttf Ubuntu 16.04 */
  237|      0|    case HB_CODEPOINT_ENCODE3 (1046, 71790, 17862):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (237:5): [True: 0, False: 32.8k]
  ------------------
  238|       |    /* 6c93b63b64e8b2c93f5e824e78caca555dc887c7 padauk-2.80/Padauk-book.ttf */
  239|      0|    case HB_CODEPOINT_ENCODE3 (1046, 71788, 17112):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (239:5): [True: 0, False: 32.8k]
  ------------------
  240|       |    /* d89b1664058359b8ec82e35d3531931125991fb9 padauk-2.80/Padauk-bookbold.ttf */
  241|      0|    case HB_CODEPOINT_ENCODE3 (1058, 71794, 17514):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (241:5): [True: 0, False: 32.8k]
  ------------------
  242|       |    /* 824cfd193aaf6234b2b4dc0cf3c6ef576c0d00ef padauk-3.0/Padauk-book.ttf */
  243|      0|    case HB_CODEPOINT_ENCODE3 (1330, 109904, 57938):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (243:5): [True: 0, False: 32.8k]
  ------------------
  244|       |    /* 91fcc10cf15e012d27571e075b3b4dfe31754a8a padauk-3.0/Padauk-bookbold.ttf */
  245|      0|    case HB_CODEPOINT_ENCODE3 (1330, 109904, 58972):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (245:5): [True: 0, False: 32.8k]
  ------------------
  246|       |    /* sha1sum: c26e41d567ed821bed997e937bc0c41435689e85  Padauk.ttf
  247|       |     *  "Padauk Regular" "Version 2.5", see https://crbug.com/681813 */
  248|      0|    case HB_CODEPOINT_ENCODE3 (1004, 59092, 14836):
  ------------------
  |  |  212|      0|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  |  Branch (248:5): [True: 0, False: 32.8k]
  ------------------
  249|      0|      return true;
  250|  32.8k|  }
  251|  32.8k|  return false;
  252|  32.8k|}
hb_ot_layout_has_glyph_classes:
  283|  82.6k|{
  284|  82.6k|  return face->table.GDEF->table->has_glyph_classes ();
  285|  82.6k|}
hb_ot_layout_get_ligature_carets:
  386|  33.3k|{
  387|  33.3k|  return font->face->table.GDEF->table->get_lig_carets (font, direction, glyph, start_offset, caret_count, caret_array);
  388|  33.3k|}
_ZNK2OT6Layout4GSUB14is_blocklistedEP9hb_blob_tP9hb_face_t:
  399|  32.9k|{
  400|       |#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
  401|       |  return false;
  402|       |#endif
  403|  32.9k|  return false;
  404|  32.9k|}
_ZNK2OT6Layout4GPOS14is_blocklistedEP9hb_blob_tP9hb_face_t:
  409|  32.8k|{
  410|       |#ifdef HB_NO_OT_LAYOUT_BLOCKLIST
  411|       |  return false;
  412|       |#endif
  413|  32.8k|  return false;
  414|  32.8k|}
hb_ot_layout_table_select_script:
  553|  98.6k|{
  554|  98.6k|  static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX), "");
  555|  98.6k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
  556|  98.6k|  unsigned int i;
  557|       |
  558|   203k|  for (i = 0; i < script_count; i++)
  ------------------
  |  Branch (558:15): [True: 110k, False: 93.5k]
  ------------------
  559|   110k|  {
  560|   110k|    if (g.find_script_index (script_tags[i], script_index))
  ------------------
  |  Branch (560:9): [True: 5.06k, False: 105k]
  ------------------
  561|  5.06k|    {
  562|  5.06k|      if (chosen_script)
  ------------------
  |  Branch (562:11): [True: 5.06k, False: 0]
  ------------------
  563|  5.06k|	*chosen_script = script_tags[i];
  564|  5.06k|      return true;
  565|  5.06k|    }
  566|   110k|  }
  567|       |
  568|       |  /* try finding 'DFLT' */
  569|  93.5k|  if (g.find_script_index (HB_OT_TAG_DEFAULT_SCRIPT, script_index)) {
  ------------------
  |  |   83|  93.5k|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|  93.5k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (569:7): [True: 124, False: 93.4k]
  ------------------
  570|    124|    if (chosen_script)
  ------------------
  |  Branch (570:9): [True: 124, False: 0]
  ------------------
  571|    124|      *chosen_script = HB_OT_TAG_DEFAULT_SCRIPT;
  ------------------
  |  |   83|    124|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|    124|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  572|    124|    return false;
  573|    124|  }
  574|       |
  575|       |  /* try with 'dflt'; MS site has had typos and many fonts use it now :( */
  576|  93.4k|  if (g.find_script_index (HB_OT_TAG_DEFAULT_LANGUAGE, script_index)) {
  ------------------
  |  |   90|  93.4k|#define HB_OT_TAG_DEFAULT_LANGUAGE	HB_TAG ('d', 'f', 'l', 't')
  |  |  ------------------
  |  |  |  |  179|  93.4k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (576:7): [True: 5.41k, False: 88.0k]
  ------------------
  577|  5.41k|    if (chosen_script)
  ------------------
  |  Branch (577:9): [True: 5.41k, False: 0]
  ------------------
  578|  5.41k|      *chosen_script = HB_OT_TAG_DEFAULT_LANGUAGE;
  ------------------
  |  |   90|  5.41k|#define HB_OT_TAG_DEFAULT_LANGUAGE	HB_TAG ('d', 'f', 'l', 't')
  |  |  ------------------
  |  |  |  |  179|  5.41k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  579|  5.41k|    return false;
  580|  5.41k|  }
  581|       |
  582|       |  /* try with 'latn'; some old fonts put their features there even though
  583|       |     they're really trying to support Thai, for example :( */
  584|  88.0k|  if (g.find_script_index (HB_OT_TAG_LATIN_SCRIPT, script_index)) {
  ------------------
  |  |  455|  88.0k|#define HB_OT_TAG_LATIN_SCRIPT		HB_TAG ('l', 'a', 't', 'n')
  |  |  ------------------
  |  |  |  |  179|  88.0k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (584:7): [True: 2.76k, False: 85.2k]
  ------------------
  585|  2.76k|    if (chosen_script)
  ------------------
  |  Branch (585:9): [True: 2.76k, False: 0]
  ------------------
  586|  2.76k|      *chosen_script = HB_OT_TAG_LATIN_SCRIPT;
  ------------------
  |  |  455|  2.76k|#define HB_OT_TAG_LATIN_SCRIPT		HB_TAG ('l', 'a', 't', 'n')
  |  |  ------------------
  |  |  |  |  179|  2.76k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  587|  2.76k|    return false;
  588|  2.76k|  }
  589|       |
  590|  85.2k|  if (script_index) *script_index = HB_OT_LAYOUT_NO_SCRIPT_INDEX;
  ------------------
  |  |  193|  85.2k|#define HB_OT_LAYOUT_NO_SCRIPT_INDEX		0xFFFFu
  ------------------
  |  Branch (590:7): [True: 85.2k, False: 0]
  ------------------
  591|  85.2k|  if (chosen_script)
  ------------------
  |  Branch (591:7): [True: 85.2k, False: 0]
  ------------------
  592|  85.2k|    *chosen_script = HB_TAG_NONE;
  ------------------
  |  |  197|  85.2k|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|  85.2k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  593|  85.2k|  return false;
  594|  88.0k|}
hb_ot_layout_script_select_language2:
  762|  98.6k|{
  763|  98.6k|  static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX), "");
  764|  98.6k|  const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
  765|  98.6k|  unsigned int i;
  766|       |
  767|  98.6k|  for (i = 0; i < language_count; i++)
  ------------------
  |  Branch (767:15): [True: 0, False: 98.6k]
  ------------------
  768|      0|  {
  769|      0|    if (s.find_lang_sys_index (language_tags[i], language_index))
  ------------------
  |  Branch (769:9): [True: 0, False: 0]
  ------------------
  770|      0|    {
  771|      0|      if (chosen_language)
  ------------------
  |  Branch (771:11): [True: 0, False: 0]
  ------------------
  772|      0|        *chosen_language = language_tags[i];
  773|      0|      return true;
  774|      0|    }
  775|      0|  }
  776|       |
  777|       |  /* try finding 'dflt' */
  778|  98.6k|  if (s.find_lang_sys_index (HB_OT_TAG_DEFAULT_LANGUAGE, language_index))
  ------------------
  |  |   90|  98.6k|#define HB_OT_TAG_DEFAULT_LANGUAGE	HB_TAG ('d', 'f', 'l', 't')
  |  |  ------------------
  |  |  |  |  179|  98.6k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (778:7): [True: 54, False: 98.5k]
  ------------------
  779|     54|  {
  780|     54|    if (chosen_language)
  ------------------
  |  Branch (780:9): [True: 0, False: 54]
  ------------------
  781|      0|      *chosen_language = HB_OT_TAG_DEFAULT_LANGUAGE;
  ------------------
  |  |   90|      0|#define HB_OT_TAG_DEFAULT_LANGUAGE	HB_TAG ('d', 'f', 'l', 't')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  782|     54|    return false;
  783|     54|  }
  784|       |
  785|  98.5k|  if (language_index)
  ------------------
  |  Branch (785:7): [True: 98.5k, False: 0]
  ------------------
  786|  98.5k|    *language_index = HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
  ------------------
  |  |  205|  98.5k|#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX	0xFFFFu
  ------------------
  787|  98.5k|  if (chosen_language)
  ------------------
  |  Branch (787:7): [True: 0, False: 98.5k]
  ------------------
  788|      0|    *chosen_language = HB_TAG_NONE;
  ------------------
  |  |  197|      0|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  789|  98.5k|  return false;
  790|  98.6k|}
hb_ot_layout_script_select_language:
  819|  98.6k|{
  820|  98.6k|  return hb_ot_layout_script_select_language2 (face, table_tag,
  821|  98.6k|					       script_index,
  822|  98.6k|					       language_count, language_tags,
  823|  98.6k|					       language_index, nullptr);
  824|  98.6k|}
hb_ot_layout_language_get_required_feature:
  881|  98.6k|{
  882|  98.6k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
  883|  98.6k|  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
  884|       |
  885|  98.6k|  unsigned int index = l.get_required_feature_index ();
  886|  98.6k|  if (feature_index) *feature_index = index;
  ------------------
  |  Branch (886:7): [True: 98.6k, False: 0]
  ------------------
  887|  98.6k|  if (feature_tag) *feature_tag = g.get_feature_tag (index);
  ------------------
  |  Branch (887:7): [True: 98.6k, False: 0]
  ------------------
  888|       |
  889|  98.6k|  return l.has_required_feature ();
  890|  98.6k|}
hb_ot_layout_language_get_feature_indexes:
  921|  33.3k|{
  922|  33.3k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
  923|  33.3k|  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
  924|       |
  925|  33.3k|  return l.get_feature_indexes (start_offset, feature_count, feature_indexes);
  926|  33.3k|}
hb_ot_layout_language_find_feature:
  998|  2.73M|{
  999|  2.73M|  static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX), "");
 1000|  2.73M|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 1001|  2.73M|  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 1002|       |
 1003|  2.73M|  unsigned int num_features = l.get_feature_count ();
 1004|  12.1M|  for (unsigned int i = 0; i < num_features; i++) {
  ------------------
  |  Branch (1004:28): [True: 9.38M, False: 2.72M]
  ------------------
 1005|  9.38M|    unsigned int f_index = l.get_feature_index (i);
 1006|       |
 1007|  9.38M|    if (feature_tag == g.get_feature_tag (f_index)) {
  ------------------
  |  Branch (1007:9): [True: 3.80k, False: 9.38M]
  ------------------
 1008|  3.80k|      if (feature_index) *feature_index = f_index;
  ------------------
  |  Branch (1008:11): [True: 3.80k, False: 1]
  ------------------
 1009|  3.80k|      return true;
 1010|  3.80k|    }
 1011|  9.38M|  }
 1012|       |
 1013|  2.72M|  if (feature_index) *feature_index = HB_OT_LAYOUT_NO_FEATURE_INDEX;
  ------------------
  |  |  199|  2.72M|#define HB_OT_LAYOUT_NO_FEATURE_INDEX		0xFFFFu
  ------------------
  |  Branch (1013:7): [True: 2.72M, False: 2.77k]
  ------------------
 1014|  2.72M|  return false;
 1015|  2.73M|}
hb_ot_layout_table_get_lookup_count:
 1069|   218k|{
 1070|   218k|  return get_gsubgpos_table (face, table_tag).get_lookup_count ();
 1071|   218k|}
hb_ot_layout_table_find_feature_variations:
 1402|  1.23M|{
 1403|  1.23M|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 1404|       |
 1405|  1.23M|  return g.find_variations_index (coords, num_coords, variations_index);
 1406|  1.23M|}
hb_ot_layout_feature_with_variations_get_lookups:
 1437|   293k|{
 1438|   293k|  static_assert ((OT::FeatureVariations::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_VARIATIONS_INDEX), "");
 1439|   293k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 1440|       |
 1441|   293k|  const OT::Feature &f = g.get_feature_variation (feature_index, variations_index);
 1442|       |
 1443|   293k|  return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 1444|   293k|}
hb_ot_layout_has_substitution:
 1465|  80.1k|{
 1466|  80.1k|  return face->table.GSUB->table->has_data ();
 1467|  80.1k|}
hb_ot_layout_lookup_would_substitute:
 1492|  1.72M|{
 1493|  1.72M|  auto &gsub = face->table.GSUB;
 1494|  1.72M|  if (unlikely (lookup_index >= gsub->lookup_count)) return false;
  ------------------
  |  |  259|  1.72M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.72M]
  |  |  ------------------
  ------------------
 1495|  1.72M|  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, (bool) zero_context);
 1496|       |
 1497|  1.72M|  const OT::SubstLookup& l = gsub->table->get_lookup (lookup_index);
 1498|  1.72M|  auto *accel = gsub->get_accel (lookup_index);
 1499|  1.72M|  return accel && l.would_apply (&c, accel);
  ------------------
  |  Branch (1499:10): [True: 1.72M, False: 7]
  |  Branch (1499:19): [True: 40.7k, False: 1.68M]
  ------------------
 1500|  1.72M|}
_Z29hb_ot_layout_substitute_startP9hb_font_tP11hb_buffer_t:
 1515|   565k|{
 1516|   565k|  _hb_ot_layout_set_glyph_props (font, buffer);
 1517|   565k|}
hb_ot_layout_has_positioning:
 1601|  82.0k|{
 1602|  82.0k|  return face->table.GPOS->table->has_data ();
 1603|  82.0k|}
_Z27hb_ot_layout_position_startP9hb_font_tP11hb_buffer_t:
 1616|   565k|{
 1617|   565k|  GPOS::position_start (font, buffer);
 1618|   565k|}
_Z37hb_ot_layout_position_finish_advancesP9hb_font_tP11hb_buffer_t:
 1631|   565k|{
 1632|   565k|  GPOS::position_finish_advances (font, buffer);
 1633|   565k|}
_Z36hb_ot_layout_position_finish_offsetsP9hb_font_tP11hb_buffer_t:
 1645|   565k|{
 1646|   565k|  GPOS::position_finish_offsets (font, buffer);
 1647|   565k|}
hb_ot_layout_get_size_params:
 1680|  33.3k|{
 1681|  33.3k|  const GPOS &gpos = *face->table.GPOS->table;
 1682|  33.3k|  const hb_tag_t tag = HB_TAG ('s','i','z','e');
  ------------------
  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1683|       |
 1684|  33.3k|  unsigned int num_features = gpos.get_feature_count ();
 1685|  1.02M|  for (unsigned int i = 0; i < num_features; i++)
  ------------------
  |  Branch (1685:28): [True: 990k, False: 33.3k]
  ------------------
 1686|   990k|  {
 1687|   990k|    if (tag == gpos.get_feature_tag (i))
  ------------------
  |  Branch (1687:9): [True: 334, False: 989k]
  ------------------
 1688|    334|    {
 1689|    334|      const OT::Feature &f = gpos.get_feature (i);
 1690|    334|      const OT::FeatureParamsSize &params = f.get_feature_params ().get_size_params (tag);
 1691|       |
 1692|    334|      if (params.designSize)
  ------------------
  |  Branch (1692:11): [True: 13, False: 321]
  ------------------
 1693|     13|      {
 1694|     13|	if (design_size) *design_size = params.designSize;
  ------------------
  |  Branch (1694:6): [True: 13, False: 0]
  ------------------
 1695|     13|	if (subfamily_id) *subfamily_id = params.subfamilyID;
  ------------------
  |  Branch (1695:6): [True: 13, False: 0]
  ------------------
 1696|     13|	if (subfamily_name_id) *subfamily_name_id = params.subfamilyNameID;
  ------------------
  |  Branch (1696:6): [True: 13, False: 0]
  ------------------
 1697|     13|	if (range_start) *range_start = params.rangeStart;
  ------------------
  |  Branch (1697:6): [True: 13, False: 0]
  ------------------
 1698|     13|	if (range_end) *range_end = params.rangeEnd;
  ------------------
  |  Branch (1698:6): [True: 13, False: 0]
  ------------------
 1699|       |
 1700|     13|	return true;
 1701|     13|      }
 1702|    334|    }
 1703|   990k|  }
 1704|       |
 1705|  33.3k|  if (design_size) *design_size = 0;
  ------------------
  |  Branch (1705:7): [True: 33.3k, False: 0]
  ------------------
 1706|  33.3k|  if (subfamily_id) *subfamily_id = 0;
  ------------------
  |  Branch (1706:7): [True: 33.3k, False: 0]
  ------------------
 1707|  33.3k|  if (subfamily_name_id) *subfamily_name_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1707:7): [True: 33.3k, False: 0]
  ------------------
 1708|  33.3k|  if (range_start) *range_start = 0;
  ------------------
  |  Branch (1708:7): [True: 33.3k, False: 0]
  ------------------
 1709|  33.3k|  if (range_end) *range_end = 0;
  ------------------
  |  Branch (1709:7): [True: 33.3k, False: 0]
  ------------------
 1710|       |
 1711|  33.3k|  return false;
 1712|  33.3k|}
hb_ot_layout_feature_get_name_ids:
 1748|  33.3k|{
 1749|  33.3k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 1750|       |
 1751|  33.3k|  hb_tag_t feature_tag = g.get_feature_tag (feature_index);
 1752|  33.3k|  const OT::Feature &f = g.get_feature (feature_index);
 1753|       |
 1754|  33.3k|  const OT::FeatureParams &feature_params = f.get_feature_params ();
 1755|  33.3k|  if (&feature_params != &Null (OT::FeatureParams))
  ------------------
  |  |  124|  33.3k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1755:7): [True: 3, False: 33.3k]
  ------------------
 1756|      3|  {
 1757|      3|    const OT::FeatureParamsStylisticSet& ss_params =
 1758|      3|      feature_params.get_stylistic_set_params (feature_tag);
 1759|      3|    if (&ss_params != &Null (OT::FeatureParamsStylisticSet)) /* ssXX */
  ------------------
  |  |  124|      3|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1759:9): [True: 0, False: 3]
  ------------------
 1760|      0|    {
 1761|      0|      if (label_id) *label_id = ss_params.uiNameID;
  ------------------
  |  Branch (1761:11): [True: 0, False: 0]
  ------------------
 1762|       |      // ssXX features don't have the rest
 1763|      0|      if (tooltip_id) *tooltip_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1763:11): [True: 0, False: 0]
  ------------------
 1764|      0|      if (sample_id) *sample_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1764:11): [True: 0, False: 0]
  ------------------
 1765|      0|      if (num_named_parameters) *num_named_parameters = 0;
  ------------------
  |  Branch (1765:11): [True: 0, False: 0]
  ------------------
 1766|      0|      if (first_param_id) *first_param_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1766:11): [True: 0, False: 0]
  ------------------
 1767|      0|      return true;
 1768|      0|    }
 1769|      3|    const OT::FeatureParamsCharacterVariants& cv_params =
 1770|      3|      feature_params.get_character_variants_params (feature_tag);
 1771|      3|    if (&cv_params != &Null (OT::FeatureParamsCharacterVariants)) /* cvXX */
  ------------------
  |  |  124|      3|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (1771:9): [True: 3, False: 0]
  ------------------
 1772|      3|    {
 1773|      3|      if (label_id) *label_id = cv_params.featUILableNameID;
  ------------------
  |  Branch (1773:11): [True: 3, False: 0]
  ------------------
 1774|      3|      if (tooltip_id) *tooltip_id = cv_params.featUITooltipTextNameID;
  ------------------
  |  Branch (1774:11): [True: 3, False: 0]
  ------------------
 1775|      3|      if (sample_id) *sample_id = cv_params.sampleTextNameID;
  ------------------
  |  Branch (1775:11): [True: 3, False: 0]
  ------------------
 1776|      3|      if (num_named_parameters) *num_named_parameters = cv_params.numNamedParameters;
  ------------------
  |  Branch (1776:11): [True: 3, False: 0]
  ------------------
 1777|      3|      if (first_param_id) *first_param_id = cv_params.firstParamUILabelNameID;
  ------------------
  |  Branch (1777:11): [True: 3, False: 0]
  ------------------
 1778|      3|      return true;
 1779|      3|    }
 1780|      3|  }
 1781|       |
 1782|  33.3k|  if (label_id) *label_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1782:7): [True: 33.3k, False: 0]
  ------------------
 1783|  33.3k|  if (tooltip_id) *tooltip_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1783:7): [True: 33.3k, False: 0]
  ------------------
 1784|  33.3k|  if (sample_id) *sample_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1784:7): [True: 33.3k, False: 0]
  ------------------
 1785|  33.3k|  if (num_named_parameters) *num_named_parameters = 0;
  ------------------
  |  Branch (1785:7): [True: 33.3k, False: 0]
  ------------------
 1786|  33.3k|  if (first_param_id) *first_param_id = HB_OT_NAME_ID_INVALID;
  ------------------
  |  Branch (1786:7): [True: 33.3k, False: 0]
  ------------------
 1787|  33.3k|  return false;
 1788|  33.3k|}
hb_ot_layout_feature_get_characters:
 1815|  33.3k|{
 1816|  33.3k|  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 1817|  33.3k|  return g.get_feature (feature_index)
 1818|  33.3k|	  .get_feature_params ()
 1819|  33.3k|	  .get_character_variants_params(g.get_feature_tag (feature_index))
 1820|  33.3k|	  .get_characters (start_offset, char_count, characters);
 1821|  33.3k|}
_ZNK11hb_ot_map_t10substituteEPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
 2011|   553k|{
 2012|   553k|  GSUBProxy proxy (font->face);
 2013|   553k|  if (buffer->messaging () &&
  ------------------
  |  Branch (2013:7): [True: 0, False: 553k]
  ------------------
 2014|   553k|      !buffer->message (font, "start table GSUB")) return;
  ------------------
  |  Branch (2014:7): [True: 0, False: 0]
  ------------------
 2015|   553k|  apply (proxy, plan, font, buffer);
 2016|   553k|  if (buffer->messaging ())
  ------------------
  |  Branch (2016:7): [True: 0, False: 553k]
  ------------------
 2017|      0|    (void) buffer->message (font, "end table GSUB");
 2018|   553k|}
_ZNK11hb_ot_map_t8positionEPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
 2021|  85.9k|{
 2022|  85.9k|  GPOSProxy proxy (font->face);
 2023|  85.9k|  if (buffer->messaging () &&
  ------------------
  |  Branch (2023:7): [True: 0, False: 85.9k]
  ------------------
 2024|  85.9k|      !buffer->message (font, "start table GPOS")) return;
  ------------------
  |  Branch (2024:7): [True: 0, False: 0]
  ------------------
 2025|  85.9k|  apply (proxy, plan, font, buffer);
 2026|  85.9k|  if (buffer->messaging ())
  ------------------
  |  Branch (2026:7): [True: 0, False: 85.9k]
  ------------------
 2027|      0|    (void) buffer->message (font, "end table GPOS");
 2028|  85.9k|}
_Z30hb_ot_layout_substitute_lookupPN2OT21hb_ot_apply_context_tERKNS_6Layout9GSUB_impl11SubstLookupERKNS_33hb_ot_layout_lookup_accelerator_tE:
 2034|  1.39k|{
 2035|  1.39k|  apply_string<GSUBProxy> (c, lookup, accel);
 2036|  1.39k|}
hb_ot_layout_get_baseline:
 2238|  33.3k|{
 2239|  33.3k|  return font->face->table.BASE->get_baseline (font, baseline_tag, direction, script_tag, language_tag, coord);
 2240|  33.3k|}
hb-ot-layout.cc:_ZL18get_gsubgpos_tableP9hb_face_tj:
  419|  4.86M|{
  420|  4.86M|  switch (table_tag) {
  421|  2.51M|    case HB_OT_TAG_GSUB: return *face->table.GSUB->table;
  ------------------
  |  |   58|  2.51M|#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
  |  |  ------------------
  |  |  |  |  179|  2.51M|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (421:5): [True: 2.51M, False: 2.35M]
  ------------------
  422|  2.35M|    case HB_OT_TAG_GPOS: return *face->table.GPOS->table;
  ------------------
  |  |   64|  2.35M|#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
  |  |  ------------------
  |  |  |  |  179|  2.35M|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (422:5): [True: 2.35M, False: 2.51M]
  ------------------
  423|      0|    default:             return Null (OT::GSUBGPOS);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (423:5): [True: 0, False: 4.86M]
  ------------------
  424|  4.86M|  }
  425|  4.86M|}
hb-ot-layout.cc:_ZL29_hb_ot_layout_set_glyph_propsP9hb_font_tP11hb_buffer_t:
  257|   565k|{
  258|   565k|  _hb_buffer_assert_gsubgpos_vars (buffer);
  259|       |
  260|   565k|  const auto &gdef = *font->face->table.GDEF;
  261|   565k|  unsigned int count = buffer->len;
  262|   565k|  hb_glyph_info_t *info = buffer->info;
  263|  2.21M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (263:28): [True: 1.64M, False: 565k]
  ------------------
  264|  1.64M|  {
  265|  1.64M|    _hb_glyph_info_set_glyph_props (&info[i], gdef.get_glyph_props (info[i].codepoint));
  266|  1.64M|    _hb_glyph_info_clear_lig_props (&info[i]);
  267|  1.64M|  }
  268|   565k|}
_ZN9GSUBProxyC2EP9hb_face_t:
 1838|   553k|    accel (*face->table.GSUB) {}
_ZN9GPOSProxyC2EP9hb_face_t:
 1850|  85.9k|    accel (*face->table.GPOS) {}
_ZNK11hb_ot_map_t5applyI9GSUBProxyEEvRKT_PK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
 1953|   553k|{
 1954|   553k|  const unsigned int table_index = proxy.table_index;
 1955|   553k|  unsigned int i = 0;
 1956|   553k|  OT::hb_ot_apply_context_t c (table_index, font, buffer);
 1957|   553k|  c.set_recurse_func (Proxy::Lookup::template dispatch_recurse_func<OT::hb_ot_apply_context_t>);
 1958|       |
 1959|  1.72M|  for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++)
  ------------------
  |  Branch (1959:38): [True: 1.16M, False: 553k]
  ------------------
 1960|  1.16M|  {
 1961|  1.16M|    const stage_map_t *stage = &stages[table_index][stage_index];
 1962|  1.61M|    for (; i < stage->last_lookup; i++)
  ------------------
  |  Branch (1962:12): [True: 444k, False: 1.16M]
  ------------------
 1963|   444k|    {
 1964|   444k|      auto &lookup = lookups[table_index][i];
 1965|       |
 1966|   444k|      unsigned int lookup_index = lookup.index;
 1967|       |
 1968|   444k|      auto *accel = proxy.accel.get_accel (lookup_index);
 1969|   444k|      if (unlikely (!accel)) continue;
  ------------------
  |  |  259|   444k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 510, False: 443k]
  |  |  ------------------
  ------------------
 1970|       |
 1971|   443k|      if (buffer->messaging () &&
  ------------------
  |  Branch (1971:11): [True: 0, False: 443k]
  ------------------
 1972|   443k|	  !buffer->message (font, "start lookup %u feature '%c%c%c%c'", lookup_index, HB_UNTAG (lookup.feature_tag))) continue;
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
  |  Branch (1972:4): [True: 0, False: 0]
  ------------------
 1973|       |
 1974|       |      /* c.digest is a digest of all the current glyphs in the buffer
 1975|       |       * (plus some past glyphs).
 1976|       |       *
 1977|       |       * Only try applying the lookup if there is any overlap. */
 1978|   443k|      if (accel->digest.may_have (c.digest))
  ------------------
  |  Branch (1978:11): [True: 127k, False: 316k]
  ------------------
 1979|   127k|      {
 1980|   127k|	c.set_lookup_index (lookup_index);
 1981|   127k|	c.set_lookup_mask (lookup.mask, false);
 1982|   127k|	c.set_auto_zwj (lookup.auto_zwj, false);
 1983|   127k|	c.set_auto_zwnj (lookup.auto_zwnj, false);
 1984|   127k|	c.set_random (lookup.random);
 1985|   127k|	c.set_per_syllable (lookup.per_syllable, false);
 1986|       |	/* apply_string's set_lookup_props initializes the iterators. */
 1987|       |
 1988|   127k|	apply_string<Proxy> (&c,
 1989|   127k|			     proxy.accel.table->get_lookup (lookup_index),
 1990|   127k|			     *accel);
 1991|   127k|      }
 1992|   316k|      else if (buffer->messaging ())
  ------------------
  |  Branch (1992:16): [True: 0, False: 316k]
  ------------------
 1993|      0|	(void) buffer->message (font, "skipped lookup %u feature '%c%c%c%c' because no glyph matches", lookup_index, HB_UNTAG (lookup.feature_tag));
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
 1994|       |
 1995|   443k|      if (buffer->messaging ())
  ------------------
  |  Branch (1995:11): [True: 0, False: 443k]
  ------------------
 1996|      0|	(void) buffer->message (font, "end lookup %u feature '%c%c%c%c'", lookup_index, HB_UNTAG (lookup.feature_tag));
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
 1997|   443k|    }
 1998|       |
 1999|  1.16M|    if (stage->pause_func)
  ------------------
  |  Branch (1999:9): [True: 28.6k, False: 1.13M]
  ------------------
 2000|  28.6k|    {
 2001|  28.6k|      if (stage->pause_func (plan, font, buffer))
  ------------------
  |  Branch (2001:11): [True: 1.18k, False: 27.4k]
  ------------------
 2002|  1.18k|      {
 2003|       |	/* Refresh working buffer digest since buffer changed. */
 2004|  1.18k|	c.digest = buffer->digest ();
 2005|  1.18k|      }
 2006|  28.6k|    }
 2007|  1.16M|  }
 2008|   553k|}
_ZNK11hb_ot_map_t5applyI9GPOSProxyEEvRKT_PK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
 1953|  85.9k|{
 1954|  85.9k|  const unsigned int table_index = proxy.table_index;
 1955|  85.9k|  unsigned int i = 0;
 1956|  85.9k|  OT::hb_ot_apply_context_t c (table_index, font, buffer);
 1957|  85.9k|  c.set_recurse_func (Proxy::Lookup::template dispatch_recurse_func<OT::hb_ot_apply_context_t>);
 1958|       |
 1959|   170k|  for (unsigned int stage_index = 0; stage_index < stages[table_index].length; stage_index++)
  ------------------
  |  Branch (1959:38): [True: 84.9k, False: 85.9k]
  ------------------
 1960|  84.9k|  {
 1961|  84.9k|    const stage_map_t *stage = &stages[table_index][stage_index];
 1962|   354k|    for (; i < stage->last_lookup; i++)
  ------------------
  |  Branch (1962:12): [True: 269k, False: 84.9k]
  ------------------
 1963|   269k|    {
 1964|   269k|      auto &lookup = lookups[table_index][i];
 1965|       |
 1966|   269k|      unsigned int lookup_index = lookup.index;
 1967|       |
 1968|   269k|      auto *accel = proxy.accel.get_accel (lookup_index);
 1969|   269k|      if (unlikely (!accel)) continue;
  ------------------
  |  |  259|   269k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 319, False: 269k]
  |  |  ------------------
  ------------------
 1970|       |
 1971|   269k|      if (buffer->messaging () &&
  ------------------
  |  Branch (1971:11): [True: 0, False: 269k]
  ------------------
 1972|   269k|	  !buffer->message (font, "start lookup %u feature '%c%c%c%c'", lookup_index, HB_UNTAG (lookup.feature_tag))) continue;
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
  |  Branch (1972:4): [True: 0, False: 0]
  ------------------
 1973|       |
 1974|       |      /* c.digest is a digest of all the current glyphs in the buffer
 1975|       |       * (plus some past glyphs).
 1976|       |       *
 1977|       |       * Only try applying the lookup if there is any overlap. */
 1978|   269k|      if (accel->digest.may_have (c.digest))
  ------------------
  |  Branch (1978:11): [True: 45.0k, False: 224k]
  ------------------
 1979|  45.0k|      {
 1980|  45.0k|	c.set_lookup_index (lookup_index);
 1981|  45.0k|	c.set_lookup_mask (lookup.mask, false);
 1982|  45.0k|	c.set_auto_zwj (lookup.auto_zwj, false);
 1983|  45.0k|	c.set_auto_zwnj (lookup.auto_zwnj, false);
 1984|  45.0k|	c.set_random (lookup.random);
 1985|  45.0k|	c.set_per_syllable (lookup.per_syllable, false);
 1986|       |	/* apply_string's set_lookup_props initializes the iterators. */
 1987|       |
 1988|  45.0k|	apply_string<Proxy> (&c,
 1989|  45.0k|			     proxy.accel.table->get_lookup (lookup_index),
 1990|  45.0k|			     *accel);
 1991|  45.0k|      }
 1992|   224k|      else if (buffer->messaging ())
  ------------------
  |  Branch (1992:16): [True: 0, False: 224k]
  ------------------
 1993|      0|	(void) buffer->message (font, "skipped lookup %u feature '%c%c%c%c' because no glyph matches", lookup_index, HB_UNTAG (lookup.feature_tag));
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
 1994|       |
 1995|   269k|      if (buffer->messaging ())
  ------------------
  |  Branch (1995:11): [True: 0, False: 269k]
  ------------------
 1996|      0|	(void) buffer->message (font, "end lookup %u feature '%c%c%c%c'", lookup_index, HB_UNTAG (lookup.feature_tag));
  ------------------
  |  |  190|      0|#define HB_UNTAG(tag)   (uint8_t)(((tag)>>24)&0xFF), (uint8_t)(((tag)>>16)&0xFF), (uint8_t)(((tag)>>8)&0xFF), (uint8_t)((tag)&0xFF)
  ------------------
 1997|   269k|    }
 1998|       |
 1999|  84.9k|    if (stage->pause_func)
  ------------------
  |  Branch (1999:9): [True: 0, False: 84.9k]
  ------------------
 2000|      0|    {
 2001|      0|      if (stage->pause_func (plan, font, buffer))
  ------------------
  |  Branch (2001:11): [True: 0, False: 0]
  ------------------
 2002|      0|      {
 2003|       |	/* Refresh working buffer digest since buffer changed. */
 2004|      0|	c.digest = buffer->digest ();
 2005|      0|      }
 2006|      0|    }
 2007|  84.9k|  }
 2008|  85.9k|}
hb-ot-layout.cc:_ZL12apply_stringI9GPOSProxyEbPN2OT21hb_ot_apply_context_tERKNT_6LookupERKNS1_33hb_ot_layout_lookup_accelerator_tE:
 1914|  45.0k|{
 1915|  45.0k|  hb_buffer_t *buffer = c->buffer;
 1916|  45.0k|  unsigned subtable_count = lookup.get_subtable_count ();
 1917|       |
 1918|  45.0k|  if (unlikely (!buffer->len || !c->lookup_mask))
  ------------------
  |  |  259|  90.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 45.0k]
  |  |  |  Branch (259:47): [True: 0, False: 45.0k]
  |  |  |  Branch (259:47): [True: 0, False: 45.0k]
  |  |  ------------------
  ------------------
 1919|      0|    return false;
 1920|       |
 1921|  45.0k|  bool ret = false;
 1922|       |
 1923|  45.0k|  c->set_lookup_props (lookup.get_props ());
 1924|       |
 1925|  45.0k|  if (likely (!lookup.is_reverse ()))
  ------------------
  |  |  258|  45.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 45.0k, False: 0]
  |  |  ------------------
  ------------------
 1926|  45.0k|  {
 1927|       |    /* in/out forward substitution/positioning */
 1928|  45.0k|    if (!Proxy::always_inplace)
  ------------------
  |  Branch (1928:9): [Folded - Ignored]
  ------------------
 1929|      0|      buffer->clear_output ();
 1930|       |
 1931|  45.0k|    buffer->idx = 0;
 1932|  45.0k|    ret = apply_forward (c, accel, subtable_count);
 1933|       |
 1934|  45.0k|    if (!Proxy::always_inplace)
  ------------------
  |  Branch (1934:9): [Folded - Ignored]
  ------------------
 1935|      0|      buffer->sync ();
 1936|  45.0k|  }
 1937|      0|  else
 1938|      0|  {
 1939|       |    /* in-place backward substitution/positioning */
 1940|      0|    assert (!buffer->have_output);
 1941|      0|    buffer->idx = buffer->len - 1;
 1942|      0|    ret = apply_backward (c, accel, subtable_count);
 1943|      0|  }
 1944|       |
 1945|      0|  return ret;
 1946|  45.0k|}
hb-ot-layout.cc:_ZL13apply_forwardPN2OT21hb_ot_apply_context_tERKNS_33hb_ot_layout_lookup_accelerator_tEj:
 1860|   168k|{
 1861|   168k|  bool use_cache = accel.cache_enter (c);
 1862|       |
 1863|   168k|  bool ret = false;
 1864|   168k|  hb_buffer_t *buffer = c->buffer;
 1865|  28.7M|  while (buffer->idx < buffer->len && buffer->successful)
  ------------------
  |  Branch (1865:10): [True: 28.5M, False: 167k]
  |  Branch (1865:39): [True: 28.5M, False: 1.31k]
  ------------------
 1866|  28.5M|  {
 1867|  28.5M|    bool applied = false;
 1868|  28.5M|    if (accel.digest.may_have (buffer->cur().codepoint) &&
  ------------------
  |  Branch (1868:9): [True: 21.8M, False: 6.66M]
  ------------------
 1869|  28.5M|	(buffer->cur().mask & c->lookup_mask) &&
  ------------------
  |  Branch (1869:2): [True: 15.8M, False: 5.97M]
  ------------------
 1870|  28.5M|	c->check_glyph_property (&buffer->cur(), c->lookup_props))
  ------------------
  |  Branch (1870:2): [True: 14.8M, False: 1.07M]
  ------------------
 1871|  14.8M|     {
 1872|  14.8M|       applied = accel.apply (c, subtable_count, use_cache);
 1873|  14.8M|     }
 1874|       |
 1875|  28.5M|    if (applied)
  ------------------
  |  Branch (1875:9): [True: 3.13M, False: 25.3M]
  ------------------
 1876|  3.13M|      ret = true;
 1877|  25.3M|    else
 1878|  25.3M|      (void) buffer->next_glyph ();
 1879|  28.5M|  }
 1880|       |
 1881|   168k|  if (use_cache)
  ------------------
  |  Branch (1881:7): [True: 8.70k, False: 160k]
  ------------------
 1882|  8.70k|    accel.cache_leave (c);
 1883|       |
 1884|   168k|  return ret;
 1885|   168k|}
hb-ot-layout.cc:_ZL14apply_backwardPN2OT21hb_ot_apply_context_tERKNS_33hb_ot_layout_lookup_accelerator_tEj:
 1891|  4.55k|{
 1892|  4.55k|  bool ret = false;
 1893|  4.55k|  hb_buffer_t *buffer = c->buffer;
 1894|  4.55k|  do
 1895|  1.13M|  {
 1896|  1.13M|    if (accel.digest.may_have (buffer->cur().codepoint) &&
  ------------------
  |  Branch (1896:9): [True: 1.00M, False: 130k]
  ------------------
 1897|  1.13M|	(buffer->cur().mask & c->lookup_mask) &&
  ------------------
  |  Branch (1897:2): [True: 851k, False: 155k]
  ------------------
 1898|  1.13M|	c->check_glyph_property (&buffer->cur(), c->lookup_props))
  ------------------
  |  Branch (1898:2): [True: 842k, False: 9.02k]
  ------------------
 1899|   842k|      ret |= accel.apply (c, subtable_count, false);
 1900|       |
 1901|       |    /* The reverse lookup doesn't "advance" cursor (for good reason). */
 1902|  1.13M|    buffer->idx--;
 1903|       |
 1904|  1.13M|  }
 1905|  1.13M|  while ((int) buffer->idx >= 0);
  ------------------
  |  Branch (1905:10): [True: 1.13M, False: 4.55k]
  ------------------
 1906|  4.55k|  return ret;
 1907|  4.55k|}
hb-ot-layout.cc:_ZL12apply_stringI9GSUBProxyEbPN2OT21hb_ot_apply_context_tERKNT_6LookupERKNS1_33hb_ot_layout_lookup_accelerator_tE:
 1914|   128k|{
 1915|   128k|  hb_buffer_t *buffer = c->buffer;
 1916|   128k|  unsigned subtable_count = lookup.get_subtable_count ();
 1917|       |
 1918|   128k|  if (unlikely (!buffer->len || !c->lookup_mask))
  ------------------
  |  |  259|   257k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 483, False: 128k]
  |  |  |  Branch (259:47): [True: 483, False: 128k]
  |  |  |  Branch (259:47): [True: 0, False: 128k]
  |  |  ------------------
  ------------------
 1919|    483|    return false;
 1920|       |
 1921|   128k|  bool ret = false;
 1922|       |
 1923|   128k|  c->set_lookup_props (lookup.get_props ());
 1924|       |
 1925|   128k|  if (likely (!lookup.is_reverse ()))
  ------------------
  |  |  258|   128k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 123k, False: 4.55k]
  |  |  ------------------
  ------------------
 1926|   123k|  {
 1927|       |    /* in/out forward substitution/positioning */
 1928|   123k|    if (!Proxy::always_inplace)
  ------------------
  |  Branch (1928:9): [Folded - Ignored]
  ------------------
 1929|   123k|      buffer->clear_output ();
 1930|       |
 1931|   123k|    buffer->idx = 0;
 1932|   123k|    ret = apply_forward (c, accel, subtable_count);
 1933|       |
 1934|   123k|    if (!Proxy::always_inplace)
  ------------------
  |  Branch (1934:9): [Folded - Ignored]
  ------------------
 1935|   123k|      buffer->sync ();
 1936|   123k|  }
 1937|  4.55k|  else
 1938|  4.55k|  {
 1939|       |    /* in-place backward substitution/positioning */
 1940|  4.55k|    assert (!buffer->have_output);
 1941|      0|    buffer->idx = buffer->len - 1;
 1942|  4.55k|    ret = apply_backward (c, accel, subtable_count);
 1943|  4.55k|  }
 1944|       |
 1945|      0|  return ret;
 1946|   128k|}

hb-aat-layout.cc:_ZL30_hb_glyph_info_set_glyph_propsP15hb_glyph_info_tj:
  486|  62.7k|{
  487|  62.7k|  info->glyph_props() = props;
  ------------------
  |  |  145|  62.7k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  488|  62.7k|}
hb-aat-layout.cc:_ZL30_hb_glyph_info_get_glyph_propsPK15hb_glyph_info_t:
  492|  28.1M|{
  493|  28.1M|  return info->glyph_props();
  ------------------
  |  |  145|  28.1M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  494|  28.1M|}
hb-aat-layout.cc:_ZL50_hb_glyph_info_is_default_ignorable_and_not_hiddenPK15hb_glyph_info_t:
  316|  16.1M|{
  317|  16.1M|  return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_HIDDEN))
  ------------------
  |  |  142|  16.1M|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (317:10): [True: 995k, False: 15.1M]
  ------------------
  318|  16.1M|	  == UPROPS_MASK_IGNORABLE) &&
  319|  16.1M|	 !_hb_glyph_info_substituted (info);
  ------------------
  |  Branch (319:3): [True: 935k, False: 60.3k]
  ------------------
  320|  16.1M|}
hb-aat-layout.cc:_ZL26_hb_glyph_info_substitutedPK15hb_glyph_info_t:
  516|   995k|{
  517|   995k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
  ------------------
  |  |  145|   995k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  518|   995k|}
hb-aat-layout.cc:_ZL22_hb_glyph_info_is_zwnjPK15hb_glyph_info_t:
  366|   637k|{
  367|   637k|  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWNJ);
  ------------------
  |  |  142|   422k|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (367:10): [True: 422k, False: 214k]
  |  Branch (367:53): [True: 1.40k, False: 421k]
  ------------------
  368|   637k|}
hb-aat-layout.cc:_ZL32_hb_glyph_info_is_unicode_formatPK15hb_glyph_info_t:
  360|  1.26M|{
  361|  1.26M|  return _hb_glyph_info_get_general_category (info) ==
  362|  1.26M|	 HB_UNICODE_GENERAL_CATEGORY_FORMAT;
  363|  1.26M|}
hb-aat-layout.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|  1.26M|{
  262|  1.26M|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|  1.26M|#define unicode_props()		var2.u16[0]
  ------------------
  263|  1.26M|}
hb-aat-layout.cc:_ZL21_hb_glyph_info_is_zwjPK15hb_glyph_info_t:
  371|   629k|{
  372|   629k|  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWJ);
  ------------------
  |  |  142|   417k|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (372:10): [True: 417k, False: 211k]
  |  Branch (372:53): [True: 3.17k, False: 414k]
  ------------------
  373|   629k|}
hb-ot-layout.cc:_ZL30_hb_glyph_info_get_glyph_propsPK15hb_glyph_info_t:
  492|  49.8M|{
  493|  49.8M|  return info->glyph_props();
  ------------------
  |  |  145|  49.8M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  494|  49.8M|}
hb-ot-layout.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|   447k|{
  262|   447k|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|   447k|#define unicode_props()		var2.u16[0]
  ------------------
  263|   447k|}
hb-ot-layout.cc:_ZL31_hb_buffer_assert_gsubgpos_varsP11hb_buffer_t:
  600|  1.13M|{
  601|  1.13M|  HB_BUFFER_ASSERT_VAR (buffer, glyph_props);
  ------------------
  |  |  672|  1.13M|#define HB_BUFFER_ASSERT_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, assert_var,       var ())
  |  |  ------------------
  |  |  |  |  667|  1.13M|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.13M|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  602|  1.13M|  HB_BUFFER_ASSERT_VAR (buffer, lig_props);
  ------------------
  |  |  672|  1.13M|#define HB_BUFFER_ASSERT_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, assert_var,       var ())
  |  |  ------------------
  |  |  |  |  667|  1.13M|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.13M|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  603|  1.13M|}
hb-ot-layout.cc:_ZL30_hb_glyph_info_set_glyph_propsP15hb_glyph_info_tj:
  486|  34.7M|{
  487|  34.7M|  info->glyph_props() = props;
  ------------------
  |  |  145|  34.7M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  488|  34.7M|}
hb-ot-layout.cc:_ZL30_hb_glyph_info_clear_lig_propsP15hb_glyph_info_t:
  414|  1.64M|{
  415|  1.64M|  info->lig_props() = 0;
  ------------------
  |  |  146|  1.64M|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  416|  1.64M|}
hb-ot-layout.cc:_ZL26_hb_glyph_info_is_ligaturePK15hb_glyph_info_t:
  504|  1.31M|{
  505|  1.31M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE);
  ------------------
  |  |  145|  1.31M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  506|  1.31M|}
hb-ot-layout.cc:_ZL25_hb_glyph_info_get_lig_idPK15hb_glyph_info_t:
  444|  21.2M|{
  445|  21.2M|  return info->lig_props() >> 5;
  ------------------
  |  |  146|  21.2M|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  446|  21.2M|}
hb-ot-layout.cc:_ZL42_hb_glyph_info_set_lig_props_for_componentP15hb_glyph_info_tj:
  438|  29.4M|{
  439|  29.4M|  _hb_glyph_info_set_lig_props_for_mark (info, 0, comp);
  440|  29.4M|}
hb-ot-layout.cc:_ZL37_hb_glyph_info_set_lig_props_for_markP15hb_glyph_info_tjj:
  432|  34.7M|{
  433|  34.7M|  info->lig_props() = (lig_id << 5) | (lig_comp & 0x0F);
  ------------------
  |  |  146|  34.7M|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  434|  34.7M|}
hb-ot-layout.cc:_ZL27_hb_glyph_info_get_lig_compPK15hb_glyph_info_t:
  456|  20.1M|{
  457|  20.1M|  if (_hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (457:7): [True: 1.50M, False: 18.6M]
  ------------------
  458|  1.50M|    return 0;
  459|  18.6M|  else
  460|  18.6M|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|  18.6M|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  461|  20.1M|}
hb-ot-layout.cc:_ZL31_hb_glyph_info_ligated_internalPK15hb_glyph_info_t:
  450|  20.2M|{
  451|  20.2M|  return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  146|  20.2M|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
                return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  418|  20.2M|#define IS_LIG_BASE 0x10
  ------------------
  452|  20.2M|}
hb-ot-layout.cc:_ZL32_hb_glyph_info_get_lig_num_compsPK15hb_glyph_info_t:
  465|  5.89M|{
  466|  5.89M|  if ((info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) &&
  ------------------
  |  |  145|  5.89M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  |  Branch (466:7): [True: 139k, False: 5.75M]
  ------------------
  467|  5.89M|      _hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (467:7): [True: 71.5k, False: 68.3k]
  ------------------
  468|  71.5k|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|  71.5k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  469|  5.81M|  else
  470|  5.81M|    return 1;
  471|  5.89M|}
hb-ot-layout.cc:_ZL28_hb_glyph_info_is_base_glyphPK15hb_glyph_info_t:
  498|   486k|{
  499|   486k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH);
  ------------------
  |  |  145|   486k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  500|   486k|}
hb-ot-layout.cc:_ZL22_hb_glyph_info_is_markPK15hb_glyph_info_t:
  510|  2.08M|{
  511|  2.08M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
  ------------------
  |  |  145|  2.08M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  512|  2.08M|}
hb-ot-layout.cc:_ZL19_hb_allocate_lig_idP11hb_buffer_t:
  475|   505k|{
  476|   505k|  uint8_t lig_id = buffer->next_serial () & 0x07;
  477|   505k|  if (unlikely (!lig_id))
  ------------------
  |  |  259|   505k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 58.3k, False: 447k]
  |  |  ------------------
  ------------------
  478|  58.3k|    lig_id = _hb_allocate_lig_id (buffer); /* in case of overflow */
  479|   505k|  return lig_id;
  480|   505k|}
hb-ot-layout.cc:_ZL41_hb_glyph_info_set_lig_props_for_ligatureP15hb_glyph_info_tjj:
  424|   447k|{
  425|   447k|  info->lig_props() = (lig_id << 5) | IS_LIG_BASE | (lig_num_comps & 0x0F);
  ------------------
  |  |  146|   447k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
                info->lig_props() = (lig_id << 5) | IS_LIG_BASE | (lig_num_comps & 0x0F);
  ------------------
  |  |  418|   447k|#define IS_LIG_BASE 0x10
  ------------------
  426|   447k|}
hb-ot-layout.cc:_ZL35_hb_glyph_info_set_general_categoryP15hb_glyph_info_t29hb_unicode_general_category_t:
  254|  5.66k|{
  255|       |  /* Clears top-byte. */
  256|  5.66k|  info->unicode_props() = (unsigned int) gen_cat | (info->unicode_props() & (0xFF & ~UPROPS_MASK_GEN_CAT));
  ------------------
  |  |  142|  5.66k|#define unicode_props()		var2.u16[0]
  ------------------
                info->unicode_props() = (unsigned int) gen_cat | (info->unicode_props() & (0xFF & ~UPROPS_MASK_GEN_CAT));
  ------------------
  |  |  142|  5.66k|#define unicode_props()		var2.u16[0]
  ------------------
  257|  5.66k|}
hb-ot-layout.cc:_ZL25_hb_glyph_info_multipliedPK15hb_glyph_info_t:
  528|  2.19M|{
  529|  2.19M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
  ------------------
  |  |  145|  2.19M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  530|  2.19M|}
hb-ot-shape.cc:_ZL32_hb_buffer_allocate_unicode_varsP11hb_buffer_t:
  568|   565k|{
  569|   565k|  HB_BUFFER_ALLOCATE_VAR (buffer, unicode_props);
  ------------------
  |  |  669|   565k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  570|   565k|}
hb-ot-shape.cc:_ZL32_hb_glyph_info_set_unicode_propsP15hb_glyph_info_tP11hb_buffer_t:
  205|  1.64M|{
  206|  1.64M|  hb_unicode_funcs_t *unicode = buffer->unicode;
  207|  1.64M|  unsigned int u = info->codepoint;
  208|  1.64M|  unsigned int gen_cat = (unsigned int) unicode->general_category (u);
  209|  1.64M|  unsigned int props = gen_cat;
  210|       |
  211|  1.64M|  if (u >= 0x80u)
  ------------------
  |  Branch (211:7): [True: 403k, False: 1.24M]
  ------------------
  212|   403k|  {
  213|   403k|    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII;
  214|       |
  215|   403k|    if (unlikely (unicode->is_default_ignorable (u)))
  ------------------
  |  |  259|   403k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.63k, False: 397k]
  |  |  ------------------
  ------------------
  216|  6.63k|    {
  217|  6.63k|      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
  218|  6.63k|      props |=  UPROPS_MASK_IGNORABLE;
  219|  6.63k|      if (u == 0x200Cu) props |= UPROPS_MASK_Cf_ZWNJ;
  ------------------
  |  Branch (219:11): [True: 1.45k, False: 5.18k]
  ------------------
  220|  5.18k|      else if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;
  ------------------
  |  Branch (220:16): [True: 2.17k, False: 3.01k]
  ------------------
  221|       |      /* Mongolian Free Variation Selectors need to be remembered
  222|       |       * because although we need to hide them like default-ignorables,
  223|       |       * they need to non-ignorable during shaping.  This is similar to
  224|       |       * what we do for joiners in Indic-like shapers, but since the
  225|       |       * FVSes are GC=Mn, we have use a separate bit to remember them.
  226|       |       * Fixes:
  227|       |       * https://github.com/harfbuzz/harfbuzz/issues/234 */
  228|  3.01k|      else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu))) props |= UPROPS_MASK_HIDDEN;
  ------------------
  |  |  259|  3.01k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 226, False: 2.78k]
  |  |  ------------------
  ------------------
  229|       |      /* TAG characters need similar treatment. Fixes:
  230|       |       * https://github.com/harfbuzz/harfbuzz/issues/463 */
  231|  2.78k|      else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xE0020u, 0xE007Fu))) props |= UPROPS_MASK_HIDDEN;
  ------------------
  |  |  259|  2.78k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 100, False: 2.68k]
  |  |  ------------------
  ------------------
  232|       |      /* COMBINING GRAPHEME JOINER should not be skipped; at least some times.
  233|       |       * https://github.com/harfbuzz/harfbuzz/issues/554 */
  234|  2.68k|      else if (unlikely (u == 0x034Fu))
  ------------------
  |  |  259|  2.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 313, False: 2.37k]
  |  |  ------------------
  ------------------
  235|    313|      {
  236|    313|	buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_CGJ;
  237|    313|	props |= UPROPS_MASK_HIDDEN;
  238|    313|      }
  239|  6.63k|    }
  240|       |
  241|   403k|    if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (gen_cat)))
  ------------------
  |  |  259|   807k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 24.5k, False: 379k]
  |  |  |  Branch (259:47): [True: 403k, False: 0]
  |  |  ------------------
  ------------------
  242|  24.5k|    {
  243|  24.5k|      props |= UPROPS_MASK_CONTINUATION;
  244|  24.5k|      props |= unicode->modified_combining_class (u)<<8;
  245|  24.5k|    }
  246|   403k|  }
  247|       |
  248|  1.64M|  info->unicode_props() = props;
  ------------------
  |  |  142|  1.64M|#define unicode_props()		var2.u16[0]
  ------------------
  249|  1.64M|}
hb-ot-shape.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|  4.88M|{
  262|  4.88M|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|  4.88M|#define unicode_props()		var2.u16[0]
  ------------------
  263|  4.88M|}
hb-ot-shape.cc:_ZL31_hb_glyph_info_set_continuationP15hb_glyph_info_t:
  329|  2.34k|{
  330|  2.34k|  info->unicode_props() |= UPROPS_MASK_CONTINUATION;
  ------------------
  |  |  142|  2.34k|#define unicode_props()		var2.u16[0]
  ------------------
  331|  2.34k|}
hb-ot-shape.cc:_ZL30_hb_glyph_info_is_continuationPK15hb_glyph_info_t:
  339|   481k|{
  340|   481k|  return info->unicode_props() & UPROPS_MASK_CONTINUATION;
  ------------------
  |  |  142|   481k|#define unicode_props()		var2.u16[0]
  ------------------
  341|   481k|}
hb-ot-shape.cc:_ZL21_hb_glyph_info_is_zwjPK15hb_glyph_info_t:
  371|  1.64M|{
  372|  1.64M|  return _hb_glyph_info_is_unicode_format (info) && (info->unicode_props() & UPROPS_MASK_Cf_ZWJ);
  ------------------
  |  |  142|  4.63k|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (372:10): [True: 4.63k, False: 1.63M]
  |  Branch (372:53): [True: 2.17k, False: 2.46k]
  ------------------
  373|  1.64M|}
hb-ot-shape.cc:_ZL32_hb_glyph_info_is_unicode_formatPK15hb_glyph_info_t:
  360|  1.64M|{
  361|  1.64M|  return _hb_glyph_info_get_general_category (info) ==
  362|  1.64M|	 HB_UNICODE_GENERAL_CATEGORY_FORMAT;
  363|  1.64M|}
hb-ot-shape.cc:_ZL23_hb_grapheme_group_funcRK15hb_glyph_info_tS1_:
  346|   481k|{ return _hb_glyph_info_is_continuation (&b); }
hb-ot-shape.cc:_ZL33_hb_buffer_allocate_gsubgpos_varsP11hb_buffer_t:
  586|   565k|{
  587|   565k|  HB_BUFFER_ALLOCATE_VAR (buffer, glyph_props);
  ------------------
  |  |  669|   565k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  588|   565k|  HB_BUFFER_ALLOCATE_VAR (buffer, lig_props);
  ------------------
  |  |  669|   565k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  589|   565k|}
hb-ot-shape.cc:_ZL35_hb_glyph_info_is_default_ignorablePK15hb_glyph_info_t:
  310|  3.78M|{
  311|  3.78M|  return (info->unicode_props() & UPROPS_MASK_IGNORABLE) &&
  ------------------
  |  |  142|  3.78M|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (311:10): [True: 390k, False: 3.39M]
  ------------------
  312|  3.78M|	 !_hb_glyph_info_substituted (info);
  ------------------
  |  Branch (312:3): [True: 176k, False: 213k]
  ------------------
  313|  3.78M|}
hb-ot-shape.cc:_ZL26_hb_glyph_info_substitutedPK15hb_glyph_info_t:
  516|   390k|{
  517|   390k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
  ------------------
  |  |  145|   390k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  518|   390k|}
hb-ot-shape.cc:_ZL30_hb_glyph_info_set_glyph_propsP15hb_glyph_info_tj:
  486|  1.59M|{
  487|  1.59M|  info->glyph_props() = props;
  ------------------
  |  |  145|  1.59M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  488|  1.59M|}
hb-ot-shape.cc:_ZL22_hb_glyph_info_is_markPK15hb_glyph_info_t:
  510|  23.7M|{
  511|  23.7M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK);
  ------------------
  |  |  145|  23.7M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  512|  23.7M|}
hb-ot-shape.cc:_ZL35_hb_buffer_deallocate_gsubgpos_varsP11hb_buffer_t:
  593|   565k|{
  594|   565k|  HB_BUFFER_DEALLOCATE_VAR (buffer, lig_props);
  ------------------
  |  |  671|   565k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  595|   565k|  HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_props);
  ------------------
  |  |  671|   565k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  596|   565k|}
hb-ot-shape.cc:_ZL34_hb_buffer_deallocate_unicode_varsP11hb_buffer_t:
  574|   565k|{
  575|   565k|  HB_BUFFER_DEALLOCATE_VAR (buffer, unicode_props);
  ------------------
  |  |  671|   565k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  576|   565k|}
hb-ot-shaper-arabic.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|  28.3k|{
  262|  28.3k|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|  28.3k|#define unicode_props()		var2.u16[0]
  ------------------
  263|  28.3k|}
hb-ot-shaper-arabic.cc:_ZL25_hb_glyph_info_multipliedPK15hb_glyph_info_t:
  528|  6.35k|{
  529|  6.35k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
  ------------------
  |  |  145|  6.35k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  530|  6.35k|}
hb-ot-shaper-arabic.cc:_ZL27_hb_glyph_info_get_lig_compPK15hb_glyph_info_t:
  456|  6.07k|{
  457|  6.07k|  if (_hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (457:7): [True: 0, False: 6.07k]
  ------------------
  458|      0|    return 0;
  459|  6.07k|  else
  460|  6.07k|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|  6.07k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  461|  6.07k|}
hb-ot-shaper-arabic.cc:_ZL31_hb_glyph_info_ligated_internalPK15hb_glyph_info_t:
  450|  6.07k|{
  451|  6.07k|  return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  146|  6.07k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
                return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  418|  6.07k|#define IS_LIG_BASE 0x10
  ------------------
  452|  6.07k|}
hb-ot-shaper-arabic.cc:_ZL35_hb_glyph_info_is_default_ignorablePK15hb_glyph_info_t:
  310|    188|{
  311|    188|  return (info->unicode_props() & UPROPS_MASK_IGNORABLE) &&
  ------------------
  |  |  142|    188|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (311:10): [True: 0, False: 188]
  ------------------
  312|    188|	 !_hb_glyph_info_substituted (info);
  ------------------
  |  Branch (312:3): [True: 0, False: 0]
  ------------------
  313|    188|}
hb-ot-shaper-arabic.cc:_ZL43_hb_glyph_info_get_modified_combining_classPK15hb_glyph_info_t:
  280|  4.10k|{
  281|  4.10k|  return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
  ------------------
  |  |  142|  4.10k|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (281:10): [True: 4.10k, False: 0]
  ------------------
  282|  4.10k|}
hb-ot-shaper-arabic.cc:_ZL30_hb_glyph_info_is_unicode_markPK15hb_glyph_info_t:
  267|  4.25k|{
  268|  4.25k|  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  355|  4.25k|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|  4.25k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 4.25k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  356|  4.25k|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  4.25k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  4.25k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  4.25k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  4.25k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  4.25k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  4.25k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|  4.25k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  4.25k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|  4.25k|}
hb-ot-shaper-arabic.cc:_ZL43_hb_glyph_info_set_modified_combining_classP15hb_glyph_info_tj:
  273|    149|{
  274|    149|  if (unlikely (!_hb_glyph_info_is_unicode_mark (info)))
  ------------------
  |  |  259|    149|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 149]
  |  |  ------------------
  ------------------
  275|      0|    return;
  276|    149|  info->unicode_props() = (modified_class<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|    149|#define unicode_props()		var2.u16[0]
  ------------------
                info->unicode_props() = (modified_class<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|    149|#define unicode_props()		var2.u16[0]
  ------------------
  277|    149|}
hb-ot-shaper-hebrew.cc:_ZL43_hb_glyph_info_get_modified_combining_classPK15hb_glyph_info_t:
  280|    408|{
  281|    408|  return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
  ------------------
  |  |  142|    408|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (281:10): [True: 408, False: 0]
  ------------------
  282|    408|}
hb-ot-shaper-hebrew.cc:_ZL30_hb_glyph_info_is_unicode_markPK15hb_glyph_info_t:
  267|    408|{
  268|    408|  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  355|    408|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|    408|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 408, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  356|    408|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    408|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    408|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    408|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    408|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    408|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    408|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|    408|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    408|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|    408|}
hb-ot-shaper-indic.cc:_ZL17_hb_next_syllableP11hb_buffer_tj:
  160|  7.41M|{
  161|  7.41M|  hb_glyph_info_t *info = buffer->info;
  162|  7.41M|  unsigned int count = buffer->len;
  163|       |
  164|  7.41M|  unsigned int syllable = info[start].syllable();
  ------------------
  |  |  147|  7.41M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  165|  9.18M|  while (++start < count && syllable == info[start].syllable())
  ------------------
  |  |  147|  9.16M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (165:10): [True: 9.16M, False: 15.6k]
  |  Branch (165:29): [True: 1.76M, False: 7.40M]
  ------------------
  166|  1.76M|    ;
  167|       |
  168|  7.41M|  return start;
  169|  7.41M|}
hb-ot-shaper-indic.cc:_ZL22_hb_glyph_info_ligatedPK15hb_glyph_info_t:
  522|  23.2M|{
  523|  23.2M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
  ------------------
  |  |  145|  23.2M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  524|  23.2M|}
hb-ot-shaper-indic.cc:_ZL25_hb_glyph_info_multipliedPK15hb_glyph_info_t:
  528|  2.26k|{
  529|  2.26k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
  ------------------
  |  |  145|  2.26k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  530|  2.26k|}
hb-ot-shaper-indic.cc:_ZL43_hb_glyph_info_clear_ligated_and_multipliedP15hb_glyph_info_t:
  540|  1.58k|{
  541|  1.58k|  info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_LIGATED |
  ------------------
  |  |  145|  1.58k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  542|  1.58k|			   HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED);
  543|  1.58k|}
hb-ot-shaper-indic.cc:_ZL26_hb_glyph_info_substitutedPK15hb_glyph_info_t:
  516|    715|{
  517|    715|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
  ------------------
  |  |  145|    715|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  518|    715|}
hb-ot-shaper-indic.cc:_ZL41_hb_glyph_info_ligated_and_didnt_multiplyPK15hb_glyph_info_t:
  534|  1.32k|{
  535|  1.32k|  return _hb_glyph_info_ligated (info) && !_hb_glyph_info_multiplied (info);
  ------------------
  |  Branch (535:10): [True: 642, False: 680]
  |  Branch (535:43): [True: 582, False: 60]
  ------------------
  536|  1.32k|}
hb-ot-shaper-indic.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|    398|{
  262|    398|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|    398|#define unicode_props()		var2.u16[0]
  ------------------
  263|    398|}
hb-ot-shaper-khmer.cc:_ZL17_hb_next_syllableP11hb_buffer_tj:
  160|   291k|{
  161|   291k|  hb_glyph_info_t *info = buffer->info;
  162|   291k|  unsigned int count = buffer->len;
  163|       |
  164|   291k|  unsigned int syllable = info[start].syllable();
  ------------------
  |  |  147|   291k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  165|   319k|  while (++start < count && syllable == info[start].syllable())
  ------------------
  |  |  147|   317k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (165:10): [True: 317k, False: 1.02k]
  |  Branch (165:29): [True: 27.0k, False: 290k]
  ------------------
  166|  27.0k|    ;
  167|       |
  168|   291k|  return start;
  169|   291k|}
hb-ot-shaper-myanmar.cc:_ZL17_hb_next_syllableP11hb_buffer_tj:
  160|   439k|{
  161|   439k|  hb_glyph_info_t *info = buffer->info;
  162|   439k|  unsigned int count = buffer->len;
  163|       |
  164|   439k|  unsigned int syllable = info[start].syllable();
  ------------------
  |  |  147|   439k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  165|   537k|  while (++start < count && syllable == info[start].syllable())
  ------------------
  |  |  147|   536k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (165:10): [True: 536k, False: 1.79k]
  |  Branch (165:29): [True: 98.9k, False: 437k]
  ------------------
  166|  98.9k|    ;
  167|       |
  168|   439k|  return start;
  169|   439k|}
hb-ot-shaper-myanmar.cc:_ZL22_hb_glyph_info_ligatedPK15hb_glyph_info_t:
  522|  43.9k|{
  523|  43.9k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
  ------------------
  |  |  145|  43.9k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  524|  43.9k|}
hb-ot-shaper-thai.cc:_ZL31_hb_glyph_info_set_continuationP15hb_glyph_info_t:
  329|    219|{
  330|    219|  info->unicode_props() |= UPROPS_MASK_CONTINUATION;
  ------------------
  |  |  142|    219|#define unicode_props()		var2.u16[0]
  ------------------
  331|    219|}
hb-ot-shaper-thai.cc:_ZL35_hb_glyph_info_set_general_categoryP15hb_glyph_info_t29hb_unicode_general_category_t:
  254|    219|{
  255|       |  /* Clears top-byte. */
  256|    219|  info->unicode_props() = (unsigned int) gen_cat | (info->unicode_props() & (0xFF & ~UPROPS_MASK_GEN_CAT));
  ------------------
  |  |  142|    219|#define unicode_props()		var2.u16[0]
  ------------------
                info->unicode_props() = (unsigned int) gen_cat | (info->unicode_props() & (0xFF & ~UPROPS_MASK_GEN_CAT));
  ------------------
  |  |  142|    219|#define unicode_props()		var2.u16[0]
  ------------------
  257|    219|}
hb-ot-shaper-use.cc:_ZL30_hb_glyph_info_is_unicode_markPK15hb_glyph_info_t:
  267|   107k|{
  268|   107k|  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  355|   107k|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|   107k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 107k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  356|   107k|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|   107k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   107k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|   107k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|   107k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   107k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|   107k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|   107k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   107k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|   107k|}
hb-ot-shaper-use.cc:_ZL17_hb_next_syllableP11hb_buffer_tj:
  160|  3.48M|{
  161|  3.48M|  hb_glyph_info_t *info = buffer->info;
  162|  3.48M|  unsigned int count = buffer->len;
  163|       |
  164|  3.48M|  unsigned int syllable = info[start].syllable();
  ------------------
  |  |  147|  3.48M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  165|  4.33M|  while (++start < count && syllable == info[start].syllable())
  ------------------
  |  |  147|  4.32M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (165:10): [True: 4.32M, False: 11.0k]
  |  Branch (165:29): [True: 845k, False: 3.47M]
  ------------------
  166|   845k|    ;
  167|       |
  168|  3.48M|  return start;
  169|  3.48M|}
hb-ot-shaper-use.cc:_ZL28_hb_clear_substitution_flagsPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  555|  3.49k|{
  556|  3.49k|  hb_glyph_info_t *info = buffer->info;
  557|  3.49k|  unsigned int count = buffer->len;
  558|  2.27M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (558:28): [True: 2.27M, False: 3.49k]
  ------------------
  559|  2.27M|    _hb_glyph_info_clear_substituted (&info[i]);
  560|  3.49k|  return false;
  561|  3.49k|}
hb-ot-shaper-use.cc:_ZL32_hb_glyph_info_clear_substitutedP15hb_glyph_info_t:
  547|  2.27M|{
  548|  2.27M|  info->glyph_props() &= ~(HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
  ------------------
  |  |  145|  2.27M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  549|  2.27M|}
hb-ot-shaper-use.cc:_ZL26_hb_glyph_info_substitutedPK15hb_glyph_info_t:
  516|  1.39M|{
  517|  1.39M|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED);
  ------------------
  |  |  145|  1.39M|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  518|  1.39M|}
hb-ot-shaper-use.cc:_ZL22_hb_glyph_info_ligatedPK15hb_glyph_info_t:
  522|  12.1k|{
  523|  12.1k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
  ------------------
  |  |  145|  12.1k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  524|  12.1k|}
hb-ot-shaper-use.cc:_ZL27_hb_glyph_info_get_lig_compPK15hb_glyph_info_t:
  456|  15.4k|{
  457|  15.4k|  if (_hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (457:7): [True: 1.31k, False: 14.0k]
  ------------------
  458|  1.31k|    return 0;
  459|  14.0k|  else
  460|  14.0k|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|  14.0k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  461|  15.4k|}
hb-ot-shaper-use.cc:_ZL31_hb_glyph_info_ligated_internalPK15hb_glyph_info_t:
  450|  15.4k|{
  451|  15.4k|  return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  146|  15.4k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
                return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  418|  15.4k|#define IS_LIG_BASE 0x10
  ------------------
  452|  15.4k|}
hb-ot-shaper-vowel-constraints.cc:_ZL33_hb_glyph_info_reset_continuationP15hb_glyph_info_t:
  334|    760|{
  335|    760|  info->unicode_props() &= ~ UPROPS_MASK_CONTINUATION;
  ------------------
  |  |  142|    760|#define unicode_props()		var2.u16[0]
  ------------------
  336|    760|}
hb-ot-shape-fallback.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|  1.35M|{
  262|  1.35M|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|  1.35M|#define unicode_props()		var2.u16[0]
  ------------------
  263|  1.35M|}
hb-ot-shape-fallback.cc:_ZL43_hb_glyph_info_get_modified_combining_classPK15hb_glyph_info_t:
  280|  1.59M|{
  281|  1.59M|  return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
  ------------------
  |  |  142|  1.59M|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (281:10): [True: 1.59M, False: 0]
  ------------------
  282|  1.59M|}
hb-ot-shape-fallback.cc:_ZL43_hb_glyph_info_set_modified_combining_classP15hb_glyph_info_tj:
  273|  11.7k|{
  274|  11.7k|  if (unlikely (!_hb_glyph_info_is_unicode_mark (info)))
  ------------------
  |  |  259|  11.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.7k]
  |  |  ------------------
  ------------------
  275|      0|    return;
  276|  11.7k|  info->unicode_props() = (modified_class<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|  11.7k|#define unicode_props()		var2.u16[0]
  ------------------
                info->unicode_props() = (modified_class<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|  11.7k|#define unicode_props()		var2.u16[0]
  ------------------
  277|  11.7k|}
hb-ot-shape-fallback.cc:_ZL31_hb_buffer_assert_gsubgpos_varsP11hb_buffer_t:
  600|   459k|{
  601|   459k|  HB_BUFFER_ASSERT_VAR (buffer, glyph_props);
  ------------------
  |  |  672|   459k|#define HB_BUFFER_ASSERT_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, assert_var,       var ())
  |  |  ------------------
  |  |  |  |  667|   459k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   459k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  602|   459k|  HB_BUFFER_ASSERT_VAR (buffer, lig_props);
  ------------------
  |  |  672|   459k|#define HB_BUFFER_ASSERT_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, assert_var,       var ())
  |  |  ------------------
  |  |  |  |  667|   459k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   459k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  603|   459k|}
hb-ot-shape-fallback.cc:_ZL30_hb_glyph_info_is_unicode_markPK15hb_glyph_info_t:
  267|  19.1M|{
  268|  19.1M|  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  355|  19.1M|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|  19.1M|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 19.1M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  356|  19.1M|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  19.1M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  19.1M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  19.1M|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  19.1M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  19.1M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  19.1M|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|  19.1M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  19.1M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|  19.1M|}
hb-ot-shape-fallback.cc:_ZL25_hb_glyph_info_get_lig_idPK15hb_glyph_info_t:
  444|  83.8k|{
  445|  83.8k|  return info->lig_props() >> 5;
  ------------------
  |  |  146|  83.8k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  446|  83.8k|}
hb-ot-shape-fallback.cc:_ZL32_hb_glyph_info_get_lig_num_compsPK15hb_glyph_info_t:
  465|  4.16k|{
  466|  4.16k|  if ((info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE) &&
  ------------------
  |  |  145|  4.16k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  |  Branch (466:7): [True: 299, False: 3.86k]
  ------------------
  467|  4.16k|      _hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (467:7): [True: 264, False: 35]
  ------------------
  468|    264|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|    264|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  469|  3.90k|  else
  470|  3.90k|    return 1;
  471|  4.16k|}
hb-ot-shape-fallback.cc:_ZL31_hb_glyph_info_ligated_internalPK15hb_glyph_info_t:
  450|  79.9k|{
  451|  79.9k|  return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  146|  79.9k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
                return !!(info->lig_props() & IS_LIG_BASE);
  ------------------
  |  |  418|  79.9k|#define IS_LIG_BASE 0x10
  ------------------
  452|  79.9k|}
hb-ot-shape-fallback.cc:_ZL27_hb_glyph_info_get_lig_compPK15hb_glyph_info_t:
  456|  79.6k|{
  457|  79.6k|  if (_hb_glyph_info_ligated_internal (info))
  ------------------
  |  Branch (457:7): [True: 1, False: 79.6k]
  ------------------
  458|      1|    return 0;
  459|  79.6k|  else
  460|  79.6k|    return info->lig_props() & 0x0F;
  ------------------
  |  |  146|  79.6k|#define lig_props()		var1.u8[2] /* GSUB/GPOS ligature tracking */
  ------------------
  461|  79.6k|}
hb-ot-shape-fallback.cc:_ZL31_hb_glyph_info_is_unicode_spacePK15hb_glyph_info_t:
  287|  64.7k|{
  288|  64.7k|  return _hb_glyph_info_get_general_category (info) ==
  289|  64.7k|	 HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR;
  290|  64.7k|}
hb-ot-shape-fallback.cc:_ZL22_hb_glyph_info_ligatedPK15hb_glyph_info_t:
  522|  26.1k|{
  523|  26.1k|  return !!(info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATED);
  ------------------
  |  |  145|  26.1k|#define glyph_props()		var1.u16[0] /* GDEF glyph properties */
  ------------------
  524|  26.1k|}
hb-ot-shape-fallback.cc:_ZL46_hb_glyph_info_get_unicode_space_fallback_typePK15hb_glyph_info_t:
  300|  26.1k|{
  301|  26.1k|  return _hb_glyph_info_is_unicode_space (info) ?
  ------------------
  |  Branch (301:10): [True: 26.1k, False: 0]
  ------------------
  302|  26.1k|	 (hb_unicode_funcs_t::space_t) (info->unicode_props()>>8) :
  ------------------
  |  |  142|  26.1k|#define unicode_props()		var2.u16[0]
  ------------------
  303|  26.1k|	 hb_unicode_funcs_t::NOT_SPACE;
  304|  26.1k|}
hb-ot-shape-normalize.cc:_ZL30_hb_buffer_assert_unicode_varsP11hb_buffer_t:
  580|   565k|{
  581|   565k|  HB_BUFFER_ASSERT_VAR (buffer, unicode_props);
  ------------------
  |  |  672|   565k|#define HB_BUFFER_ASSERT_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, assert_var,       var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  582|   565k|}
hb-ot-shape-normalize.cc:_ZL30_hb_glyph_info_is_unicode_markPK15hb_glyph_info_t:
  267|  1.60M|{
  268|  1.60M|  return HB_UNICODE_GENERAL_CATEGORY_IS_MARK (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  355|  1.60M|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|  1.60M|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 1.60M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  356|  1.60M|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  1.60M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.60M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.60M|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  1.60M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.60M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.60M|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|  1.60M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.60M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|  1.60M|}
hb-ot-shape-normalize.cc:_ZL31_hb_glyph_info_is_unicode_spacePK15hb_glyph_info_t:
  287|  1.58M|{
  288|  1.58M|  return _hb_glyph_info_get_general_category (info) ==
  289|  1.58M|	 HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR;
  290|  1.58M|}
hb-ot-shape-normalize.cc:_ZL35_hb_glyph_info_get_general_categoryPK15hb_glyph_info_t:
  261|  1.58M|{
  262|  1.58M|  return (hb_unicode_general_category_t) (info->unicode_props() & UPROPS_MASK_GEN_CAT);
  ------------------
  |  |  142|  1.58M|#define unicode_props()		var2.u16[0]
  ------------------
  263|  1.58M|}
hb-ot-shape-normalize.cc:_ZL46_hb_glyph_info_set_unicode_space_fallback_typeP15hb_glyph_info_tN18hb_unicode_funcs_t7space_tE:
  293|    365|{
  294|    365|  if (unlikely (!_hb_glyph_info_is_unicode_space (info)))
  ------------------
  |  |  259|    365|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 365]
  |  |  ------------------
  ------------------
  295|      0|    return;
  296|    365|  info->unicode_props() = (((unsigned int) s)<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|    365|#define unicode_props()		var2.u16[0]
  ------------------
                info->unicode_props() = (((unsigned int) s)<<8) | (info->unicode_props() & 0xFF);
  ------------------
  |  |  142|    365|#define unicode_props()		var2.u16[0]
  ------------------
  297|    365|}
hb-ot-shape-normalize.cc:_ZL43_hb_glyph_info_get_modified_combining_classPK15hb_glyph_info_t:
  280|   345k|{
  281|   345k|  return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
  ------------------
  |  |  142|  65.2k|#define unicode_props()		var2.u16[0]
  ------------------
  |  Branch (281:10): [True: 65.2k, False: 279k]
  ------------------
  282|   345k|}
hb-ot-shape-normalize.cc:_ZL21_hb_glyph_info_unhideP15hb_glyph_info_t:
  323|    289|{
  324|    289|  info->unicode_props() &= ~ UPROPS_MASK_HIDDEN;
  ------------------
  |  |  142|    289|#define unicode_props()		var2.u16[0]
  ------------------
  325|    289|}
hb-ot-shape-normalize.cc:_ZL32_hb_glyph_info_set_unicode_propsP15hb_glyph_info_tP11hb_buffer_t:
  205|  4.02k|{
  206|  4.02k|  hb_unicode_funcs_t *unicode = buffer->unicode;
  207|  4.02k|  unsigned int u = info->codepoint;
  208|  4.02k|  unsigned int gen_cat = (unsigned int) unicode->general_category (u);
  209|  4.02k|  unsigned int props = gen_cat;
  210|       |
  211|  4.02k|  if (u >= 0x80u)
  ------------------
  |  Branch (211:7): [True: 3.70k, False: 317]
  ------------------
  212|  3.70k|  {
  213|  3.70k|    buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII;
  214|       |
  215|  3.70k|    if (unlikely (unicode->is_default_ignorable (u)))
  ------------------
  |  |  259|  3.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.70k]
  |  |  ------------------
  ------------------
  216|      0|    {
  217|      0|      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
  218|      0|      props |=  UPROPS_MASK_IGNORABLE;
  219|      0|      if (u == 0x200Cu) props |= UPROPS_MASK_Cf_ZWNJ;
  ------------------
  |  Branch (219:11): [True: 0, False: 0]
  ------------------
  220|      0|      else if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;
  ------------------
  |  Branch (220:16): [True: 0, False: 0]
  ------------------
  221|       |      /* Mongolian Free Variation Selectors need to be remembered
  222|       |       * because although we need to hide them like default-ignorables,
  223|       |       * they need to non-ignorable during shaping.  This is similar to
  224|       |       * what we do for joiners in Indic-like shapers, but since the
  225|       |       * FVSes are GC=Mn, we have use a separate bit to remember them.
  226|       |       * Fixes:
  227|       |       * https://github.com/harfbuzz/harfbuzz/issues/234 */
  228|      0|      else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu))) props |= UPROPS_MASK_HIDDEN;
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  229|       |      /* TAG characters need similar treatment. Fixes:
  230|       |       * https://github.com/harfbuzz/harfbuzz/issues/463 */
  231|      0|      else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xE0020u, 0xE007Fu))) props |= UPROPS_MASK_HIDDEN;
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  232|       |      /* COMBINING GRAPHEME JOINER should not be skipped; at least some times.
  233|       |       * https://github.com/harfbuzz/harfbuzz/issues/554 */
  234|      0|      else if (unlikely (u == 0x034Fu))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  235|      0|      {
  236|      0|	buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_CGJ;
  237|      0|	props |= UPROPS_MASK_HIDDEN;
  238|      0|      }
  239|      0|    }
  240|       |
  241|  3.70k|    if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (gen_cat)))
  ------------------
  |  |  259|  7.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.58k, False: 1.12k]
  |  |  |  Branch (259:47): [True: 3.70k, False: 0]
  |  |  ------------------
  ------------------
  242|  2.58k|    {
  243|  2.58k|      props |= UPROPS_MASK_CONTINUATION;
  244|  2.58k|      props |= unicode->modified_combining_class (u)<<8;
  245|  2.58k|    }
  246|  3.70k|  }
  247|       |
  248|  4.02k|  info->unicode_props() = props;
  ------------------
  |  |  142|  4.02k|#define unicode_props()		var2.u16[0]
  ------------------
  249|  4.02k|}

_ZN19hb_ot_map_builder_tC2EP9hb_face_tRK23hb_segment_properties_t:
   47|  49.3k|{
   48|  49.3k|  hb_memset (this, 0, sizeof (*this));
   49|       |
   50|  49.3k|  feature_infos.init ();
   51|   147k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (51:38): [True: 98.6k, False: 49.3k]
  ------------------
   52|  98.6k|    stages[table_index].init ();
   53|       |
   54|  49.3k|  face = face_;
   55|  49.3k|  props = props_;
   56|       |
   57|       |  /* Fetch script/language indices for GSUB/GPOS.  We need these later to skip
   58|       |   * features not available in either table and not waste precious bits for them. */
   59|       |
   60|  49.3k|  unsigned int script_count = HB_OT_MAX_TAGS_PER_SCRIPT;
  ------------------
  |  |   99|  49.3k|#define HB_OT_MAX_TAGS_PER_SCRIPT	3u
  ------------------
   61|  49.3k|  unsigned int language_count = HB_OT_MAX_TAGS_PER_LANGUAGE;
  ------------------
  |  |  107|  49.3k|#define HB_OT_MAX_TAGS_PER_LANGUAGE	3u
  ------------------
   62|  49.3k|  hb_tag_t script_tags[HB_OT_MAX_TAGS_PER_SCRIPT];
   63|  49.3k|  hb_tag_t language_tags[HB_OT_MAX_TAGS_PER_LANGUAGE];
   64|       |
   65|  49.3k|  hb_ot_tags_from_script_and_language (props.script,
   66|  49.3k|				       props.language,
   67|  49.3k|				       &script_count,
   68|  49.3k|				       script_tags,
   69|  49.3k|				       &language_count,
   70|  49.3k|				       language_tags);
   71|       |
   72|   147k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (72:38): [True: 98.6k, False: 49.3k]
  ------------------
   73|  98.6k|  {
   74|  98.6k|    hb_tag_t table_tag = table_tags[table_index];
   75|  98.6k|    found_script[table_index] = (bool) hb_ot_layout_table_select_script (face,
   76|  98.6k|									 table_tag,
   77|  98.6k|									 script_count,
   78|  98.6k|									 script_tags,
   79|  98.6k|									 &script_index[table_index],
   80|  98.6k|									 &chosen_script[table_index]);
   81|  98.6k|    hb_ot_layout_script_select_language (face,
   82|  98.6k|					 table_tag,
   83|  98.6k|					 script_index[table_index],
   84|  98.6k|					 language_count,
   85|  98.6k|					 language_tags,
   86|  98.6k|					 &language_index[table_index]);
   87|  98.6k|  }
   88|  49.3k|}
_ZN19hb_ot_map_builder_tD2Ev:
   91|  49.3k|{
   92|  49.3k|  feature_infos.fini ();
   93|   147k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (93:38): [True: 98.6k, False: 49.3k]
  ------------------
   94|  98.6k|    stages[table_index].fini ();
   95|  49.3k|}
_ZN19hb_ot_map_builder_t11add_featureEj25hb_ot_map_feature_flags_tj:
  100|  1.40M|{
  101|  1.40M|  if (unlikely (!tag)) return;
  ------------------
  |  |  259|  1.40M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.40M]
  |  |  ------------------
  ------------------
  102|  1.40M|  feature_info_t *info = feature_infos.push();
  103|  1.40M|  info->tag = tag;
  104|  1.40M|  info->seq = feature_infos.length;
  105|  1.40M|  info->max_value = value;
  106|  1.40M|  info->flags = flags;
  107|  1.40M|  info->default_value = (flags & F_GLOBAL) ? value : 0;
  ------------------
  |  Branch (107:25): [True: 1.21M, False: 191k]
  ------------------
  108|  1.40M|  info->stage[0] = current_stage[0];
  109|  1.40M|  info->stage[1] = current_stage[1];
  110|  1.40M|}
_ZN19hb_ot_map_builder_t11has_featureEj:
  113|  1.39k|{
  114|  4.16k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (114:38): [True: 2.77k, False: 1.38k]
  ------------------
  115|  2.77k|  {
  116|  2.77k|    if (hb_ot_layout_language_find_feature (face,
  ------------------
  |  Branch (116:9): [True: 1, False: 2.77k]
  ------------------
  117|  2.77k|					    table_tags[table_index],
  118|  2.77k|					    script_index[table_index],
  119|  2.77k|					    language_index[table_index],
  120|  2.77k|					    tag,
  121|  2.77k|					    nullptr))
  122|      1|      return true;
  123|  2.77k|  }
  124|  1.38k|  return false;
  125|  1.39k|}
_ZN19hb_ot_map_builder_t11add_lookupsER11hb_ot_map_tjjjjbbbbj:
  138|   218k|{
  139|   218k|  unsigned int lookup_indices[32];
  140|   218k|  unsigned int offset, len;
  141|   218k|  unsigned int table_lookup_count;
  142|       |
  143|   218k|  table_lookup_count = hb_ot_layout_table_get_lookup_count (face, table_tags[table_index]);
  144|       |
  145|   218k|  offset = 0;
  146|   293k|  do {
  147|   293k|    len = ARRAY_LENGTH (lookup_indices);
  148|   293k|    hb_ot_layout_feature_with_variations_get_lookups (face,
  149|   293k|						      table_tags[table_index],
  150|   293k|						      feature_index,
  151|   293k|						      variations_index,
  152|   293k|						      offset, &len,
  153|   293k|						      lookup_indices);
  154|       |
  155|  2.84M|    for (unsigned int i = 0; i < len; i++)
  ------------------
  |  Branch (155:30): [True: 2.54M, False: 293k]
  ------------------
  156|  2.54M|    {
  157|  2.54M|      if (lookup_indices[i] >= table_lookup_count)
  ------------------
  |  Branch (157:11): [True: 1.30M, False: 1.23M]
  ------------------
  158|  1.30M|	continue;
  159|  1.23M|      hb_ot_map_t::lookup_map_t *lookup = m.lookups[table_index].push ();
  160|  1.23M|      lookup->mask = mask;
  161|  1.23M|      lookup->index = lookup_indices[i];
  162|  1.23M|      lookup->auto_zwnj = auto_zwnj;
  163|  1.23M|      lookup->auto_zwj = auto_zwj;
  164|  1.23M|      lookup->random = random;
  165|  1.23M|      lookup->per_syllable = per_syllable;
  166|  1.23M|      lookup->feature_tag = feature_tag;
  167|  1.23M|    }
  168|       |
  169|   293k|    offset += len;
  170|   293k|  } while (len == ARRAY_LENGTH (lookup_indices));
  ------------------
  |  Branch (170:12): [True: 75.4k, False: 218k]
  ------------------
  171|   218k|}
_ZN19hb_ot_map_builder_t9add_pauseEjPFbPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tE:
  175|   222k|{
  176|   222k|  stage_info_t *s = stages[table_index].push ();
  177|   222k|  s->index = current_stage[table_index];
  178|   222k|  s->pause_func = pause_func;
  179|       |
  180|   222k|  current_stage[table_index]++;
  181|   222k|}
_ZN19hb_ot_map_builder_t7compileER11hb_ot_map_tRK22hb_ot_shape_plan_key_t:
  186|  49.3k|{
  187|  49.3k|  unsigned int global_bit_shift = 8 * sizeof (hb_mask_t) - 1;
  188|  49.3k|  unsigned int global_bit_mask = 1u << global_bit_shift;
  189|       |
  190|  49.3k|  m.global_mask = global_bit_mask;
  191|       |
  192|  49.3k|  unsigned int required_feature_index[2];
  193|  49.3k|  hb_tag_t required_feature_tag[2];
  194|       |  /* We default to applying required feature in stage 0.  If the required
  195|       |   * feature has a tag that is known to the shaper, we apply required feature
  196|       |   * in the stage for that tag.
  197|       |   */
  198|  49.3k|  unsigned int required_feature_stage[2] = {0, 0};
  199|       |
  200|   147k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (200:38): [True: 98.6k, False: 49.3k]
  ------------------
  201|  98.6k|  {
  202|  98.6k|    m.chosen_script[table_index] = chosen_script[table_index];
  203|  98.6k|    m.found_script[table_index] = found_script[table_index];
  204|       |
  205|  98.6k|    hb_ot_layout_language_get_required_feature (face,
  206|  98.6k|						table_tags[table_index],
  207|  98.6k|						script_index[table_index],
  208|  98.6k|						language_index[table_index],
  209|  98.6k|						&required_feature_index[table_index],
  210|  98.6k|						&required_feature_tag[table_index]);
  211|  98.6k|  }
  212|       |
  213|       |  /* Sort features and merge duplicates */
  214|  49.3k|  if (feature_infos.length)
  ------------------
  |  Branch (214:7): [True: 48.6k, False: 621]
  ------------------
  215|  48.6k|  {
  216|  48.6k|    feature_infos.qsort ();
  217|  48.6k|    auto *f = feature_infos.arrayZ;
  218|  48.6k|    unsigned int j = 0;
  219|  48.6k|    unsigned count = feature_infos.length;
  220|  1.37M|    for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (220:30): [True: 1.32M, False: 48.6k]
  ------------------
  221|  1.32M|      if (f[i].tag != f[j].tag)
  ------------------
  |  Branch (221:11): [True: 1.30M, False: 23.0k]
  ------------------
  222|  1.30M|	f[++j] = f[i];
  223|  23.0k|      else {
  224|  23.0k|	if (f[i].flags & F_GLOBAL) {
  ------------------
  |  Branch (224:6): [True: 23.0k, False: 0]
  ------------------
  225|  23.0k|	  f[j].flags |= F_GLOBAL;
  226|  23.0k|	  f[j].max_value = f[i].max_value;
  227|  23.0k|	  f[j].default_value = f[i].default_value;
  228|  23.0k|	} else {
  229|      0|	  if (f[j].flags & F_GLOBAL)
  ------------------
  |  Branch (229:8): [True: 0, False: 0]
  ------------------
  230|      0|	    f[j].flags ^= F_GLOBAL;
  231|      0|	  f[j].max_value = hb_max (f[j].max_value, f[i].max_value);
  232|       |	  /* Inherit default_value from j */
  233|      0|	}
  234|  23.0k|	f[j].flags |= (f[i].flags & F_HAS_FALLBACK);
  235|  23.0k|	f[j].stage[0] = hb_min (f[j].stage[0], f[i].stage[0]);
  236|  23.0k|	f[j].stage[1] = hb_min (f[j].stage[1], f[i].stage[1]);
  237|  23.0k|      }
  238|  48.6k|    feature_infos.shrink (j + 1);
  239|  48.6k|  }
  240|       |
  241|       |
  242|       |  /* Allocate bits now */
  243|  49.3k|  static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), "");
  244|  49.3k|  unsigned int next_bit = hb_popcount (HB_GLYPH_FLAG_DEFINED) + 1;
  245|       |
  246|  49.3k|  unsigned count = feature_infos.length;
  247|  1.40M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (247:28): [True: 1.35M, False: 49.3k]
  ------------------
  248|  1.35M|  {
  249|  1.35M|    const feature_info_t *info = &feature_infos[i];
  250|       |
  251|  1.35M|    unsigned int bits_needed;
  252|       |
  253|  1.35M|    if ((info->flags & F_GLOBAL) && info->max_value == 1)
  ------------------
  |  Branch (253:9): [True: 1.16M, False: 188k]
  |  Branch (253:37): [True: 1.11M, False: 52.1k]
  ------------------
  254|       |      /* Uses the global bit */
  255|  1.11M|      bits_needed = 0;
  256|   240k|    else
  257|       |      /* Limit bits per feature. */
  258|   240k|      bits_needed = hb_min (HB_OT_MAP_MAX_BITS, hb_bit_storage (info->max_value));
  ------------------
  |  |   35|   240k|#define HB_OT_MAP_MAX_BITS 8u
  ------------------
  259|       |
  260|  1.35M|    if (!info->max_value || next_bit + bits_needed >= global_bit_shift)
  ------------------
  |  Branch (260:9): [True: 3.41k, False: 1.34M]
  |  Branch (260:29): [True: 0, False: 1.34M]
  ------------------
  261|  3.41k|      continue; /* Feature disabled, or not enough bits. */
  262|       |
  263|       |
  264|  1.34M|    bool found = false;
  265|  1.34M|    unsigned int feature_index[2];
  266|  4.04M|    for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (266:40): [True: 2.69M, False: 1.34M]
  ------------------
  267|  2.69M|    {
  268|  2.69M|      if (required_feature_tag[table_index] == info->tag)
  ------------------
  |  Branch (268:11): [True: 636, False: 2.69M]
  ------------------
  269|    636|	required_feature_stage[table_index] = info->stage[table_index];
  270|       |
  271|  2.69M|      found |= (bool) hb_ot_layout_language_find_feature (face,
  272|  2.69M|							  table_tags[table_index],
  273|  2.69M|							  script_index[table_index],
  274|  2.69M|							  language_index[table_index],
  275|  2.69M|							  info->tag,
  276|  2.69M|							  &feature_index[table_index]);
  277|  2.69M|    }
  278|  1.34M|    if (!found && (info->flags & F_GLOBAL_SEARCH))
  ------------------
  |  Branch (278:9): [True: 1.34M, False: 3.52k]
  |  Branch (278:19): [True: 0, False: 1.34M]
  ------------------
  279|      0|    {
  280|      0|      for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (280:42): [True: 0, False: 0]
  ------------------
  281|      0|      {
  282|      0|	found |= (bool) hb_ot_layout_table_find_feature (face,
  283|      0|							 table_tags[table_index],
  284|      0|							 info->tag,
  285|      0|							 &feature_index[table_index]);
  286|      0|      }
  287|      0|    }
  288|  1.34M|    if (!found && !(info->flags & F_HAS_FALLBACK))
  ------------------
  |  Branch (288:9): [True: 1.34M, False: 3.52k]
  |  Branch (288:19): [True: 1.24M, False: 100k]
  ------------------
  289|  1.24M|      continue;
  290|       |
  291|       |
  292|   104k|    hb_ot_map_t::feature_map_t *map = m.features.push ();
  293|       |
  294|   104k|    map->tag = info->tag;
  295|   104k|    map->index[0] = feature_index[0];
  296|   104k|    map->index[1] = feature_index[1];
  297|   104k|    map->stage[0] = info->stage[0];
  298|   104k|    map->stage[1] = info->stage[1];
  299|   104k|    map->auto_zwnj = !(info->flags & F_MANUAL_ZWNJ);
  300|   104k|    map->auto_zwj = !(info->flags & F_MANUAL_ZWJ);
  301|   104k|    map->random = !!(info->flags & F_RANDOM);
  302|   104k|    map->per_syllable = !!(info->flags & F_PER_SYLLABLE);
  303|   104k|    if ((info->flags & F_GLOBAL) && info->max_value == 1) {
  ------------------
  |  Branch (303:9): [True: 98.4k, False: 5.98k]
  |  Branch (303:37): [True: 98.4k, False: 15]
  ------------------
  304|       |      /* Uses the global bit */
  305|  98.4k|      map->shift = global_bit_shift;
  306|  98.4k|      map->mask = global_bit_mask;
  307|  98.4k|    } else {
  308|  5.99k|      map->shift = next_bit;
  309|  5.99k|      map->mask = (1u << (next_bit + bits_needed)) - (1u << next_bit);
  310|  5.99k|      next_bit += bits_needed;
  311|  5.99k|      m.global_mask |= (info->default_value << map->shift) & map->mask;
  312|  5.99k|    }
  313|   104k|    map->_1_mask = (1u << map->shift) & map->mask;
  314|   104k|    map->needs_fallback = !found;
  315|   104k|  }
  316|       |  //feature_infos.shrink (0); /* Done with these */
  317|       |
  318|       |
  319|  49.3k|  add_gsub_pause (nullptr);
  320|  49.3k|  add_gpos_pause (nullptr);
  321|       |
  322|   147k|  for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (322:38): [True: 98.6k, False: 49.3k]
  ------------------
  323|  98.6k|  {
  324|       |    /* Collect lookup indices for features */
  325|  98.6k|    auto &lookups = m.lookups[table_index];
  326|       |
  327|  98.6k|    unsigned int stage_index = 0;
  328|  98.6k|    unsigned int last_num_lookups = 0;
  329|   320k|    for (unsigned stage = 0; stage < current_stage[table_index]; stage++)
  ------------------
  |  Branch (329:30): [True: 222k, False: 98.6k]
  ------------------
  330|   222k|    {
  331|   222k|      if (required_feature_index[table_index] != HB_OT_LAYOUT_NO_FEATURE_INDEX &&
  ------------------
  |  |  199|   444k|#define HB_OT_LAYOUT_NO_FEATURE_INDEX		0xFFFFu
  ------------------
  |  Branch (331:11): [True: 46.0k, False: 176k]
  ------------------
  332|   222k|	  required_feature_stage[table_index] == stage)
  ------------------
  |  Branch (332:4): [True: 12.0k, False: 33.9k]
  ------------------
  333|  12.0k|	add_lookups (m, table_index,
  334|  12.0k|		     required_feature_index[table_index],
  335|  12.0k|		     key.variations_index[table_index],
  336|  12.0k|		     global_bit_mask);
  337|       |
  338|   222k|      for (auto &feature : m.features)
  ------------------
  |  Branch (338:26): [True: 549k, False: 222k]
  ------------------
  339|   549k|      {
  340|   549k|	if (feature.stage[table_index] == stage)
  ------------------
  |  Branch (340:6): [True: 206k, False: 343k]
  ------------------
  341|   206k|	  add_lookups (m, table_index,
  342|   206k|		       feature.index[table_index],
  343|   206k|		       key.variations_index[table_index],
  344|   206k|		       feature.mask,
  345|   206k|		       feature.auto_zwnj,
  346|   206k|		       feature.auto_zwj,
  347|   206k|		       feature.random,
  348|   206k|		       feature.per_syllable,
  349|   206k|		       feature.tag);
  350|   549k|      }
  351|       |
  352|       |      /* Sort lookups and merge duplicates */
  353|   222k|      if (last_num_lookups < lookups.length)
  ------------------
  |  Branch (353:11): [True: 13.7k, False: 208k]
  ------------------
  354|  13.7k|      {
  355|  13.7k|	lookups.as_array ().sub_array (last_num_lookups, lookups.length - last_num_lookups).qsort ();
  356|       |
  357|  13.7k|	unsigned int j = last_num_lookups;
  358|  1.13M|	for (unsigned int i = j + 1; i < lookups.length; i++)
  ------------------
  |  Branch (358:31): [True: 1.11M, False: 13.7k]
  ------------------
  359|  1.11M|	  if (lookups.arrayZ[i].index != lookups.arrayZ[j].index)
  ------------------
  |  Branch (359:8): [True: 78.4k, False: 1.03M]
  ------------------
  360|  78.4k|	    lookups.arrayZ[++j] = lookups.arrayZ[i];
  361|  1.03M|	  else
  362|  1.03M|	  {
  363|  1.03M|	    lookups.arrayZ[j].mask |= lookups.arrayZ[i].mask;
  364|  1.03M|	    lookups.arrayZ[j].auto_zwnj &= lookups.arrayZ[i].auto_zwnj;
  365|  1.03M|	    lookups.arrayZ[j].auto_zwj &= lookups.arrayZ[i].auto_zwj;
  366|  1.03M|	  }
  367|  13.7k|	lookups.shrink (j + 1);
  368|  13.7k|      }
  369|       |
  370|   222k|      last_num_lookups = lookups.length;
  371|       |
  372|   222k|      if (stage_index < stages[table_index].length && stages[table_index][stage_index].index == stage) {
  ------------------
  |  Branch (372:11): [True: 219k, False: 2.52k]
  |  Branch (372:55): [True: 219k, False: 0]
  ------------------
  373|   219k|	hb_ot_map_t::stage_map_t *stage_map = m.stages[table_index].push ();
  374|   219k|	stage_map->last_lookup = last_num_lookups;
  375|   219k|	stage_map->pause_func = stages[table_index][stage_index].pause_func;
  376|       |
  377|   219k|	stage_index++;
  378|   219k|      }
  379|   222k|    }
  380|  98.6k|  }
  381|  49.3k|}

_ZNK11hb_ot_map_t13feature_map_t3cmpEj:
   62|   819k|    { return tag_ < tag ? -1 : tag_ > tag ? 1 : 0; }
  ------------------
  |  Branch (62:14): [True: 328k, False: 490k]
  |  Branch (62:32): [True: 330k, False: 160k]
  ------------------
_ZN11hb_ot_map_t12lookup_map_t3cmpEPKvS2_:
   75|  3.04M|    {
   76|  3.04M|      const lookup_map_t *a = (const lookup_map_t *) pa;
   77|  3.04M|      const lookup_map_t *b = (const lookup_map_t *) pb;
   78|  3.04M|      return a->index < b->index ? -1 : a->index > b->index ? 1 : 0;
  ------------------
  |  Branch (78:14): [True: 853k, False: 2.19M]
  |  Branch (78:41): [True: 1.12M, False: 1.06M]
  ------------------
   79|  3.04M|    }
_ZN11hb_ot_map_t4initEv:
   92|  49.3k|  {
   93|  49.3k|    hb_memset (this, 0, sizeof (*this));
   94|       |
   95|  49.3k|    features.init0 ();
   96|   147k|    for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (96:40): [True: 98.6k, False: 49.3k]
  ------------------
   97|  98.6k|    {
   98|  98.6k|      lookups[table_index].init0 ();
   99|  98.6k|      stages[table_index].init0 ();
  100|  98.6k|    }
  101|  49.3k|  }
_ZN11hb_ot_map_t4finiEv:
  103|  49.3k|  {
  104|  49.3k|    features.fini ();
  105|   147k|    for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (105:40): [True: 98.6k, False: 49.3k]
  ------------------
  106|  98.6k|    {
  107|  98.6k|      lookups[table_index].fini ();
  108|  98.6k|      stages[table_index].fini ();
  109|  98.6k|    }
  110|  49.3k|  }
_ZNK11hb_ot_map_t15get_global_maskEv:
  112|   570k|  hb_mask_t get_global_mask () const { return global_mask; }
_ZNK11hb_ot_map_t8get_maskEjPj:
  115|  98.6k|  {
  116|  98.6k|    const feature_map_t *map = features.bsearch (feature_tag);
  117|  98.6k|    if (shift) *shift = map ? map->shift : 0;
  ------------------
  |  Branch (117:9): [True: 0, False: 98.6k]
  |  Branch (117:25): [True: 0, False: 0]
  ------------------
  118|  98.6k|    return map ? map->mask : 0;
  ------------------
  |  Branch (118:12): [True: 94.8k, False: 3.77k]
  ------------------
  119|  98.6k|  }
_ZNK11hb_ot_map_t14needs_fallbackEj:
  122|  4.43k|  {
  123|  4.43k|    const feature_map_t *map = features.bsearch (feature_tag);
  124|  4.43k|    return map ? map->needs_fallback : false;
  ------------------
  |  Branch (124:12): [True: 4.37k, False: 58]
  ------------------
  125|  4.43k|  }
_ZNK11hb_ot_map_t10get_1_maskEj:
  128|   346k|  {
  129|   346k|    const feature_map_t *map = features.bsearch (feature_tag);
  130|   346k|    return map ? map->_1_mask : 0;
  ------------------
  |  Branch (130:12): [True: 13.3k, False: 333k]
  ------------------
  131|   346k|  }
_ZNK11hb_ot_map_t17get_feature_indexEjj:
  134|  49.3k|  {
  135|  49.3k|    const feature_map_t *map = features.bsearch (feature_tag);
  136|  49.3k|    return map ? map->index[table_index] : HB_OT_LAYOUT_NO_FEATURE_INDEX;
  ------------------
  |  |  199|  2.47k|#define HB_OT_LAYOUT_NO_FEATURE_INDEX		0xFFFFu
  ------------------
  |  Branch (136:12): [True: 46.8k, False: 2.47k]
  ------------------
  137|  49.3k|  }
_ZNK11hb_ot_map_t17get_feature_stageEjj:
  140|  13.1k|  {
  141|  13.1k|    const feature_map_t *map = features.bsearch (feature_tag);
  142|  13.1k|    return map ? map->stage[table_index] : UINT_MAX;
  ------------------
  |  Branch (142:12): [True: 1.11k, False: 12.0k]
  ------------------
  143|  13.1k|  }
_ZNK11hb_ot_map_t17get_stage_lookupsEjj:
  147|  13.1k|  {
  148|  13.1k|    if (unlikely (stage > stages[table_index].length))
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12.0k, False: 1.11k]
  |  |  ------------------
  ------------------
  149|  12.0k|      return hb_array<const hb_ot_map_t::lookup_map_t> (nullptr, 0);
  150|       |
  151|  1.11k|    unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0;
  ------------------
  |  Branch (151:26): [True: 1.11k, False: 0]
  ------------------
  152|  1.11k|    unsigned int end   = stage < stages[table_index].length ? stages[table_index][stage].last_lookup : lookups[table_index].length;
  ------------------
  |  Branch (152:26): [True: 1.11k, False: 0]
  ------------------
  153|  1.11k|    return lookups[table_index].as_array ().sub_array (start, end - start);
  154|  13.1k|  }
_ZN19hb_ot_map_builder_t11add_featureERK19hb_ot_map_feature_t:
  217|   737k|  { add_feature (feat.tag, feat.flags); }
_ZN19hb_ot_map_builder_t14enable_featureEj25hb_ot_map_feature_flags_tj:
  222|   494k|  { add_feature (tag, F_GLOBAL | flags, value); }
_ZN19hb_ot_map_builder_t15disable_featureEj:
  225|  3.46k|  { add_feature (tag, F_GLOBAL, 0); }
_ZN19hb_ot_map_builder_t14add_gsub_pauseEPFbPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tE:
  228|   172k|  { add_pause (0, pause_func); }
_ZN19hb_ot_map_builder_t14add_gpos_pauseEPFbPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tE:
  230|  49.3k|  { add_pause (1, pause_func); }
_ZN19hb_ot_map_builder_t14feature_info_t3cmpEPKvS2_:
  257|  5.11M|    {
  258|  5.11M|      const feature_info_t *a = (const feature_info_t *) pa;
  259|  5.11M|      const feature_info_t *b = (const feature_info_t *) pb;
  260|  5.11M|      return (a->tag != b->tag) ?  (a->tag < b->tag ? -1 : 1) :
  ------------------
  |  Branch (260:14): [True: 5.09M, False: 24.2k]
  |  Branch (260:37): [True: 2.60M, False: 2.48M]
  ------------------
  261|  5.11M|	     (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0);
  ------------------
  |  Branch (261:8): [True: 16.2k, False: 8.02k]
  |  Branch (261:31): [True: 8.02k, False: 0]
  ------------------
  262|  5.11M|    }

_ZNK2OT4MATH8has_dataEv:
 1076|  33.3k|  bool has_data () const { return version.to_int (); }
_ZNK2OT4MATH12get_constantE21hb_ot_math_constant_tP9hb_font_t:
 1112|  1.86M|  { return (this+mathConstants).get_value (constant, font); }
_ZNK2OT13MathConstants9get_valueE21hb_ot_math_constant_tP9hb_font_t:
  114|  1.86M|  {
  115|  1.86M|    switch (constant) {
  116|       |
  117|  33.3k|    case HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN:
  ------------------
  |  Branch (117:5): [True: 33.3k, False: 1.83M]
  ------------------
  118|  66.6k|    case HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN:
  ------------------
  |  Branch (118:5): [True: 33.3k, False: 1.83M]
  ------------------
  119|  66.6k|      return percentScaleDown[constant - HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN];
  120|       |
  121|  33.3k|    case HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT:
  ------------------
  |  Branch (121:5): [True: 33.3k, False: 1.83M]
  ------------------
  122|  66.6k|    case HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT:
  ------------------
  |  Branch (122:5): [True: 33.3k, False: 1.83M]
  ------------------
  123|  66.6k|      return font->em_scale_y (minHeight[constant - HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT]);
  124|       |
  125|  33.3k|    case HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE:
  ------------------
  |  Branch (125:5): [True: 33.3k, False: 1.83M]
  ------------------
  126|  66.6k|    case HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE:
  ------------------
  |  Branch (126:5): [True: 33.3k, False: 1.83M]
  ------------------
  127|   100k|    case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP:
  ------------------
  |  Branch (127:5): [True: 33.3k, False: 1.83M]
  ------------------
  128|   133k|    case HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT:
  ------------------
  |  Branch (128:5): [True: 33.3k, False: 1.83M]
  ------------------
  129|   133k|      return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_x_value (font, this);
  130|       |
  131|  33.3k|    case HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT:
  ------------------
  |  Branch (131:5): [True: 33.3k, False: 1.83M]
  ------------------
  132|  66.6k|    case HB_OT_MATH_CONSTANT_AXIS_HEIGHT:
  ------------------
  |  Branch (132:5): [True: 33.3k, False: 1.83M]
  ------------------
  133|   100k|    case HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT:
  ------------------
  |  Branch (133:5): [True: 33.3k, False: 1.83M]
  ------------------
  134|   133k|    case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN:
  ------------------
  |  Branch (134:5): [True: 33.3k, False: 1.83M]
  ------------------
  135|   166k|    case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN:
  ------------------
  |  Branch (135:5): [True: 33.3k, False: 1.83M]
  ------------------
  136|   200k|    case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN:
  ------------------
  |  Branch (136:5): [True: 33.3k, False: 1.83M]
  ------------------
  137|   233k|    case HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN:
  ------------------
  |  Branch (137:5): [True: 33.3k, False: 1.83M]
  ------------------
  138|   266k|    case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP:
  ------------------
  |  Branch (138:5): [True: 33.3k, False: 1.83M]
  ------------------
  139|   300k|    case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN:
  ------------------
  |  Branch (139:5): [True: 33.3k, False: 1.83M]
  ------------------
  140|   333k|    case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP:
  ------------------
  |  Branch (140:5): [True: 33.3k, False: 1.83M]
  ------------------
  141|   366k|    case HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN:
  ------------------
  |  Branch (141:5): [True: 33.3k, False: 1.83M]
  ------------------
  142|   400k|    case HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS:
  ------------------
  |  Branch (142:5): [True: 33.3k, False: 1.83M]
  ------------------
  143|   433k|    case HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN:
  ------------------
  |  Branch (143:5): [True: 33.3k, False: 1.83M]
  ------------------
  144|   466k|    case HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN:
  ------------------
  |  Branch (144:5): [True: 33.3k, False: 1.83M]
  ------------------
  145|   500k|    case HB_OT_MATH_CONSTANT_MATH_LEADING:
  ------------------
  |  Branch (145:5): [True: 33.3k, False: 1.83M]
  ------------------
  146|   533k|    case HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER:
  ------------------
  |  Branch (146:5): [True: 33.3k, False: 1.83M]
  ------------------
  147|   566k|    case HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS:
  ------------------
  |  Branch (147:5): [True: 33.3k, False: 1.83M]
  ------------------
  148|   600k|    case HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP:
  ------------------
  |  Branch (148:5): [True: 33.3k, False: 1.83M]
  ------------------
  149|   633k|    case HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP:
  ------------------
  |  Branch (149:5): [True: 33.3k, False: 1.83M]
  ------------------
  150|   666k|    case HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER:
  ------------------
  |  Branch (150:5): [True: 33.3k, False: 1.83M]
  ------------------
  151|   700k|    case HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS:
  ------------------
  |  Branch (151:5): [True: 33.3k, False: 1.83M]
  ------------------
  152|   733k|    case HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP:
  ------------------
  |  Branch (152:5): [True: 33.3k, False: 1.83M]
  ------------------
  153|   766k|    case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP:
  ------------------
  |  Branch (153:5): [True: 33.3k, False: 1.83M]
  ------------------
  154|   800k|    case HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN:
  ------------------
  |  Branch (154:5): [True: 33.3k, False: 1.83M]
  ------------------
  155|   833k|    case HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN:
  ------------------
  |  Branch (155:5): [True: 33.3k, False: 1.83M]
  ------------------
  156|   866k|    case HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN:
  ------------------
  |  Branch (156:5): [True: 33.3k, False: 1.83M]
  ------------------
  157|   900k|    case HB_OT_MATH_CONSTANT_STACK_GAP_MIN:
  ------------------
  |  Branch (157:5): [True: 33.3k, False: 1.83M]
  ------------------
  158|   933k|    case HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP:
  ------------------
  |  Branch (158:5): [True: 33.3k, False: 1.83M]
  ------------------
  159|   966k|    case HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP:
  ------------------
  |  Branch (159:5): [True: 33.3k, False: 1.83M]
  ------------------
  160|  1.00M|    case HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN:
  ------------------
  |  Branch (160:5): [True: 33.3k, False: 1.83M]
  ------------------
  161|  1.03M|    case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN:
  ------------------
  |  Branch (161:5): [True: 33.3k, False: 1.83M]
  ------------------
  162|  1.06M|    case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN:
  ------------------
  |  Branch (162:5): [True: 33.3k, False: 1.83M]
  ------------------
  163|  1.10M|    case HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP:
  ------------------
  |  Branch (163:5): [True: 33.3k, False: 1.83M]
  ------------------
  164|  1.13M|    case HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN:
  ------------------
  |  Branch (164:5): [True: 33.3k, False: 1.83M]
  ------------------
  165|  1.16M|    case HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN:
  ------------------
  |  Branch (165:5): [True: 33.3k, False: 1.83M]
  ------------------
  166|  1.20M|    case HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX:
  ------------------
  |  Branch (166:5): [True: 33.3k, False: 1.83M]
  ------------------
  167|  1.23M|    case HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN:
  ------------------
  |  Branch (167:5): [True: 33.3k, False: 1.83M]
  ------------------
  168|  1.26M|    case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX:
  ------------------
  |  Branch (168:5): [True: 33.3k, False: 1.83M]
  ------------------
  169|  1.30M|    case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT:
  ------------------
  |  Branch (169:5): [True: 33.3k, False: 1.83M]
  ------------------
  170|  1.33M|    case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN:
  ------------------
  |  Branch (170:5): [True: 33.3k, False: 1.83M]
  ------------------
  171|  1.36M|    case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP:
  ------------------
  |  Branch (171:5): [True: 33.3k, False: 1.83M]
  ------------------
  172|  1.40M|    case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED:
  ------------------
  |  Branch (172:5): [True: 33.3k, False: 1.83M]
  ------------------
  173|  1.43M|    case HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER:
  ------------------
  |  Branch (173:5): [True: 33.3k, False: 1.83M]
  ------------------
  174|  1.46M|    case HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS:
  ------------------
  |  Branch (174:5): [True: 33.3k, False: 1.83M]
  ------------------
  175|  1.50M|    case HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP:
  ------------------
  |  Branch (175:5): [True: 33.3k, False: 1.83M]
  ------------------
  176|  1.53M|    case HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN:
  ------------------
  |  Branch (176:5): [True: 33.3k, False: 1.83M]
  ------------------
  177|  1.56M|    case HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN:
  ------------------
  |  Branch (177:5): [True: 33.3k, False: 1.83M]
  ------------------
  178|  1.56M|      return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_y_value (font, this);
  179|       |
  180|  33.3k|    case HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT:
  ------------------
  |  Branch (180:5): [True: 33.3k, False: 1.83M]
  ------------------
  181|  33.3k|      return radicalDegreeBottomRaisePercent;
  182|       |
  183|      0|    default:
  ------------------
  |  Branch (183:5): [True: 0, False: 1.86M]
  ------------------
  184|      0|      return 0;
  185|  1.86M|    }
  186|  1.86M|  }
_ZNK2OT15MathValueRecord11get_x_valueEP9hb_font_tPKv:
   40|   233k|  { return font->em_scale_x (value) + (base+deviceTable).get_x_delta (font); }
_ZNK2OT15MathValueRecord11get_y_valueEP9hb_font_tPKv:
   42|  1.56M|  { return font->em_scale_y (value) + (base+deviceTable).get_y_delta (font); }
_ZNK2OT4MATH14get_glyph_infoEv:
 1114|   200k|  const MathGlyphInfo &get_glyph_info () const { return this+mathGlyphInfo; }
_ZNK2OT13MathGlyphInfo22get_italics_correctionEjP9hb_font_t:
  596|  33.3k|  { return (this+mathItalicsCorrectionInfo).get_value (glyph, font); }
_ZNK2OT25MathItalicsCorrectionInfo9get_valueEjP9hb_font_t:
  232|  33.3k|  {
  233|  33.3k|    unsigned int index = (this+coverage).get_coverage (glyph);
  234|  33.3k|    return italicsCorrection[index].get_x_value (font, this);
  235|  33.3k|  }
_ZNK2OT13MathGlyphInfo25get_top_accent_attachmentEjP9hb_font_t:
  600|  33.3k|  { return (this+mathTopAccentAttachment).get_value (glyph, font); }
_ZNK2OT23MathTopAccentAttachment9get_valueEjP9hb_font_t:
  285|  33.3k|  {
  286|  33.3k|    unsigned int index = (this+topAccentCoverage).get_coverage (glyph);
  287|  33.3k|    if (index == NOT_COVERED)
  ------------------
  |  |   37|  33.3k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
  |  Branch (287:9): [True: 33.2k, False: 63]
  ------------------
  288|  33.2k|      return font->get_glyph_h_advance (glyph) / 2;
  289|     63|    return topAccentAttachment[index].get_x_value (font, this);
  290|  33.3k|  }
_ZNK2OT13MathGlyphInfo17is_extended_shapeEj:
  603|  33.3k|  { return (this+extendedShapeCoverage).get_coverage (glyph) != NOT_COVERED; }
  ------------------
  |  |   37|  33.3k|#define NOT_COVERED             ((unsigned int) -1)
  ------------------
_ZNK2OT13MathGlyphInfo11get_kerningEj17hb_ot_math_kern_tiP9hb_font_t:
  609|  33.3k|  { return (this+mathKernInfo).get_kerning (glyph, kern, correction_height, font); }
_ZNK2OT12MathKernInfo11get_kerningEj17hb_ot_math_kern_tiP9hb_font_t:
  518|  33.3k|  {
  519|  33.3k|    unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
  520|  33.3k|    return mathKernInfoRecords[index].get_kerning (kern, correction_height, font, this);
  521|  33.3k|  }
_ZNK2OT18MathKernInfoRecord11get_kerningE17hb_ot_math_kern_tiP9hb_font_tPKv:
  449|  33.3k|  {
  450|  33.3k|    unsigned int idx = kern;
  451|  33.3k|    if (unlikely (idx >= ARRAY_LENGTH (mathKern))) return 0;
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.3k]
  |  |  ------------------
  ------------------
  452|  33.3k|    return (base+mathKern[idx]).get_value (correction_height, font);
  453|  33.3k|  }
_ZNK2OT8MathKern9get_valueEiP9hb_font_t:
  341|  33.3k|  {
  342|  33.3k|    const MathValueRecord* correctionHeight = mathValueRecordsZ.arrayZ;
  343|  33.3k|    const MathValueRecord* kernValue = mathValueRecordsZ.arrayZ + heightCount;
  344|  33.3k|    int sign = font->y_scale < 0 ? -1 : +1;
  ------------------
  |  Branch (344:16): [True: 0, False: 33.3k]
  ------------------
  345|       |
  346|       |    /* The description of the MathKern table is a ambiguous, but interpreting
  347|       |     * "between the two heights found at those indexes" for 0 < i < len as
  348|       |     *
  349|       |     *   correctionHeight[i-1] < correction_height <= correctionHeight[i]
  350|       |     *
  351|       |     * makes the result consistent with the limit cases and we can just use the
  352|       |     * binary search algorithm of std::upper_bound:
  353|       |     */
  354|  33.3k|    unsigned int i = 0;
  355|  33.3k|    unsigned int count = heightCount;
  356|  33.4k|    while (count > 0)
  ------------------
  |  Branch (356:12): [True: 150, False: 33.3k]
  ------------------
  357|    150|    {
  358|    150|      unsigned int half = count / 2;
  359|    150|      hb_position_t height = correctionHeight[i + half].get_y_value (font, this);
  360|    150|      if (sign * height < sign * correction_height)
  ------------------
  |  Branch (360:11): [True: 30, False: 120]
  ------------------
  361|     30|      {
  362|     30|	i += half + 1;
  363|     30|	count -= half + 1;
  364|     30|      } else
  365|    120|	count = half;
  366|    150|    }
  367|  33.3k|    return kernValue[i].get_x_value (font, this);
  368|  33.3k|  }
_ZNK2OT13MathGlyphInfo12get_kerningsEj17hb_ot_math_kern_tjPjP23hb_ot_math_kern_entry_tP9hb_font_t:
  617|  66.6k|  { return (this+mathKernInfo).get_kernings (glyph,
  618|  66.6k|					     kern,
  619|  66.6k|					     start_offset,
  620|  66.6k|					     entries_count,
  621|  66.6k|					     kern_entries,
  622|  66.6k|					     font); }
_ZNK2OT12MathKernInfo12get_kerningsEj17hb_ot_math_kern_tjPjP23hb_ot_math_kern_entry_tP9hb_font_t:
  529|  66.6k|  {
  530|  66.6k|    unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
  531|  66.6k|    return mathKernInfoRecords[index].get_kernings (kern,
  532|  66.6k|						    start_offset,
  533|  66.6k|						    entries_count,
  534|  66.6k|						    kern_entries,
  535|  66.6k|						    font,
  536|  66.6k|						    this);
  537|  66.6k|  }
_ZNK2OT18MathKernInfoRecord12get_kerningsE17hb_ot_math_kern_tjPjP23hb_ot_math_kern_entry_tP9hb_font_tPKv:
  461|  66.6k|  {
  462|  66.6k|    unsigned int idx = kern;
  463|  66.6k|    if (unlikely (idx >= ARRAY_LENGTH (mathKern)) || !mathKern[idx]) {
  ------------------
  |  |  259|   133k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 66.6k]
  |  |  ------------------
  ------------------
  |  Branch (463:54): [True: 66.5k, False: 80]
  ------------------
  464|  66.5k|      if (entries_count) *entries_count = 0;
  ------------------
  |  Branch (464:11): [True: 33.2k, False: 33.2k]
  ------------------
  465|  66.5k|      return 0;
  466|  66.5k|    }
  467|     80|    return (base+mathKern[idx]).get_entries (start_offset,
  468|     80|					     entries_count,
  469|     80|					     kern_entries,
  470|     80|					     font);
  471|  66.6k|  }
_ZNK2OT8MathKern11get_entriesEjPjP23hb_ot_math_kern_entry_tP9hb_font_t:
  374|     80|  {
  375|     80|    const MathValueRecord* correctionHeight = mathValueRecordsZ.arrayZ;
  376|     80|    const MathValueRecord* kernValue = mathValueRecordsZ.arrayZ + heightCount;
  377|     80|    const unsigned int entriesCount = heightCount + 1;
  378|       |
  379|     80|    if (entries_count)
  ------------------
  |  Branch (379:9): [True: 40, False: 40]
  ------------------
  380|     40|    {
  381|     40|      unsigned int start = hb_min (start_offset, entriesCount);
  382|     40|      unsigned int end = hb_min (start + *entries_count, entriesCount);
  383|     40|      *entries_count = end - start;
  384|       |
  385|    224|      for (unsigned int i = 0; i < *entries_count; i++) {
  ------------------
  |  Branch (385:32): [True: 184, False: 40]
  ------------------
  386|    184|	unsigned int j = start + i;
  387|       |
  388|    184|	hb_position_t max_height;
  389|    184|	if (j == heightCount) {
  ------------------
  |  Branch (389:6): [True: 14, False: 170]
  ------------------
  390|     14|	  max_height = INT32_MAX;
  391|    170|	} else {
  392|    170|	  max_height = correctionHeight[j].get_y_value (font, this);
  393|    170|	}
  394|       |
  395|    184|	kern_entries[i] = {max_height, kernValue[j].get_x_value (font, this)};
  396|    184|      }
  397|     40|    }
  398|     80|    return entriesCount;
  399|     80|  }
_ZNK2OT4MATH12get_variantsEv:
 1116|   233k|  const MathVariants &get_variants () const    { return this+mathVariants; }
_ZNK2OT12MathVariants18get_glyph_variantsEj14hb_direction_tP9hb_font_tjPjP26hb_ot_math_glyph_variant_t:
 1000|   100k|  { return get_glyph_construction (glyph, direction, font)
 1001|   100k|	   .get_variants (direction, font, start_offset, variants_count, variants); }
_ZNK2OT12MathVariants22get_glyph_constructionEj14hb_direction_tP9hb_font_t:
 1021|   200k|  {
 1022|   200k|    bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
  ------------------
  |  |  280|   200k|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  ------------------
 1023|   200k|    unsigned int count = vertical ? vertGlyphCount : horizGlyphCount;
  ------------------
  |  Branch (1023:26): [True: 66.6k, False: 133k]
  ------------------
 1024|   200k|    const Offset16To<Coverage> &coverage = vertical ? vertGlyphCoverage
  ------------------
  |  Branch (1024:44): [True: 66.6k, False: 133k]
  ------------------
 1025|   200k|						  : horizGlyphCoverage;
 1026|       |
 1027|   200k|    unsigned int index = (this+coverage).get_coverage (glyph);
 1028|   200k|    if (unlikely (index >= count)) return Null (MathGlyphConstruction);
  ------------------
  |  |  259|   200k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 199k, False: 74]
  |  |  ------------------
  ------------------
                  if (unlikely (index >= count)) return Null (MathGlyphConstruction);
  ------------------
  |  |  124|   199k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
 1029|       |
 1030|     74|    if (!vertical)
  ------------------
  |  Branch (1030:9): [True: 56, False: 18]
  ------------------
 1031|     56|      index += vertGlyphCount;
 1032|       |
 1033|     74|    return this+glyphConstruction[index];
 1034|   200k|  }
_ZNK2OT21MathGlyphConstruction12get_variantsE14hb_direction_tP9hb_font_tjPjP26hb_ot_math_glyph_variant_t:
  850|   100k|  {
  851|   100k|    if (variants_count)
  ------------------
  |  Branch (851:9): [True: 33.3k, False: 66.6k]
  ------------------
  852|  33.3k|    {
  853|  33.3k|      int64_t mult = font->dir_mult (direction);
  854|  33.3k|      for (auto _ : hb_zip (mathGlyphVariantRecord.as_array ().sub_array (start_offset, variants_count),
  ------------------
  |  Branch (854:19): [True: 29, False: 33.3k]
  ------------------
  855|  33.3k|			    hb_array (variants, *variants_count)))
  856|     29|	_.second = {_.first.variantGlyph, font->em_mult (_.first.advanceMeasurement, mult)};
  857|  33.3k|    }
  858|   100k|    return mathGlyphVariantRecord.len;
  859|   100k|  }
_ZNK2OT12MathVariants25get_min_connector_overlapE14hb_direction_tP9hb_font_t:
  992|  33.3k|  { return font->em_scale_dir (minConnectorOverlap, direction); }
_ZNK2OT12MathVariants15get_glyph_partsEj14hb_direction_tP9hb_font_tjPjP23hb_ot_math_glyph_part_tPi:
 1010|   100k|  { return get_glyph_construction (glyph, direction, font)
 1011|   100k|	   .get_assembly ()
 1012|   100k|	   .get_parts (direction, font,
 1013|   100k|		       start_offset, parts_count, parts,
 1014|   100k|		       italics_correction); }
_ZNK2OT21MathGlyphConstruction12get_assemblyEv:
  843|   100k|  const MathGlyphAssembly &get_assembly () const { return this+glyphAssembly; }
_ZNK2OT17MathGlyphAssembly9get_partsE14hb_direction_tP9hb_font_tjPjP23hb_ot_math_glyph_part_tPi:
  781|   100k|  {
  782|   100k|    if (parts_count)
  ------------------
  |  Branch (782:9): [True: 33.3k, False: 66.6k]
  ------------------
  783|  33.3k|    {
  784|  33.3k|      int64_t mult = font->dir_mult (direction);
  785|  33.3k|      for (auto _ : hb_zip (partRecords.as_array ().sub_array (start_offset, parts_count),
  ------------------
  |  Branch (785:19): [True: 22, False: 33.3k]
  ------------------
  786|  33.3k|			    hb_array (parts, *parts_count)))
  787|     22|	_.first.extract (_.second, mult, font);
  788|  33.3k|    }
  789|       |
  790|   100k|    if (italics_correction)
  ------------------
  |  Branch (790:9): [True: 33.3k, False: 66.6k]
  ------------------
  791|  33.3k|      *italics_correction = italicsCorrection.get_x_value (font, this);
  792|       |
  793|   100k|    return partRecords.len;
  794|   100k|  }
_ZNK2OT19MathGlyphPartRecord7extractER23hb_ot_math_glyph_part_tlP9hb_font_t:
  714|     22|  {
  715|     22|    out.glyph			= glyph;
  716|       |
  717|     22|    out.start_connector_length	= font->em_mult (startConnectorLength, mult);
  718|     22|    out.end_connector_length	= font->em_mult (endConnectorLength, mult);
  719|     22|    out.full_advance		= font->em_mult (fullAdvance, mult);
  720|       |
  721|     22|    static_assert ((unsigned int) HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER ==
  722|     22|		   (unsigned int) PartFlags::Extender, "");
  723|       |
  724|     22|    out.flags = (hb_ot_math_glyph_part_flags_t)
  725|     22|		(unsigned int)
  726|     22|		(partFlags & PartFlags::Defined);
  727|     22|  }
_ZNK2OT4MATH8sanitizeEP21hb_sanitize_context_t:
 1101|  1.80k|  {
 1102|  1.80k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.80k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
 1103|  1.80k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  13.3k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.80k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.78k, False: 18]
  |  |  |  Branch (349:45): [True: 1.78k, False: 7]
  |  |  |  Branch (349:45): [True: 1.38k, False: 394]
  |  |  |  Branch (349:45): [True: 1.14k, False: 239]
  |  |  |  Branch (349:45): [True: 1.01k, False: 134]
  |  |  ------------------
  ------------------
 1104|  1.80k|		  likely (version.major == 1) &&
 1105|  1.80k|		  mathConstants.sanitize (c, this) &&
 1106|  1.80k|		  mathGlyphInfo.sanitize (c, this) &&
 1107|  1.80k|		  mathVariants.sanitize (c, this));
 1108|  1.80k|  }
_ZNK2OT13MathConstants8sanitizeEP21hb_sanitize_context_t:
  107|    942|  {
  108|    942|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    942|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  109|    942|    return_trace (c->check_struct (this) && sanitize_math_value_records (c));
  ------------------
  |  |  349|  1.36k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    942|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 426, False: 516]
  |  |  |  Branch (349:45): [True: 288, False: 138]
  |  |  ------------------
  ------------------
  110|    942|  }
_ZNK2OT13MathConstants27sanitize_math_value_recordsEP21hb_sanitize_context_t:
   95|    426|  {
   96|    426|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    426|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   97|       |
   98|    426|    unsigned int count = ARRAY_LENGTH (mathValueRecords);
   99|  16.3k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (99:30): [True: 16.0k, False: 288]
  ------------------
  100|  16.0k|      if (!mathValueRecords[i].sanitize (c, this))
  ------------------
  |  Branch (100:11): [True: 138, False: 15.9k]
  ------------------
  101|    138|	return_trace (false);
  ------------------
  |  |  349|    138|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    138|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  102|       |
  103|    288|    return_trace (true);
  ------------------
  |  |  349|    288|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    288|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  104|    426|  }
_ZNK2OT15MathValueRecord8sanitizeEP21hb_sanitize_context_tPKv:
   55|  7.23M|  {
   56|  7.23M|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  7.23M|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   57|  7.23M|    return_trace (c->check_struct (this) && deviceTable.sanitize (c, base));
  ------------------
  |  |  349|  14.4M|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  7.23M|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 7.23M, False: 22]
  |  |  |  Branch (349:45): [True: 7.23M, False: 265]
  |  |  ------------------
  ------------------
   58|  7.23M|  }
_ZNK2OT13MathGlyphInfo8sanitizeEP21hb_sanitize_context_t:
  585|  1.14k|  {
  586|  1.14k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.14k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  587|  1.14k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  8.51k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.14k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.10k, False: 49]
  |  |  |  Branch (349:45): [True: 992, False: 108]
  |  |  |  Branch (349:45): [True: 922, False: 70]
  |  |  |  Branch (349:45): [True: 904, False: 18]
  |  |  |  Branch (349:45): [True: 842, False: 62]
  |  |  ------------------
  ------------------
  588|  1.14k|		  mathItalicsCorrectionInfo.sanitize (c, this) &&
  589|  1.14k|		  mathTopAccentAttachment.sanitize (c, this) &&
  590|  1.14k|		  extendedShapeCoverage.sanitize (c, this) &&
  591|  1.14k|		  mathKernInfo.sanitize (c, this));
  592|  1.14k|  }
_ZNK2OT25MathItalicsCorrectionInfo8sanitizeEP21hb_sanitize_context_t:
  223|    707|  {
  224|    707|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    707|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  225|    707|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.66k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    707|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 634, False: 73]
  |  |  |  Branch (349:45): [True: 613, False: 21]
  |  |  |  Branch (349:45): [True: 496, False: 117]
  |  |  ------------------
  ------------------
  226|    707|		  coverage.sanitize (c, this) &&
  227|    707|		  italicsCorrection.sanitize (c, this));
  228|    707|  }
_ZNK2OT23MathTopAccentAttachment8sanitizeEP21hb_sanitize_context_t:
  276|    778|  {
  277|    778|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    778|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  278|    778|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.91k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    778|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 685, False: 93]
  |  |  |  Branch (349:45): [True: 675, False: 10]
  |  |  |  Branch (349:45): [True: 576, False: 99]
  |  |  ------------------
  ------------------
  279|    778|		  topAccentCoverage.sanitize (c, this) &&
  280|    778|		  topAccentAttachment.sanitize (c, this));
  281|    778|  }
_ZNK2OT12MathKernInfo8sanitizeEP21hb_sanitize_context_t:
  507|    700|  {
  508|    700|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    700|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  509|    700|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.60k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    700|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 604, False: 96]
  |  |  |  Branch (349:45): [True: 597, False: 7]
  |  |  |  Branch (349:45): [True: 476, False: 121]
  |  |  ------------------
  ------------------
  510|    700|		  mathKernCoverage.sanitize (c, this) &&
  511|    700|		  mathKernInfoRecords.sanitize (c, this));
  512|    700|  }
_ZNK2OT18MathKernInfoRecord8sanitizeEP21hb_sanitize_context_tPKv:
  434|  3.91k|  {
  435|  3.91k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.91k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  436|       |
  437|  3.91k|    unsigned int count = ARRAY_LENGTH (mathKern);
  438|  19.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (438:30): [True: 15.5k, False: 3.85k]
  ------------------
  439|  15.5k|      if (unlikely (!mathKern[i].sanitize (c, base)))
  ------------------
  |  |  259|  15.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 60, False: 15.4k]
  |  |  ------------------
  ------------------
  440|     60|	return_trace (false);
  ------------------
  |  |  349|     60|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     60|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  441|       |
  442|  3.85k|    return_trace (true);
  ------------------
  |  |  349|  3.85k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  3.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  443|  3.91k|  }
_ZNK2OT8MathKern8sanitizeEP21hb_sanitize_context_t:
  333|  6.94k|  {
  334|  6.94k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.94k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  335|  6.94k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  25.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.94k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.17k, False: 771]
  |  |  |  Branch (349:45): [True: 5.74k, False: 427]
  |  |  |  Branch (349:45): [True: 5.71k, False: 29]
  |  |  ------------------
  ------------------
  336|  6.94k|		  c->check_array (mathValueRecordsZ.arrayZ, 2 * heightCount + 1) &&
  337|  6.94k|		  sanitize_math_value_records (c));
  338|  6.94k|  }
_ZNK2OT8MathKern27sanitize_math_value_recordsEP21hb_sanitize_context_t:
  324|  5.74k|  {
  325|  5.74k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  5.74k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  326|  5.74k|    unsigned int count = 2 * heightCount + 1;
  327|  6.04M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (327:30): [True: 6.04M, False: 5.71k]
  ------------------
  328|  6.04M|      if (!mathValueRecordsZ.arrayZ[i].sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|     29|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     29|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (328:11): [True: 29, False: 6.04M]
  ------------------
  329|  5.71k|    return_trace (true);
  ------------------
  |  |  349|  5.71k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  5.71k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  330|  5.74k|  }
_ZNK2OT12MathVariants8sanitizeEP21hb_sanitize_context_t:
  981|    859|  {
  982|    859|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    859|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  983|    859|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  6.57k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    859|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 817, False: 42]
  |  |  |  Branch (349:45): [True: 806, False: 11]
  |  |  |  Branch (349:45): [True: 801, False: 5]
  |  |  |  Branch (349:45): [True: 718, False: 83]
  |  |  |  Branch (349:45): [True: 630, False: 88]
  |  |  ------------------
  ------------------
  984|    859|		  vertGlyphCoverage.sanitize (c, this) &&
  985|    859|		  horizGlyphCoverage.sanitize (c, this) &&
  986|    859|		  c->check_array (glyphConstruction.arrayZ, vertGlyphCount + horizGlyphCount) &&
  987|    859|		  sanitize_offsets (c));
  988|    859|  }
_ZNK2OT12MathVariants16sanitize_offsetsEP21hb_sanitize_context_t:
  972|    718|  {
  973|    718|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    718|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  974|    718|    unsigned int count = vertGlyphCount + horizGlyphCount;
  975|  22.4k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (975:30): [True: 21.8k, False: 630]
  ------------------
  976|  21.8k|      if (!glyphConstruction.arrayZ[i].sanitize (c, this)) return_trace (false);
  ------------------
  |  |  349|     88|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     88|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (976:11): [True: 88, False: 21.7k]
  ------------------
  977|    630|    return_trace (true);
  ------------------
  |  |  349|    630|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    630|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  978|    718|  }
_ZNK2OT21MathGlyphConstruction8sanitizeEP21hb_sanitize_context_t:
  836|  11.3k|  {
  837|  11.3k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  11.3k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  838|  11.3k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  43.9k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  11.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 10.6k, False: 772]
  |  |  |  Branch (349:45): [True: 10.5k, False: 37]
  |  |  |  Branch (349:45): [True: 10.0k, False: 470]
  |  |  ------------------
  ------------------
  839|  11.3k|		  glyphAssembly.sanitize (c, this) &&
  840|  11.3k|		  mathGlyphVariantRecord.sanitize (c));
  841|  11.3k|  }
_ZNK2OT17MathGlyphAssembly8sanitizeEP21hb_sanitize_context_t:
  768|  6.64k|  {
  769|  6.64k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.64k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  770|  6.64k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  26.2k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.64k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.46k, False: 173]
  |  |  |  Branch (349:45): [True: 6.45k, False: 13]
  |  |  |  Branch (349:45): [True: 6.17k, False: 284]
  |  |  ------------------
  ------------------
  771|  6.64k|		  italicsCorrection.sanitize (c, this) &&
  772|  6.64k|		  partRecords.sanitize (c));
  773|  6.64k|  }

hb_ot_math_has_data:
   65|  33.3k|{
   66|  33.3k|  return face->table.MATH->has_data ();
   67|  33.3k|}
hb_ot_math_get_constant:
   89|  1.86M|{
   90|  1.86M|  return font->face->table.MATH->get_constant(constant, font);
   91|  1.86M|}
hb_ot_math_get_glyph_italics_correction:
  108|  33.3k|{
  109|  33.3k|  return font->face->table.MATH->get_glyph_info().get_italics_correction (glyph, font);
  110|  33.3k|}
hb_ot_math_get_glyph_top_accent_attachment:
  134|  33.3k|{
  135|  33.3k|  return font->face->table.MATH->get_glyph_info().get_top_accent_attachment (glyph, font);
  136|  33.3k|}
hb_ot_math_is_glyph_extended_shape:
  152|  33.3k|{
  153|  33.3k|  return face->table.MATH->get_glyph_info().is_extended_shape (glyph);
  154|  33.3k|}
hb_ot_math_get_glyph_kerning:
  180|  33.3k|{
  181|  33.3k|  return font->face->table.MATH->get_glyph_info().get_kerning (glyph,
  182|  33.3k|							       kern,
  183|  33.3k|							       correction_height,
  184|  33.3k|							       font);
  185|  33.3k|}
hb_ot_math_get_glyph_kernings:
  223|  66.6k|{
  224|  66.6k|  return font->face->table.MATH->get_glyph_info().get_kernings (glyph,
  225|  66.6k|								kern,
  226|  66.6k|								start_offset,
  227|  66.6k|								entries_count,
  228|  66.6k|								kern_entries,
  229|  66.6k|								font);
  230|  66.6k|}
hb_ot_math_get_glyph_variants:
  262|   100k|{
  263|   100k|  return font->face->table.MATH->get_variants().get_glyph_variants (glyph, direction, font,
  264|   100k|								    start_offset,
  265|   100k|								    variants_count,
  266|   100k|								    variants);
  267|   100k|}
hb_ot_math_get_min_connector_overlap:
  290|  33.3k|{
  291|  33.3k|  return font->face->table.MATH->get_variants().get_min_connector_overlap (direction, font);
  292|  33.3k|}
hb_ot_math_get_glyph_assembly:
  327|   100k|{
  328|   100k|  return font->face->table.MATH->get_variants().get_glyph_parts (glyph,
  329|   100k|								 direction,
  330|   100k|								 font,
  331|   100k|								 start_offset,
  332|   100k|								 parts_count,
  333|   100k|								 parts,
  334|   100k|								 italics_correction);
  335|   100k|}

_ZNK2OT4maxp8sanitizeEP21hb_sanitize_context_t:
   84|  3.76k|  {
   85|  3.76k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  3.76k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   86|  3.76k|    if (unlikely (!c->check_struct (this)))
  ------------------
  |  |  259|  3.76k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 3.75k]
  |  |  ------------------
  ------------------
   87|      7|      return_trace (false);
  ------------------
  |  |  349|      7|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   88|       |
   89|  3.75k|    if (version.major == 1)
  ------------------
  |  Branch (89:9): [True: 1.10k, False: 2.65k]
  ------------------
   90|  1.10k|    {
   91|  1.10k|      const maxpV1Tail &v1 = StructAfter<maxpV1Tail> (*this);
   92|  1.10k|      return_trace (v1.sanitize (c));
  ------------------
  |  |  349|  1.10k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   93|  1.10k|    }
   94|  2.65k|    return_trace (likely (version.major == 0 && version.minor == 0x5000u));
  ------------------
  |  |  349|  5.07k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  2.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 2.41k, False: 238]
  |  |  |  Branch (349:45): [True: 2.35k, False: 61]
  |  |  ------------------
  ------------------
   95|  3.75k|  }
_ZNK2OT10maxpV1Tail8sanitizeEP21hb_sanitize_context_t:
   45|  1.10k|  {
   46|  1.10k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.10k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   47|  1.10k|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|  1.10k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.10k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   48|  1.10k|  }
_ZNK2OT4maxp14get_num_glyphsEv:
   76|  98.8k|  unsigned int get_num_glyphs () const { return numGlyphs; }

_ZN2OT4meta13accelerator_tD2Ev:
   76|  32.6k|    ~accelerator_t () { table.destroy (); }
_ZNK2OT7DataMap3cmpEj:
   43|  4.20k|  int cmp (hb_tag_t a) const { return tag.cmp (a); }
_ZNK2OT7DataMap15reference_entryEP9hb_blob_t:
   48|  33.3k|  { return hb_blob_create_sub_blob (meta_blob, dataZ, dataLength); }
_ZNK2OT7DataMap8sanitizeEP21hb_sanitize_context_tPKv:
   51|  6.88k|  {
   52|  6.88k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  6.88k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   53|  6.88k|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|  13.7k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  6.88k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 6.88k, False: 0]
  |  |  |  Branch (349:45): [True: 6.86k, False: 21]
  |  |  ------------------
  ------------------
   54|  6.88k|			  dataZ.sanitize (c, base, dataLength)));
   55|  6.88k|  }
_ZN2OT4meta13accelerator_tC2EP9hb_face_t:
   75|  32.6k|    { table = hb_sanitize_context_t ().reference_table<meta> (face); }
_ZNK2OT4meta13accelerator_t15reference_entryEj:
   79|  33.3k|    { return table->dataMaps.lsearch (tag).reference_entry (table.get_blob ()); }
_ZNK2OT4meta13accelerator_t11get_entriesEjPjP16hb_ot_meta_tag_t:
   84|  33.3k|    {
   85|  33.3k|      if (count)
  ------------------
  |  Branch (85:11): [True: 0, False: 33.3k]
  ------------------
   86|      0|      {
   87|      0|	+ table->dataMaps.as_array ().sub_array (start_offset, count)
   88|      0|	| hb_map (&DataMap::get_tag)
   89|      0|	| hb_map ([](hb_tag_t tag) { return (hb_ot_meta_tag_t) tag; })
   90|      0|	| hb_sink (hb_array (entries, *count))
   91|      0|	;
   92|      0|      }
   93|  33.3k|      return table->dataMaps.len;
   94|  33.3k|    }
_ZNK2OT4meta8sanitizeEP21hb_sanitize_context_t:
  101|     67|  {
  102|     67|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     67|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  103|     67|    return_trace (likely (c->check_struct (this) &&
  ------------------
  |  |  349|    249|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     67|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 66, False: 1]
  |  |  |  Branch (349:45): [True: 49, False: 17]
  |  |  |  Branch (349:45): [True: 15, False: 34]
  |  |  ------------------
  ------------------
  104|     67|			  version == 1 &&
  105|     67|			  dataMaps.sanitize (c, this)));
  106|     67|  }
_ZN2OT18meta_accelerator_tC2EP9hb_face_t:
  123|  32.6k|  meta_accelerator_t (hb_face_t *face) : meta::accelerator_t (face) {}

hb_ot_meta_get_entry_tags:
   58|  33.3k|{
   59|  33.3k|  return face->table.meta->get_entries (start_offset, entries_count, entries);
   60|  33.3k|}
hb_ot_meta_reference_entry:
   75|  33.3k|{
   76|  33.3k|  return face->table.meta->reference_entry (meta_tag);
   77|  33.3k|}

_Z34_hb_ot_metrics_get_position_commonP9hb_font_t19hb_ot_metrics_tag_tPi:
   63|   104k|{
   64|   104k|  hb_face_t *face = font->face;
   65|   104k|  switch ((unsigned) metrics_tag)
   66|   104k|  {
   67|      0|#ifndef HB_NO_VAR
   68|      0|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
   69|       |#else
   70|       |#define GET_VAR .0f
   71|       |#endif
   72|      0|#define GET_METRIC_X(TABLE, ATTR) \
   73|      0|  (face->table.TABLE->has_data () && \
   74|      0|    ((void) (position && (*position = font->em_scalef_x (_fix_ascender_descender ( \
   75|      0|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
   76|      0|#define GET_METRIC_Y(TABLE, ATTR) \
   77|      0|  (face->table.TABLE->has_data () && \
   78|      0|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
   79|      0|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
   80|       |
   81|  99.5k|  case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
  ------------------
  |  Branch (81:3): [True: 99.5k, False: 5.22k]
  ------------------
   82|  99.5k|    return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoAscender)) ||
  ------------------
  |  |   77|    724|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 713, False: 11]
  |  |  ------------------
  |  |   78|    724|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 713, False: 0]
  |  |  |  Branch (78:14): [True: 470, False: 243]
  |  |  |  Branch (78:26): [True: 439, False: 31]
  |  |  ------------------
  |  |   79|    470|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|    470|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (82:13): [True: 724, False: 98.8k]
  ------------------
   83|  99.5k|	   GET_METRIC_Y (hhea, ascender);
  ------------------
  |  |   77|  98.8k|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 3.28k, False: 95.5k]
  |  |  ------------------
  |  |   78|  98.8k|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 3.28k, False: 0]
  |  |  |  Branch (78:14): [True: 2.14k, False: 1.14k]
  |  |  |  Branch (78:26): [True: 1.19k, False: 949]
  |  |  ------------------
  |  |   79|  2.14k|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|  2.14k|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
   84|  2.61k|  case HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER:
  ------------------
  |  Branch (84:3): [True: 2.61k, False: 102k]
  ------------------
   85|  2.61k|    return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoDescender)) ||
  ------------------
  |  |   77|    473|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 470, False: 3]
  |  |  ------------------
  |  |   78|    473|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 470, False: 0]
  |  |  |  Branch (78:14): [True: 470, False: 0]
  |  |  |  Branch (78:26): [True: 393, False: 77]
  |  |  ------------------
  |  |   79|    470|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|    470|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (85:13): [True: 473, False: 2.13k]
  ------------------
   86|  2.61k|	   GET_METRIC_Y (hhea, descender);
  ------------------
  |  |   77|  2.14k|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 2.14k, False: 0]
  |  |  ------------------
  |  |   78|  2.14k|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 2.14k, False: 0]
  |  |  |  Branch (78:14): [True: 2.14k, False: 0]
  |  |  |  Branch (78:26): [True: 2.03k, False: 104]
  |  |  ------------------
  |  |   79|  2.14k|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|  2.14k|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
   87|  2.61k|  case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
  ------------------
  |  Branch (87:3): [True: 2.61k, False: 102k]
  ------------------
   88|  2.61k|    return (face->table.OS2->use_typo_metrics () && GET_METRIC_Y (OS2, sTypoLineGap)) ||
  ------------------
  |  |   77|    473|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 470, False: 3]
  |  |  ------------------
  |  |   78|    473|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 470, False: 0]
  |  |  |  Branch (78:14): [True: 470, False: 0]
  |  |  |  Branch (78:26): [True: 135, False: 335]
  |  |  ------------------
  |  |   79|    470|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|    470|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (88:13): [True: 473, False: 2.13k]
  ------------------
   89|  2.61k|	   GET_METRIC_Y (hhea, lineGap);
  ------------------
  |  |   77|  2.14k|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (77:4): [True: 2.14k, False: 0]
  |  |  ------------------
  |  |   78|  2.14k|    ((void) (position && (*position = font->em_scalef_y (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (78:5): [True: 2.14k, False: 0]
  |  |  |  Branch (78:14): [True: 2.14k, False: 0]
  |  |  |  Branch (78:26): [True: 409, False: 1.73k]
  |  |  ------------------
  |  |   79|  2.14k|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|  2.14k|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
   90|       |
   91|      0|#ifndef HB_NO_VERTICAL
   92|      0|  case HB_OT_METRICS_TAG_VERTICAL_ASCENDER:  return GET_METRIC_X (vhea, ascender);
  ------------------
  |  |   73|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (73:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   74|      0|    ((void) (position && (*position = font->em_scalef_x (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (74:5): [True: 0, False: 0]
  |  |  |  Branch (74:14): [True: 0, False: 0]
  |  |  |  Branch (74:26): [True: 0, False: 0]
  |  |  ------------------
  |  |   75|      0|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|      0|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (92:3): [True: 0, False: 104k]
  ------------------
   93|      0|  case HB_OT_METRICS_TAG_VERTICAL_DESCENDER: return GET_METRIC_X (vhea, descender);
  ------------------
  |  |   73|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (73:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   74|      0|    ((void) (position && (*position = font->em_scalef_x (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (74:5): [True: 0, False: 0]
  |  |  |  Branch (74:14): [True: 0, False: 0]
  |  |  |  Branch (74:26): [True: 0, False: 0]
  |  |  ------------------
  |  |   75|      0|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|      0|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (93:3): [True: 0, False: 104k]
  ------------------
   94|      0|  case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP:  return GET_METRIC_X (vhea, lineGap);
  ------------------
  |  |   73|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (73:4): [True: 0, False: 0]
  |  |  ------------------
  |  |   74|      0|    ((void) (position && (*position = font->em_scalef_x (_fix_ascender_descender ( \
  |  |  ------------------
  |  |  |  Branch (74:5): [True: 0, False: 0]
  |  |  |  Branch (74:14): [True: 0, False: 0]
  |  |  |  Branch (74:26): [True: 0, False: 0]
  |  |  ------------------
  |  |   75|      0|      face->table.TABLE->ATTR + GET_VAR, metrics_tag)))), true))
  |  |  ------------------
  |  |  |  |   68|      0|#define GET_VAR face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords)
  |  |  ------------------
  ------------------
  |  Branch (94:3): [True: 0, False: 104k]
  ------------------
   95|      0|#endif
   96|       |
   97|      0|#undef GET_METRIC_Y
   98|      0|#undef GET_METRIC_X
   99|      0|#undef GET_VAR
  100|      0|  default:                               assert (0); return false;
  ------------------
  |  Branch (100:3): [True: 0, False: 104k]
  ------------------
  101|   104k|  }
  102|   104k|}
hb_ot_metrics_get_position:
  140|  33.3k|{
  141|  33.3k|  hb_face_t *face = font->face;
  142|  33.3k|  switch ((unsigned) metrics_tag)
  143|  33.3k|  {
  144|  33.3k|  case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
  ------------------
  |  Branch (144:3): [True: 33.3k, False: 0]
  ------------------
  145|  33.3k|  case HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER:
  ------------------
  |  Branch (145:3): [True: 0, False: 33.3k]
  ------------------
  146|  33.3k|  case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
  ------------------
  |  Branch (146:3): [True: 0, False: 33.3k]
  ------------------
  147|  33.3k|  case HB_OT_METRICS_TAG_VERTICAL_ASCENDER:
  ------------------
  |  Branch (147:3): [True: 0, False: 33.3k]
  ------------------
  148|  33.3k|  case HB_OT_METRICS_TAG_VERTICAL_DESCENDER:
  ------------------
  |  Branch (148:3): [True: 0, False: 33.3k]
  ------------------
  149|  33.3k|  case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP:           return _hb_ot_metrics_get_position_common (font, metrics_tag, position);
  ------------------
  |  Branch (149:3): [True: 0, False: 33.3k]
  ------------------
  150|      0|#ifndef HB_NO_VAR
  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  152|       |#else
  153|       |#define GET_VAR 0
  154|       |#endif
  155|      0|#define GET_METRIC_X(TABLE, ATTR) \
  156|      0|  (face->table.TABLE->has_data () && \
  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  158|      0|#define GET_METRIC_Y(TABLE, ATTR) \
  159|      0|  (face->table.TABLE->has_data () && \
  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  161|      0|  case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT:  return GET_METRIC_Y (OS2, usWinAscent);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (161:3): [True: 0, False: 33.3k]
  ------------------
  162|      0|  case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC_Y (OS2, usWinDescent);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (162:3): [True: 0, False: 33.3k]
  ------------------
  163|       |
  164|      0|  case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE:
  ------------------
  |  Branch (164:3): [True: 0, False: 33.3k]
  ------------------
  165|      0|  case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN:
  ------------------
  |  Branch (165:3): [True: 0, False: 33.3k]
  ------------------
  166|      0|  {
  167|      0|    unsigned mult = 1u;
  168|       |
  169|      0|    if (font->slant)
  ------------------
  |  Branch (169:9): [True: 0, False: 0]
  ------------------
  170|      0|    {
  171|      0|      unsigned rise = face->table.hhea->caretSlopeRise;
  172|      0|      unsigned upem = face->get_upem ();
  173|      0|      mult = (rise && rise < upem) ? hb_min (upem / rise, 256u) : 1u;
  ------------------
  |  Branch (173:15): [True: 0, False: 0]
  |  Branch (173:23): [True: 0, False: 0]
  ------------------
  174|      0|    }
  175|       |
  176|      0|    if (metrics_tag == HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE)
  ------------------
  |  Branch (176:9): [True: 0, False: 0]
  ------------------
  177|      0|    {
  178|      0|      bool ret = GET_METRIC_Y (hhea, caretSlopeRise);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  179|       |
  180|      0|      if (position)
  ------------------
  |  Branch (180:11): [True: 0, False: 0]
  ------------------
  181|      0|	*position *= mult;
  182|       |
  183|      0|      return ret;
  184|      0|    }
  185|      0|    else
  186|      0|    {
  187|      0|      hb_position_t rise = 0;
  188|       |
  189|      0|      if (font->slant && position && GET_METRIC_Y (hhea, caretSlopeRise))
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (189:11): [True: 0, False: 0]
  |  Branch (189:26): [True: 0, False: 0]
  ------------------
  190|      0|	rise = *position;
  191|       |
  192|      0|      bool ret = GET_METRIC_X (hhea, caretSlopeRun);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  193|       |
  194|      0|      if (position)
  ------------------
  |  Branch (194:11): [True: 0, False: 0]
  ------------------
  195|      0|      {
  196|      0|	*position *= mult;
  197|       |
  198|      0|	if (font->slant)
  ------------------
  |  Branch (198:6): [True: 0, False: 0]
  ------------------
  199|      0|	  *position += roundf (mult * font->slant_xy * rise);
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  200|      0|      }
  201|       |
  202|      0|      return ret;
  203|      0|    }
  204|      0|  }
  205|      0|  case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET:     return GET_METRIC_X (hhea, caretOffset);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (205:3): [True: 0, False: 33.3k]
  ------------------
  206|       |
  207|      0|#ifndef HB_NO_VERTICAL
  208|      0|  case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE:         return GET_METRIC_X (vhea, caretSlopeRise);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (208:3): [True: 0, False: 33.3k]
  ------------------
  209|      0|  case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN:          return GET_METRIC_Y (vhea, caretSlopeRun);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (209:3): [True: 0, False: 33.3k]
  ------------------
  210|      0|  case HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET:       return GET_METRIC_Y (vhea, caretOffset);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (210:3): [True: 0, False: 33.3k]
  ------------------
  211|      0|#endif
  212|      0|  case HB_OT_METRICS_TAG_X_HEIGHT:                    return GET_METRIC_Y (OS2->v2 (), sxHeight);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (212:3): [True: 0, False: 33.3k]
  ------------------
  213|      0|  case HB_OT_METRICS_TAG_CAP_HEIGHT:                  return GET_METRIC_Y (OS2->v2 (), sCapHeight);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (213:3): [True: 0, False: 33.3k]
  ------------------
  214|      0|  case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE:         return GET_METRIC_X (OS2, ySubscriptXSize);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (214:3): [True: 0, False: 33.3k]
  ------------------
  215|      0|  case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE:         return GET_METRIC_Y (OS2, ySubscriptYSize);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (215:3): [True: 0, False: 33.3k]
  ------------------
  216|      0|  case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET:       return GET_METRIC_X (OS2, ySubscriptXOffset);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (216:3): [True: 0, False: 33.3k]
  ------------------
  217|      0|  case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET:       return GET_METRIC_Y (OS2, ySubscriptYOffset);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (217:3): [True: 0, False: 33.3k]
  ------------------
  218|      0|  case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE:       return GET_METRIC_X (OS2, ySuperscriptXSize);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (218:3): [True: 0, False: 33.3k]
  ------------------
  219|      0|  case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE:       return GET_METRIC_Y (OS2, ySuperscriptYSize);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (219:3): [True: 0, False: 33.3k]
  ------------------
  220|      0|  case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET:     return GET_METRIC_X (OS2, ySuperscriptXOffset);
  ------------------
  |  |  156|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  157|      0|    ((void) (position && (*position = font->em_scalef_x (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (157:5): [True: 0, False: 0]
  |  |  |  Branch (157:14): [True: 0, False: 0]
  |  |  |  Branch (157:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (220:3): [True: 0, False: 33.3k]
  ------------------
  221|      0|  case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET:     return GET_METRIC_Y (OS2, ySuperscriptYOffset);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (221:3): [True: 0, False: 33.3k]
  ------------------
  222|      0|  case HB_OT_METRICS_TAG_STRIKEOUT_SIZE:              return GET_METRIC_Y (OS2, yStrikeoutSize);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (222:3): [True: 0, False: 33.3k]
  ------------------
  223|      0|  case HB_OT_METRICS_TAG_STRIKEOUT_OFFSET:            return GET_METRIC_Y (OS2, yStrikeoutPosition);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (223:3): [True: 0, False: 33.3k]
  ------------------
  224|      0|  case HB_OT_METRICS_TAG_UNDERLINE_SIZE:              return GET_METRIC_Y (post->table, underlineThickness);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (224:3): [True: 0, False: 33.3k]
  ------------------
  225|      0|  case HB_OT_METRICS_TAG_UNDERLINE_OFFSET:            return GET_METRIC_Y (post->table, underlinePosition);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (225:3): [True: 0, False: 33.3k]
  ------------------
  226|       |
  227|       |  /* Private tags */
  228|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_OS2:    return GET_METRIC_Y (OS2, sTypoAscender);
  ------------------
  |  |  118|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_OS2   HB_TAG ('O','a','s','c')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_OS2:    return GET_METRIC_Y (OS2, sTypoAscender);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (228:3): [True: 0, False: 33.3k]
  ------------------
  229|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_HHEA:   return GET_METRIC_Y (hhea, ascender);
  ------------------
  |  |  119|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_HHEA  HB_TAG ('H','a','s','c')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER_HHEA:   return GET_METRIC_Y (hhea, ascender);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (229:3): [True: 0, False: 33.3k]
  ------------------
  230|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_OS2:   return GET_METRIC_Y (OS2, sTypoDescender);
  ------------------
  |  |  120|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_OS2  HB_TAG ('O','d','s','c')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_OS2:   return GET_METRIC_Y (OS2, sTypoDescender);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (230:3): [True: 0, False: 33.3k]
  ------------------
  231|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_HHEA:  return GET_METRIC_Y (hhea, descender);
  ------------------
  |  |  121|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_HHEA HB_TAG ('H','d','s','c')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER_HHEA:  return GET_METRIC_Y (hhea, descender);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (231:3): [True: 0, False: 33.3k]
  ------------------
  232|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_OS2:    return GET_METRIC_Y (OS2, sTypoLineGap);
  ------------------
  |  |  122|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_OS2   HB_TAG ('O','l','g','p')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_OS2:    return GET_METRIC_Y (OS2, sTypoLineGap);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (232:3): [True: 0, False: 33.3k]
  ------------------
  233|      0|  case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_HHEA:   return GET_METRIC_Y (hhea, lineGap);
  ------------------
  |  |  123|      0|#define _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_HHEA  HB_TAG ('H','l','g','p')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
                case _HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP_HHEA:   return GET_METRIC_Y (hhea, lineGap);
  ------------------
  |  |  159|      0|  (face->table.TABLE->has_data () && \
  |  |  ------------------
  |  |  |  Branch (159:4): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|    ((void) (position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR))), true))
  |  |  ------------------
  |  |  |  |  151|      0|#define GET_VAR hb_ot_metrics_get_variation (font, metrics_tag)
  |  |  ------------------
  |  |  |  Branch (160:5): [True: 0, False: 0]
  |  |  |  Branch (160:14): [True: 0, False: 0]
  |  |  |  Branch (160:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (233:3): [True: 0, False: 33.3k]
  ------------------
  234|      0|#undef GET_METRIC_Y
  235|      0|#undef GET_METRIC_X
  236|      0|#undef GET_VAR
  237|      0|  default:                                        return false;
  ------------------
  |  Branch (237:3): [True: 0, False: 33.3k]
  ------------------
  238|  33.3k|  }
  239|  33.3k|}
hb_ot_metrics_get_variation:
  395|   100k|{
  396|   100k|  return font->face->table.MVAR->get_var (metrics_tag, font->coords, font->num_coords);
  397|   100k|}
hb_ot_metrics_get_x_variation:
  413|  33.3k|{
  414|  33.3k|  return font->em_scalef_x (hb_ot_metrics_get_variation (font, metrics_tag));
  415|  33.3k|}
hb_ot_metrics_get_y_variation:
  431|  33.3k|{
  432|  33.3k|  return font->em_scalef_y (hb_ot_metrics_get_variation (font, metrics_tag));
  433|  33.3k|}
hb-ot-metrics.cc:_ZL23_fix_ascender_descenderf19hb_ot_metrics_tag_t:
   47|  7.83k|{
   48|  7.83k|  if (metrics_tag == HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER ||
  ------------------
  |  Branch (48:7): [True: 2.61k, False: 5.22k]
  ------------------
   49|  7.83k|      metrics_tag == HB_OT_METRICS_TAG_VERTICAL_ASCENDER)
  ------------------
  |  Branch (49:7): [True: 0, False: 5.22k]
  ------------------
   50|  2.61k|    return fabs ((double) value);
   51|  5.22k|  if (metrics_tag == HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER ||
  ------------------
  |  Branch (51:7): [True: 2.61k, False: 2.61k]
  ------------------
   52|  5.22k|      metrics_tag == HB_OT_METRICS_TAG_VERTICAL_DESCENDER)
  ------------------
  |  Branch (52:7): [True: 0, False: 2.61k]
  ------------------
   53|  2.61k|    return -fabs ((double) value);
   54|  2.61k|  return value;
   55|  5.22k|}

_Z32_hb_ot_name_language_for_ms_codej:
  442|  8.29k|{
  443|  8.29k|  return _hb_ot_name_language_for (code,
  444|  8.29k|				   _hb_ms_language_map,
  445|  8.29k|				   ARRAY_LENGTH (_hb_ms_language_map));
  446|  8.29k|}
_Z33_hb_ot_name_language_for_mac_codej:
  450|  7.02k|{
  451|  7.02k|  return _hb_ot_name_language_for (code,
  452|  7.02k|				   _hb_mac_language_map,
  453|  7.02k|				   ARRAY_LENGTH (_hb_mac_language_map));
  454|  7.02k|}
hb-common.cc:_ZL24_hb_ot_name_language_forjPK20hb_ot_language_map_tj:
  428|  15.3k|{
  429|       |#ifdef HB_NO_OT_NAME_LANGUAGE
  430|       |  return HB_LANGUAGE_INVALID;
  431|       |#endif
  432|  15.3k|  auto *entry = hb_bsearch (code, array, len);
  433|       |
  434|  15.3k|  if (entry)
  ------------------
  |  Branch (434:7): [True: 10.1k, False: 5.11k]
  ------------------
  435|  10.1k|    return hb_language_from_string (entry->lang, -1);
  436|       |
  437|  5.11k|  return HB_LANGUAGE_INVALID;
  ------------------
  |  |  334|  5.11k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  438|  15.3k|}
_ZNK20hb_ot_language_map_t3cmpEj:
   41|   108k|  { return key < code ? -1 : key > code ? +1 : 0; }
  ------------------
  |  Branch (41:12): [True: 76.9k, False: 31.5k]
  |  Branch (41:30): [True: 21.3k, False: 10.1k]
  ------------------

hb_ot_name_list_names:
   61|  33.3k|{
   62|  33.3k|  const OT::name_accelerator_t &name = *face->table.name;
   63|  33.3k|  if (num_entries) *num_entries = name.names.length;
  ------------------
  |  Branch (63:7): [True: 0, False: 33.3k]
  ------------------
   64|  33.3k|  return (const hb_ot_name_entry_t *) name.names;
   65|  33.3k|}
hb_ot_name_get_utf8:
  125|  33.3k|{
  126|  33.3k|  return hb_ot_name_get_utf<hb_utf8_t> (face, name_id, language, text_size,
  127|  33.3k|					(hb_utf8_t::codepoint_t *) text);
  128|  33.3k|}
hb_ot_name_get_utf16:
  153|  33.3k|{
  154|  33.3k|  return hb_ot_name_get_utf<hb_utf16_t> (face, name_id, language, text_size, text);
  155|  33.3k|}
hb_ot_name_get_utf32:
  180|  33.3k|{
  181|  33.3k|  return hb_ot_name_get_utf<hb_utf32_t> (face, name_id, language, text_size, text);
  182|  33.3k|}
hb-ot-name.cc:_ZL18hb_ot_name_get_utfI9hb_utf8_tEjP9hb_face_tjPK18hb_language_impl_tPjPNT_11codepoint_tE:
   74|  33.3k|{
   75|  33.3k|  const OT::name_accelerator_t &name = *face->table.name;
   76|       |
   77|  33.3k|  if (!language)
  ------------------
  |  Branch (77:7): [True: 33.3k, False: 0]
  ------------------
   78|  33.3k|    language = hb_language_from_string ("en", 2);
   79|       |
   80|  33.3k|  unsigned int width;
   81|  33.3k|  int idx = name.get_index (name_id, language, &width);
   82|  33.3k|  if (idx != -1)
  ------------------
  |  Branch (82:7): [True: 165, False: 33.1k]
  ------------------
   83|    165|  {
   84|    165|    hb_bytes_t bytes = name.get_name (idx);
   85|       |
   86|    165|    if (width == 2) /* UTF16-BE */
  ------------------
  |  Branch (86:9): [True: 104, False: 61]
  ------------------
   87|    104|      return OT::hb_ot_name_convert_utf<hb_utf16_be_t, utf_t> (bytes, text_size, text);
   88|       |
   89|     61|    if (width == 1) /* ASCII */
  ------------------
  |  Branch (89:9): [True: 61, False: 0]
  ------------------
   90|     61|      return OT::hb_ot_name_convert_utf<hb_ascii_t, utf_t> (bytes, text_size, text);
   91|     61|  }
   92|       |
   93|  33.1k|  if (text_size)
  ------------------
  |  Branch (93:7): [True: 33.1k, False: 0]
  ------------------
   94|  33.1k|  {
   95|  33.1k|    if (*text_size)
  ------------------
  |  Branch (95:9): [True: 33.1k, False: 0]
  ------------------
   96|  33.1k|      *text = 0;
   97|  33.1k|    *text_size = 0;
   98|  33.1k|  }
   99|  33.1k|  return 0;
  100|  33.3k|}
hb-ot-name.cc:_ZL18hb_ot_name_get_utfI13hb_utf16_xe_tItEEjP9hb_face_tjPK18hb_language_impl_tPjPNT_11codepoint_tE:
   74|  33.3k|{
   75|  33.3k|  const OT::name_accelerator_t &name = *face->table.name;
   76|       |
   77|  33.3k|  if (!language)
  ------------------
  |  Branch (77:7): [True: 33.3k, False: 0]
  ------------------
   78|  33.3k|    language = hb_language_from_string ("en", 2);
   79|       |
   80|  33.3k|  unsigned int width;
   81|  33.3k|  int idx = name.get_index (name_id, language, &width);
   82|  33.3k|  if (idx != -1)
  ------------------
  |  Branch (82:7): [True: 165, False: 33.1k]
  ------------------
   83|    165|  {
   84|    165|    hb_bytes_t bytes = name.get_name (idx);
   85|       |
   86|    165|    if (width == 2) /* UTF16-BE */
  ------------------
  |  Branch (86:9): [True: 104, False: 61]
  ------------------
   87|    104|      return OT::hb_ot_name_convert_utf<hb_utf16_be_t, utf_t> (bytes, text_size, text);
   88|       |
   89|     61|    if (width == 1) /* ASCII */
  ------------------
  |  Branch (89:9): [True: 61, False: 0]
  ------------------
   90|     61|      return OT::hb_ot_name_convert_utf<hb_ascii_t, utf_t> (bytes, text_size, text);
   91|     61|  }
   92|       |
   93|  33.1k|  if (text_size)
  ------------------
  |  Branch (93:7): [True: 0, False: 33.1k]
  ------------------
   94|      0|  {
   95|      0|    if (*text_size)
  ------------------
  |  Branch (95:9): [True: 0, False: 0]
  ------------------
   96|      0|      *text = 0;
   97|      0|    *text_size = 0;
   98|      0|  }
   99|  33.1k|  return 0;
  100|  33.3k|}
hb-ot-name.cc:_ZL18hb_ot_name_get_utfI13hb_utf32_xe_tIjLb1EEEjP9hb_face_tjPK18hb_language_impl_tPjPNT_11codepoint_tE:
   74|  33.3k|{
   75|  33.3k|  const OT::name_accelerator_t &name = *face->table.name;
   76|       |
   77|  33.3k|  if (!language)
  ------------------
  |  Branch (77:7): [True: 33.3k, False: 0]
  ------------------
   78|  33.3k|    language = hb_language_from_string ("en", 2);
   79|       |
   80|  33.3k|  unsigned int width;
   81|  33.3k|  int idx = name.get_index (name_id, language, &width);
   82|  33.3k|  if (idx != -1)
  ------------------
  |  Branch (82:7): [True: 165, False: 33.1k]
  ------------------
   83|    165|  {
   84|    165|    hb_bytes_t bytes = name.get_name (idx);
   85|       |
   86|    165|    if (width == 2) /* UTF16-BE */
  ------------------
  |  Branch (86:9): [True: 104, False: 61]
  ------------------
   87|    104|      return OT::hb_ot_name_convert_utf<hb_utf16_be_t, utf_t> (bytes, text_size, text);
   88|       |
   89|     61|    if (width == 1) /* ASCII */
  ------------------
  |  Branch (89:9): [True: 61, False: 0]
  ------------------
   90|     61|      return OT::hb_ot_name_convert_utf<hb_ascii_t, utf_t> (bytes, text_size, text);
   91|     61|  }
   92|       |
   93|  33.1k|  if (text_size)
  ------------------
  |  Branch (93:7): [True: 0, False: 33.1k]
  ------------------
   94|      0|  {
   95|      0|    if (*text_size)
  ------------------
  |  Branch (95:9): [True: 0, False: 0]
  ------------------
   96|      0|      *text = 0;
   97|      0|    *text_size = 0;
   98|      0|  }
   99|  33.1k|  return 0;
  100|  33.3k|}

_ZNK2OT9OS2V1Tail8sanitizeEP21hb_sanitize_context_t:
   49|    894|  {
   50|    894|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    894|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   51|    894|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    894|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    894|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   52|    894|  }
_ZNK2OT9OS2V2Tail8sanitizeEP21hb_sanitize_context_t:
   69|    866|  {
   70|    866|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    866|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   71|    866|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    866|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    866|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   72|    866|  }
_ZNK2OT9OS2V5Tail8sanitizeEP21hb_sanitize_context_t:
  104|    256|  {
  105|    256|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    256|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  106|    256|    return_trace (c->check_struct (this));
  ------------------
  |  |  349|    256|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    256|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  107|    256|  }
_ZNK2OT3OS28has_dataEv:
  120|  1.67k|  bool has_data () const { return usWeightClass || usWidthClass || usFirstCharIndex || usLastCharIndex; }
  ------------------
  |  Branch (120:35): [True: 1.57k, False: 95]
  |  Branch (120:52): [True: 47, False: 48]
  |  Branch (120:68): [True: 19, False: 29]
  |  Branch (120:88): [True: 12, False: 17]
  ------------------
_ZNK2OT3OS216use_typo_metricsEv:
  141|   104k|  bool use_typo_metrics () const { return fsSelection & USE_TYPO_METRICS; }
_ZNK2OT3OS213get_font_pageEv:
  328|    709|  { return (font_page_t) (version == 0 ? fsSelection & 0xFF00 : 0); }
  ------------------
  |  Branch (328:27): [True: 689, False: 20]
  ------------------
_ZNK2OT3OS28sanitizeEP21hb_sanitize_context_t:
  340|  1.03k|  {
  341|  1.03k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.03k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  342|  1.03k|    if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  259|  1.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 39, False: 995]
  |  |  ------------------
  ------------------
                  if (unlikely (!c->check_struct (this))) return_trace (false);
  ------------------
  |  |  349|     39|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     39|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  343|    995|    if (unlikely (version >= 1 && !v1X.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  1.88k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 993]
  |  |  |  Branch (259:47): [True: 894, False: 101]
  |  |  |  Branch (259:47): [True: 2, False: 892]
  |  |  ------------------
  ------------------
                  if (unlikely (version >= 1 && !v1X.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|      2|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      2|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  344|    993|    if (unlikely (version >= 2 && !v2X.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  1.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 992]
  |  |  |  Branch (259:47): [True: 866, False: 127]
  |  |  |  Branch (259:47): [True: 1, False: 865]
  |  |  ------------------
  ------------------
                  if (unlikely (version >= 2 && !v2X.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|      1|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  345|    992|    if (unlikely (version >= 5 && !v5X.sanitize (c))) return_trace (false);
  ------------------
  |  |  259|  1.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 183, False: 809]
  |  |  |  Branch (259:47): [True: 256, False: 736]
  |  |  |  Branch (259:47): [True: 183, False: 73]
  |  |  ------------------
  ------------------
                  if (unlikely (version >= 5 && !v5X.sanitize (c))) return_trace (false);
  ------------------
  |  |  349|    183|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    183|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  346|    809|    return_trace (true);
  ------------------
  |  |  349|    809|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    809|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  347|    992|  }

_ZN2OT4post13accelerator_tD2Ev:
  155|  32.7k|    {
  156|  32.7k|      hb_free (gids_sorted_by_name.get_acquire ());
  ------------------
  |  |  236|  32.7k|#define hb_free hb_free_impl
  ------------------
  157|  32.7k|      table.destroy ();
  158|  32.7k|    }
_ZNK2OT10postV2Tail8sanitizeEP21hb_sanitize_context_t:
   54|    382|  {
   55|    382|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    382|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   56|    382|    return_trace (glyphNameIndex.sanitize (c));
  ------------------
  |  |  349|    382|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    382|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
   57|    382|  }
_ZN2OT4post13accelerator_tC2EP9hb_face_t:
  135|  32.7k|    {
  136|  32.7k|      table = hb_sanitize_context_t ().reference_table<post> (face);
  137|  32.7k|      unsigned int table_length = table.get_length ();
  138|       |
  139|  32.7k|      version = table->version.to_int ();
  140|  32.7k|      if (version != 0x00020000) return;
  ------------------
  |  Branch (140:11): [True: 32.3k, False: 375]
  ------------------
  141|       |
  142|    375|      const postV2Tail &v2 = table->v2X;
  143|       |
  144|    375|      glyphNameIndex = &v2.glyphNameIndex;
  145|    375|      pool = &StructAfter<uint8_t> (v2.glyphNameIndex);
  146|       |
  147|    375|      const uint8_t *end = (const uint8_t *) (const void *) table + table_length;
  148|    375|      index_to_offset.alloc (hb_min (face->get_num_glyphs (), table_length / 8));
  149|    375|      for (const uint8_t *data = pool;
  150|   343k|	   index_to_offset.length < 65535 && data < end && data + *data < end;
  ------------------
  |  Branch (150:5): [True: 343k, False: 1]
  |  Branch (150:39): [True: 343k, False: 216]
  |  Branch (150:53): [True: 343k, False: 158]
  ------------------
  151|   343k|	   data += 1 + *data)
  152|   343k|	index_to_offset.push (data - pool);
  153|    375|    }
_ZNK2OT4post13accelerator_t14get_glyph_nameEjPcj:
  162|  33.2k|    {
  163|  33.2k|      hb_bytes_t s = find_glyph_name (glyph);
  164|  33.2k|      if (!s.length) return false;
  ------------------
  |  Branch (164:11): [True: 33.0k, False: 212]
  ------------------
  165|    212|      if (!buf_len) return true;
  ------------------
  |  Branch (165:11): [True: 0, False: 212]
  ------------------
  166|    212|      unsigned int len = hb_min (buf_len - 1, s.length);
  167|    212|      strncpy (buf, s.arrayZ, len);
  168|    212|      buf[len] = '\0';
  169|    212|      return true;
  170|    212|    }
_ZNK2OT4post13accelerator_t19get_glyph_from_nameEPKciPj:
  174|  33.2k|    {
  175|  33.2k|      unsigned int count = get_glyph_count ();
  176|  33.2k|      if (unlikely (!count)) return false;
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.8k, False: 390]
  |  |  ------------------
  ------------------
  177|       |
  178|    390|      if (len < 0) len = strlen (name);
  ------------------
  |  Branch (178:11): [True: 0, False: 390]
  ------------------
  179|       |
  180|    390|      if (unlikely (!len)) return false;
  ------------------
  |  |  259|    390|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 179, False: 211]
  |  |  ------------------
  ------------------
  181|       |
  182|    211|    retry:
  183|    211|      uint16_t *gids = gids_sorted_by_name.get_acquire ();
  184|       |
  185|    211|      if (unlikely (!gids))
  ------------------
  |  |  259|    211|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 211, False: 0]
  |  |  ------------------
  ------------------
  186|    211|      {
  187|    211|	gids = (uint16_t *) hb_malloc (count * sizeof (gids[0]));
  ------------------
  |  |  233|    211|#define hb_malloc hb_malloc_impl
  ------------------
  188|    211|	if (unlikely (!gids))
  ------------------
  |  |  259|    211|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 210]
  |  |  ------------------
  ------------------
  189|      1|	  return false; /* Anything better?! */
  190|       |
  191|   843k|	for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (191:27): [True: 842k, False: 210]
  ------------------
  192|   842k|	  gids[i] = i;
  193|    210|	hb_qsort (gids, count, sizeof (gids[0]), cmp_gids, (void *) this);
  194|       |
  195|    210|	if (unlikely (!gids_sorted_by_name.cmpexch (nullptr, gids)))
  ------------------
  |  |  259|    210|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 210]
  |  |  ------------------
  ------------------
  196|      0|	{
  197|      0|	  hb_free (gids);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  198|      0|	  goto retry;
  199|      0|	}
  200|    210|      }
  201|       |
  202|    210|      hb_bytes_t st (name, len);
  203|    210|      auto* gid = hb_bsearch (st, gids, count, sizeof (gids[0]), cmp_key, (void *) this);
  204|    210|      if (gid)
  ------------------
  |  Branch (204:11): [True: 29, False: 181]
  ------------------
  205|     29|      {
  206|     29|	*glyph = *gid;
  207|     29|	return true;
  208|     29|      }
  209|       |
  210|    181|      return false;
  211|    210|    }
_ZNK2OT4post13accelerator_t15get_glyph_countEv:
  218|  33.2k|    {
  219|  33.2k|      if (version == 0x00010000)
  ------------------
  |  Branch (219:11): [True: 43, False: 33.1k]
  ------------------
  220|     43|	return format1_names_length;
  221|       |
  222|  33.1k|      if (version == 0x00020000)
  ------------------
  |  Branch (222:11): [True: 375, False: 32.8k]
  ------------------
  223|    375|	return glyphNameIndex->len;
  224|       |
  225|  32.8k|      return 0;
  226|  33.1k|    }
_ZN2OT4post13accelerator_t8cmp_gidsEPKvS3_Pv:
  229|  2.66M|    {
  230|  2.66M|      const accelerator_t *thiz = (const accelerator_t *) arg;
  231|  2.66M|      uint16_t a = * (const uint16_t *) pa;
  232|  2.66M|      uint16_t b = * (const uint16_t *) pb;
  233|  2.66M|      return thiz->find_glyph_name (b).cmp (thiz->find_glyph_name (a));
  234|  2.66M|    }
_ZN2OT4post13accelerator_t7cmp_keyEPKvS3_Pv:
  237|  1.39k|    {
  238|  1.39k|      const accelerator_t *thiz = (const accelerator_t *) arg;
  239|  1.39k|      const hb_bytes_t *key = (const hb_bytes_t *) pk;
  240|  1.39k|      uint16_t o = * (const uint16_t *) po;
  241|  1.39k|      return thiz->find_glyph_name (o).cmp (*key);
  242|  1.39k|    }
_ZNK2OT4post13accelerator_t15find_glyph_nameEj:
  245|  5.35M|    {
  246|  5.35M|      if (version == 0x00010000)
  ------------------
  |  Branch (246:11): [True: 39.9k, False: 5.31M]
  ------------------
  247|  39.9k|      {
  248|  39.9k|	if (glyph >= format1_names_length)
  ------------------
  |  Branch (248:6): [True: 33, False: 39.8k]
  ------------------
  249|     33|	  return hb_bytes_t ();
  250|       |
  251|  39.8k|	return format1_names (glyph);
  252|  39.9k|      }
  253|       |
  254|  5.31M|      if (version != 0x00020000 || glyph >= glyphNameIndex->len)
  ------------------
  |  Branch (254:11): [True: 32.8k, False: 5.28M]
  |  Branch (254:36): [True: 170, False: 5.28M]
  ------------------
  255|  32.9k|	return hb_bytes_t ();
  256|       |
  257|  5.28M|      unsigned int index = glyphNameIndex->arrayZ[glyph];
  258|  5.28M|      if (index < format1_names_length)
  ------------------
  |  Branch (258:11): [True: 2.27M, False: 3.01M]
  ------------------
  259|  2.27M|	return format1_names (index);
  260|  3.01M|      index -= format1_names_length;
  261|       |
  262|  3.01M|      if (index >= index_to_offset.length)
  ------------------
  |  Branch (262:11): [True: 960k, False: 2.04M]
  ------------------
  263|   960k|	return hb_bytes_t ();
  264|  2.04M|      unsigned int offset = index_to_offset[index];
  265|       |
  266|  2.04M|      const uint8_t *data = pool + offset;
  267|  2.04M|      unsigned int name_length = *data;
  268|  2.04M|      data++;
  269|       |
  270|  2.04M|      return hb_bytes_t ((const char *) data, name_length);
  271|  3.01M|    }
_ZNK2OT4post8sanitizeEP21hb_sanitize_context_t:
  284|  1.18k|  {
  285|  1.18k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.18k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  286|  1.18k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  7.62k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 382, False: 668]
  |  |  |  Branch (349:45): [True: 375, False: 7]
  |  |  |  Branch (349:45): [True: 43, False: 1.05k]
  |  |  |  Branch (349:45): [True: 229, False: 446]
  |  |  |  Branch (349:45): [True: 1.09k, False: 91]
  |  |  ------------------
  ------------------
  287|  1.18k|		  (version.to_int () == 0x00010000 ||
  288|  1.18k|		   (version.to_int () == 0x00020000 && v2X.sanitize (c)) ||
  289|  1.18k|		   version.to_int () == 0x00030000));
  290|  1.18k|  }
_ZN2OT18post_accelerator_tC2EP9hb_face_t:
  329|  32.7k|  post_accelerator_t (hb_face_t *face) : post::accelerator_t (face) {}

_Z54_hb_ot_shape_fallback_mark_position_recategorize_marksPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  172|   459k|{
  173|       |#ifdef HB_NO_OT_SHAPE_FALLBACK
  174|       |  return;
  175|       |#endif
  176|       |
  177|   459k|  unsigned int count = buffer->len;
  178|   459k|  hb_glyph_info_t *info = buffer->info;
  179|  1.69M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (179:28): [True: 1.23M, False: 459k]
  ------------------
  180|  1.23M|    if (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
  ------------------
  |  Branch (180:9): [True: 11.7k, False: 1.22M]
  ------------------
  181|  11.7k|      unsigned int combining_class = _hb_glyph_info_get_modified_combining_class (&info[i]);
  182|  11.7k|      combining_class = recategorize_combining_class (info[i].codepoint, combining_class);
  183|  11.7k|      _hb_glyph_info_set_modified_combining_class (&info[i], combining_class);
  184|  11.7k|    }
  185|   459k|}
_Z35_hb_ot_shape_fallback_mark_positionPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tb:
  444|   459k|{
  445|       |#ifdef HB_NO_OT_SHAPE_FALLBACK
  446|       |  return;
  447|       |#endif
  448|       |
  449|   459k|  if (!buffer->message (font, "start fallback mark"))
  ------------------
  |  Branch (449:7): [True: 0, False: 459k]
  ------------------
  450|      0|    return;
  451|       |
  452|   459k|  _hb_buffer_assert_gsubgpos_vars (buffer);
  453|       |
  454|   459k|  unsigned int start = 0;
  455|   459k|  unsigned int count = buffer->len;
  456|   459k|  hb_glyph_info_t *info = buffer->info;
  457|  16.9M|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (457:28): [True: 16.5M, False: 459k]
  ------------------
  458|  16.5M|    if (likely (!_hb_glyph_info_is_unicode_mark (&info[i]))) {
  ------------------
  |  |  258|  16.5M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 15.5M, False: 966k]
  |  |  ------------------
  ------------------
  459|  15.5M|      position_cluster (plan, font, buffer, start, i, adjust_offsets_when_zeroing);
  460|  15.5M|      start = i;
  461|  15.5M|    }
  462|   459k|  position_cluster (plan, font, buffer, start, count, adjust_offsets_when_zeroing);
  463|       |
  464|   459k|  (void) buffer->message (font, "end fallback mark");
  465|   459k|}
_Z26_hb_ot_shape_fallback_kernPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  494|   463k|{
  495|       |#ifdef HB_NO_OT_SHAPE_FALLBACK
  496|       |  return;
  497|       |#endif
  498|       |
  499|   463k|#ifndef HB_DISABLE_DEPRECATED
  500|   463k|  if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
  ------------------
  |  |  271|   463k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 463k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (500:7): [True: 463k, False: 0]
  ------------------
  501|   463k|      !font->has_glyph_h_kerning_func () :
  502|   463k|      !font->has_glyph_v_kerning_func ())
  503|   463k|    return;
  504|       |
  505|      0|  if (!buffer->message (font, "start fallback kern"))
  ------------------
  |  Branch (505:7): [True: 0, False: 0]
  ------------------
  506|      0|    return;
  507|       |
  508|      0|  bool reverse = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
  ------------------
  |  |  298|      0|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  ------------------
  509|       |
  510|      0|  if (reverse)
  ------------------
  |  Branch (510:7): [True: 0, False: 0]
  ------------------
  511|      0|    buffer->reverse ();
  512|       |
  513|      0|  hb_ot_shape_fallback_kern_driver_t driver (font, buffer);
  514|      0|  OT::hb_kern_machine_t<hb_ot_shape_fallback_kern_driver_t> machine (driver);
  515|      0|  machine.kern (font, buffer, plan->kern_mask, false);
  516|       |
  517|      0|  if (reverse)
  ------------------
  |  Branch (517:7): [True: 0, False: 0]
  ------------------
  518|      0|    buffer->reverse ();
  519|       |
  520|      0|  (void) buffer->message (font, "end fallback kern");
  521|      0|#endif
  522|      0|}
_Z28_hb_ot_shape_fallback_spacesPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  530|    146|{
  531|    146|  hb_glyph_info_t *info = buffer->info;
  532|    146|  hb_glyph_position_t *pos = buffer->pos;
  533|    146|  bool horizontal = HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction);
  ------------------
  |  |  271|    146|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  ------------------
  534|    146|  unsigned int count = buffer->len;
  535|  38.7k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (535:28): [True: 38.5k, False: 146]
  ------------------
  536|  38.5k|    if (_hb_glyph_info_is_unicode_space (&info[i]) && !_hb_glyph_info_ligated (&info[i]))
  ------------------
  |  Branch (536:9): [True: 26.1k, False: 12.3k]
  |  Branch (536:55): [True: 26.1k, False: 1]
  ------------------
  537|  26.1k|    {
  538|       |      /* If font had no ASCII space and we used the invisible glyph, give it a 1/4 EM default advance. */
  539|  26.1k|      if (buffer->invisible && info[i].codepoint == buffer->invisible)
  ------------------
  |  Branch (539:11): [True: 0, False: 26.1k]
  |  Branch (539:32): [True: 0, False: 0]
  ------------------
  540|      0|      {
  541|      0|        if (horizontal)
  ------------------
  |  Branch (541:13): [True: 0, False: 0]
  ------------------
  542|      0|	  pos[i].x_advance = +font->x_scale / 4;
  543|      0|        else
  544|      0|	  pos[i].y_advance = -font->y_scale / 4;
  545|      0|      }
  546|       |
  547|  26.1k|      hb_unicode_funcs_t::space_t space_type = _hb_glyph_info_get_unicode_space_fallback_type (&info[i]);
  548|  26.1k|      hb_codepoint_t glyph;
  549|  26.1k|      typedef hb_unicode_funcs_t t;
  550|  26.1k|      switch (space_type)
  ------------------
  |  Branch (550:15): [True: 0, False: 26.1k]
  ------------------
  551|  26.1k|      {
  552|    448|	case t::NOT_SPACE: /* Shouldn't happen. */
  ------------------
  |  Branch (552:2): [True: 448, False: 25.7k]
  ------------------
  553|    448|	case t::SPACE:
  ------------------
  |  Branch (553:2): [True: 0, False: 26.1k]
  ------------------
  554|    448|	  break;
  555|       |
  556|    844|	case t::SPACE_EM:
  ------------------
  |  Branch (556:2): [True: 844, False: 25.3k]
  ------------------
  557|  10.2k|	case t::SPACE_EM_2:
  ------------------
  |  Branch (557:2): [True: 9.40k, False: 16.7k]
  ------------------
  558|  12.9k|	case t::SPACE_EM_3:
  ------------------
  |  Branch (558:2): [True: 2.74k, False: 23.4k]
  ------------------
  559|  14.1k|	case t::SPACE_EM_4:
  ------------------
  |  Branch (559:2): [True: 1.16k, False: 25.0k]
  ------------------
  560|  14.4k|	case t::SPACE_EM_5:
  ------------------
  |  Branch (560:2): [True: 319, False: 25.8k]
  ------------------
  561|  14.6k|	case t::SPACE_EM_6:
  ------------------
  |  Branch (561:2): [True: 213, False: 25.9k]
  ------------------
  562|  18.5k|	case t::SPACE_EM_16:
  ------------------
  |  Branch (562:2): [True: 3.88k, False: 22.3k]
  ------------------
  563|  18.5k|	  if (horizontal)
  ------------------
  |  Branch (563:8): [True: 18.5k, False: 0]
  ------------------
  564|  18.5k|	    pos[i].x_advance = +(font->x_scale + ((int) space_type)/2) / (int) space_type;
  565|      0|	  else
  566|      0|	    pos[i].y_advance = -(font->y_scale + ((int) space_type)/2) / (int) space_type;
  567|  18.5k|	  break;
  568|       |
  569|     11|	case t::SPACE_4_EM_18:
  ------------------
  |  Branch (569:2): [True: 11, False: 26.1k]
  ------------------
  570|     11|	  if (horizontal)
  ------------------
  |  Branch (570:8): [True: 11, False: 0]
  ------------------
  571|     11|	    pos[i].x_advance = (int64_t) +font->x_scale * 4 / 18;
  572|      0|	  else
  573|      0|	    pos[i].y_advance = (int64_t) -font->y_scale * 4 / 18;
  574|     11|	  break;
  575|       |
  576|    628|	case t::SPACE_FIGURE:
  ------------------
  |  Branch (576:2): [True: 628, False: 25.5k]
  ------------------
  577|  2.42k|	  for (char u = '0'; u <= '9'; u++)
  ------------------
  |  Branch (577:23): [True: 2.40k, False: 21]
  ------------------
  578|  2.40k|	    if (font->get_nominal_glyph (u, &glyph))
  ------------------
  |  Branch (578:10): [True: 607, False: 1.80k]
  ------------------
  579|    607|	    {
  580|    607|	      if (horizontal)
  ------------------
  |  Branch (580:12): [True: 607, False: 0]
  ------------------
  581|    607|		pos[i].x_advance = font->get_glyph_h_advance (glyph);
  582|      0|	      else
  583|      0|		pos[i].y_advance = font->get_glyph_v_advance (glyph);
  584|    607|	      break;
  585|    607|	    }
  586|    628|	  break;
  587|       |
  588|  6.52k|	case t::SPACE_PUNCTUATION:
  ------------------
  |  Branch (588:2): [True: 6.52k, False: 19.6k]
  ------------------
  589|  6.52k|	  if (font->get_nominal_glyph ('.', &glyph) ||
  ------------------
  |  Branch (589:8): [True: 2.78k, False: 3.74k]
  ------------------
  590|  6.52k|	      font->get_nominal_glyph (',', &glyph))
  ------------------
  |  Branch (590:8): [True: 2.64k, False: 1.10k]
  ------------------
  591|  5.42k|	  {
  592|  5.42k|	    if (horizontal)
  ------------------
  |  Branch (592:10): [True: 5.42k, False: 0]
  ------------------
  593|  5.42k|	      pos[i].x_advance = font->get_glyph_h_advance (glyph);
  594|      0|	    else
  595|      0|	      pos[i].y_advance = font->get_glyph_v_advance (glyph);
  596|  5.42k|	  }
  597|  6.52k|	  break;
  598|       |
  599|     10|	case t::SPACE_NARROW:
  ------------------
  |  Branch (599:2): [True: 10, False: 26.1k]
  ------------------
  600|       |	  /* Half-space?
  601|       |	   * Unicode doc https://unicode.org/charts/PDF/U2000.pdf says ~1/4 or 1/5 of EM.
  602|       |	   * However, in my testing, many fonts have their regular space being about that
  603|       |	   * size.  To me, a percentage of the space width makes more sense.  Half is as
  604|       |	   * good as any. */
  605|     10|	  if (horizontal)
  ------------------
  |  Branch (605:8): [True: 10, False: 0]
  ------------------
  606|     10|	    pos[i].x_advance /= 2;
  607|      0|	  else
  608|      0|	    pos[i].y_advance /= 2;
  609|     10|	  break;
  610|  26.1k|      }
  611|  26.1k|    }
  612|    146|}
hb-ot-shape-fallback.cc:_ZL28recategorize_combining_classjj:
   37|  11.7k|{
   38|  11.7k|  if (klass >= 200)
  ------------------
  |  Branch (38:7): [True: 5.76k, False: 6.01k]
  ------------------
   39|  5.76k|    return klass;
   40|       |
   41|       |  /* Thai / Lao need some per-character work. */
   42|  6.01k|  if ((u & ~0xFF) == 0x0E00u)
  ------------------
  |  Branch (42:7): [True: 476, False: 5.53k]
  ------------------
   43|    476|  {
   44|    476|    if (unlikely (klass == 0))
  ------------------
  |  |  259|    476|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 390, False: 86]
  |  |  ------------------
  ------------------
   45|    390|    {
   46|    390|      switch (u)
  ------------------
  |  Branch (46:15): [True: 18, False: 372]
  ------------------
   47|    390|      {
   48|     49|	case 0x0E31u:
  ------------------
  |  Branch (48:2): [True: 49, False: 341]
  ------------------
   49|     63|	case 0x0E34u:
  ------------------
  |  Branch (49:2): [True: 14, False: 376]
  ------------------
   50|     81|	case 0x0E35u:
  ------------------
  |  Branch (50:2): [True: 18, False: 372]
  ------------------
   51|    124|	case 0x0E36u:
  ------------------
  |  Branch (51:2): [True: 43, False: 347]
  ------------------
   52|    137|	case 0x0E37u:
  ------------------
  |  Branch (52:2): [True: 13, False: 377]
  ------------------
   53|    155|	case 0x0E47u:
  ------------------
  |  Branch (53:2): [True: 18, False: 372]
  ------------------
   54|    165|	case 0x0E4Cu:
  ------------------
  |  Branch (54:2): [True: 10, False: 380]
  ------------------
   55|    175|	case 0x0E4Du:
  ------------------
  |  Branch (55:2): [True: 10, False: 380]
  ------------------
   56|    199|	case 0x0E4Eu:
  ------------------
  |  Branch (56:2): [True: 24, False: 366]
  ------------------
   57|    199|	  klass = HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
   58|    199|	  break;
   59|       |
   60|     12|	case 0x0EB1u:
  ------------------
  |  Branch (60:2): [True: 12, False: 378]
  ------------------
   61|     29|	case 0x0EB4u:
  ------------------
  |  Branch (61:2): [True: 17, False: 373]
  ------------------
   62|     48|	case 0x0EB5u:
  ------------------
  |  Branch (62:2): [True: 19, False: 371]
  ------------------
   63|     58|	case 0x0EB6u:
  ------------------
  |  Branch (63:2): [True: 10, False: 380]
  ------------------
   64|     97|	case 0x0EB7u:
  ------------------
  |  Branch (64:2): [True: 39, False: 351]
  ------------------
   65|    113|	case 0x0EBBu:
  ------------------
  |  Branch (65:2): [True: 16, False: 374]
  ------------------
   66|    145|	case 0x0ECCu:
  ------------------
  |  Branch (66:2): [True: 32, False: 358]
  ------------------
   67|    155|	case 0x0ECDu:
  ------------------
  |  Branch (67:2): [True: 10, False: 380]
  ------------------
   68|    155|	  klass = HB_UNICODE_COMBINING_CLASS_ABOVE;
   69|    155|	  break;
   70|       |
   71|     18|	case 0x0EBCu:
  ------------------
  |  Branch (71:2): [True: 18, False: 372]
  ------------------
   72|     18|	  klass = HB_UNICODE_COMBINING_CLASS_BELOW;
   73|     18|	  break;
   74|    390|      }
   75|    390|    } else {
   76|       |      /* Thai virama is below-right */
   77|     86|      if (u == 0x0E3Au)
  ------------------
  |  Branch (77:11): [True: 28, False: 58]
  ------------------
   78|     28|	klass = HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
   79|     86|    }
   80|    476|  }
   81|       |
   82|  6.01k|  switch (klass)
  ------------------
  |  Branch (82:11): [True: 3.01k, False: 2.99k]
  ------------------
   83|  6.01k|  {
   84|       |
   85|       |    /* Hebrew */
   86|       |
   87|     81|    case HB_MODIFIED_COMBINING_CLASS_CCC10: /* sheva */
  ------------------
  |  |  282|     81|#define HB_MODIFIED_COMBINING_CLASS_CCC10 22 /* sheva */
  ------------------
  |  Branch (87:5): [True: 81, False: 5.92k]
  ------------------
   88|     92|    case HB_MODIFIED_COMBINING_CLASS_CCC11: /* hataf segol */
  ------------------
  |  |  283|     92|#define HB_MODIFIED_COMBINING_CLASS_CCC11 15 /* hataf segol */
  ------------------
  |  Branch (88:5): [True: 11, False: 5.99k]
  ------------------
   89|    106|    case HB_MODIFIED_COMBINING_CLASS_CCC12: /* hataf patah */
  ------------------
  |  |  284|    106|#define HB_MODIFIED_COMBINING_CLASS_CCC12 16 /* hataf patah */
  ------------------
  |  Branch (89:5): [True: 14, False: 5.99k]
  ------------------
   90|    160|    case HB_MODIFIED_COMBINING_CLASS_CCC13: /* hataf qamats */
  ------------------
  |  |  285|    160|#define HB_MODIFIED_COMBINING_CLASS_CCC13 17 /* hataf qamats */
  ------------------
  |  Branch (90:5): [True: 54, False: 5.95k]
  ------------------
   91|    206|    case HB_MODIFIED_COMBINING_CLASS_CCC14: /* hiriq */
  ------------------
  |  |  286|    206|#define HB_MODIFIED_COMBINING_CLASS_CCC14 23 /* hiriq */
  ------------------
  |  Branch (91:5): [True: 46, False: 5.96k]
  ------------------
   92|    243|    case HB_MODIFIED_COMBINING_CLASS_CCC15: /* tsere */
  ------------------
  |  |  287|    243|#define HB_MODIFIED_COMBINING_CLASS_CCC15 18 /* tsere */
  ------------------
  |  Branch (92:5): [True: 37, False: 5.97k]
  ------------------
   93|    258|    case HB_MODIFIED_COMBINING_CLASS_CCC16: /* segol */
  ------------------
  |  |  288|    258|#define HB_MODIFIED_COMBINING_CLASS_CCC16 19 /* segol */
  ------------------
  |  Branch (93:5): [True: 15, False: 5.99k]
  ------------------
   94|    355|    case HB_MODIFIED_COMBINING_CLASS_CCC17: /* patah */
  ------------------
  |  |  289|    355|#define HB_MODIFIED_COMBINING_CLASS_CCC17 20 /* patah */
  ------------------
  |  Branch (94:5): [True: 97, False: 5.91k]
  ------------------
   95|    419|    case HB_MODIFIED_COMBINING_CLASS_CCC18: /* qamats & qamats qatan */
  ------------------
  |  |  290|    419|#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats & qamats qatan */
  ------------------
  |  Branch (95:5): [True: 64, False: 5.94k]
  ------------------
   96|    520|    case HB_MODIFIED_COMBINING_CLASS_CCC20: /* qubuts */
  ------------------
  |  |  292|    520|#define HB_MODIFIED_COMBINING_CLASS_CCC20 24 /* qubuts */
  ------------------
  |  Branch (96:5): [True: 101, False: 5.90k]
  ------------------
   97|    630|    case HB_MODIFIED_COMBINING_CLASS_CCC22: /* meteg */
  ------------------
  |  |  294|    630|#define HB_MODIFIED_COMBINING_CLASS_CCC22 25 /* meteg */
  ------------------
  |  Branch (97:5): [True: 110, False: 5.90k]
  ------------------
   98|    630|      return HB_UNICODE_COMBINING_CLASS_BELOW;
   99|       |
  100|    266|    case HB_MODIFIED_COMBINING_CLASS_CCC23: /* rafe */
  ------------------
  |  |  295|    266|#define HB_MODIFIED_COMBINING_CLASS_CCC23 13 /* rafe */
  ------------------
  |  Branch (100:5): [True: 266, False: 5.74k]
  ------------------
  101|    266|      return HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE;
  102|       |
  103|    101|    case HB_MODIFIED_COMBINING_CLASS_CCC24: /* shin dot */
  ------------------
  |  |  296|    101|#define HB_MODIFIED_COMBINING_CLASS_CCC24 10 /* shin dot */
  ------------------
  |  Branch (103:5): [True: 101, False: 5.90k]
  ------------------
  104|    101|      return HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
  105|       |
  106|     43|    case HB_MODIFIED_COMBINING_CLASS_CCC25: /* sin dot */
  ------------------
  |  |  297|     43|#define HB_MODIFIED_COMBINING_CLASS_CCC25 11 /* sin dot */
  ------------------
  |  Branch (106:5): [True: 43, False: 5.96k]
  ------------------
  107|    111|    case HB_MODIFIED_COMBINING_CLASS_CCC19: /* holam & holam haser for vav */
  ------------------
  |  |  291|    111|#define HB_MODIFIED_COMBINING_CLASS_CCC19 14 /* holam & holam haser for vav*/
  ------------------
  |  Branch (107:5): [True: 68, False: 5.94k]
  ------------------
  108|    111|      return HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT;
  109|       |
  110|     82|    case HB_MODIFIED_COMBINING_CLASS_CCC26: /* point varika */
  ------------------
  |  |  298|     82|#define HB_MODIFIED_COMBINING_CLASS_CCC26 26 /* point varika */
  ------------------
  |  Branch (110:5): [True: 82, False: 5.92k]
  ------------------
  111|     82|      return HB_UNICODE_COMBINING_CLASS_ABOVE;
  112|       |
  113|  1.45k|    case HB_MODIFIED_COMBINING_CLASS_CCC21: /* dagesh */
  ------------------
  |  |  293|  1.45k|#define HB_MODIFIED_COMBINING_CLASS_CCC21 12 /* dagesh */
  ------------------
  |  Branch (113:5): [True: 1.45k, False: 4.55k]
  ------------------
  114|  1.45k|      break;
  115|       |
  116|       |
  117|       |    /* Arabic and Syriac */
  118|       |
  119|     15|    case HB_MODIFIED_COMBINING_CLASS_CCC27: /* fathatan */
  ------------------
  |  |  307|     15|#define HB_MODIFIED_COMBINING_CLASS_CCC27 28 /* fathatan */
  ------------------
  |  Branch (119:5): [True: 15, False: 5.99k]
  ------------------
  120|     26|    case HB_MODIFIED_COMBINING_CLASS_CCC28: /* dammatan */
  ------------------
  |  |  308|     26|#define HB_MODIFIED_COMBINING_CLASS_CCC28 29 /* dammatan */
  ------------------
  |  Branch (120:5): [True: 11, False: 5.99k]
  ------------------
  121|     67|    case HB_MODIFIED_COMBINING_CLASS_CCC30: /* fatha */
  ------------------
  |  |  310|     67|#define HB_MODIFIED_COMBINING_CLASS_CCC30 31 /* fatha */
  ------------------
  |  Branch (121:5): [True: 41, False: 5.96k]
  ------------------
  122|     94|    case HB_MODIFIED_COMBINING_CLASS_CCC31: /* damma */
  ------------------
  |  |  311|     94|#define HB_MODIFIED_COMBINING_CLASS_CCC31 32 /* damma */
  ------------------
  |  Branch (122:5): [True: 27, False: 5.98k]
  ------------------
  123|    115|    case HB_MODIFIED_COMBINING_CLASS_CCC33: /* shadda */
  ------------------
  |  |  313|    115|#define HB_MODIFIED_COMBINING_CLASS_CCC33 27 /* shadda */
  ------------------
  |  Branch (123:5): [True: 21, False: 5.98k]
  ------------------
  124|    144|    case HB_MODIFIED_COMBINING_CLASS_CCC34: /* sukun */
  ------------------
  |  |  314|    144|#define HB_MODIFIED_COMBINING_CLASS_CCC34 34 /* sukun */
  ------------------
  |  Branch (124:5): [True: 29, False: 5.98k]
  ------------------
  125|    154|    case HB_MODIFIED_COMBINING_CLASS_CCC35: /* superscript alef */
  ------------------
  |  |  315|    154|#define HB_MODIFIED_COMBINING_CLASS_CCC35 35 /* superscript alef */
  ------------------
  |  Branch (125:5): [True: 10, False: 6.00k]
  ------------------
  126|    168|    case HB_MODIFIED_COMBINING_CLASS_CCC36: /* superscript alaph */
  ------------------
  |  |  318|    168|#define HB_MODIFIED_COMBINING_CLASS_CCC36 36 /* superscript alaph */
  ------------------
  |  Branch (126:5): [True: 14, False: 5.99k]
  ------------------
  127|    168|      return HB_UNICODE_COMBINING_CLASS_ABOVE;
  128|       |
  129|     11|    case HB_MODIFIED_COMBINING_CLASS_CCC29: /* kasratan */
  ------------------
  |  |  309|     11|#define HB_MODIFIED_COMBINING_CLASS_CCC29 30 /* kasratan */
  ------------------
  |  Branch (129:5): [True: 11, False: 5.99k]
  ------------------
  130|     79|    case HB_MODIFIED_COMBINING_CLASS_CCC32: /* kasra */
  ------------------
  |  |  312|     79|#define HB_MODIFIED_COMBINING_CLASS_CCC32 33 /* kasra */
  ------------------
  |  Branch (130:5): [True: 68, False: 5.94k]
  ------------------
  131|     79|      return HB_UNICODE_COMBINING_CLASS_BELOW;
  132|       |
  133|       |
  134|       |    /* Thai */
  135|       |
  136|     14|    case HB_MODIFIED_COMBINING_CLASS_CCC103: /* sara u / sara uu */
  ------------------
  |  |  336|     14|#define HB_MODIFIED_COMBINING_CLASS_CCC103 3 /* sara u / sara uu */
  ------------------
  |  Branch (136:5): [True: 14, False: 5.99k]
  ------------------
  137|     14|      return HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT;
  138|       |
  139|     21|    case HB_MODIFIED_COMBINING_CLASS_CCC107: /* mai */
  ------------------
  |  |  337|     21|#define HB_MODIFIED_COMBINING_CLASS_CCC107 107 /* mai * */
  ------------------
  |  Branch (139:5): [True: 21, False: 5.98k]
  ------------------
  140|     21|      return HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT;
  141|       |
  142|       |
  143|       |    /* Lao */
  144|       |
  145|     10|    case HB_MODIFIED_COMBINING_CLASS_CCC118: /* sign u / sign uu */
  ------------------
  |  |  340|     10|#define HB_MODIFIED_COMBINING_CLASS_CCC118 118 /* sign u / sign uu */
  ------------------
  |  Branch (145:5): [True: 10, False: 6.00k]
  ------------------
  146|     10|      return HB_UNICODE_COMBINING_CLASS_BELOW;
  147|       |
  148|     13|    case HB_MODIFIED_COMBINING_CLASS_CCC122: /* mai */
  ------------------
  |  |  341|     13|#define HB_MODIFIED_COMBINING_CLASS_CCC122 122 /* mai * */
  ------------------
  |  Branch (148:5): [True: 13, False: 5.99k]
  ------------------
  149|     13|      return HB_UNICODE_COMBINING_CLASS_ABOVE;
  150|       |
  151|       |
  152|       |    /* Tibetan */
  153|       |
  154|     11|    case HB_MODIFIED_COMBINING_CLASS_CCC129: /* sign aa */
  ------------------
  |  |  348|     11|#define HB_MODIFIED_COMBINING_CLASS_CCC129 129 /* sign aa */
  ------------------
  |  Branch (154:5): [True: 11, False: 5.99k]
  ------------------
  155|     11|      return HB_UNICODE_COMBINING_CLASS_BELOW;
  156|       |
  157|     15|    case HB_MODIFIED_COMBINING_CLASS_CCC130: /* sign i*/
  ------------------
  |  |  349|     15|#define HB_MODIFIED_COMBINING_CLASS_CCC130 132 /* sign i */
  ------------------
  |  Branch (157:5): [True: 15, False: 5.99k]
  ------------------
  158|     15|      return HB_UNICODE_COMBINING_CLASS_ABOVE;
  159|       |
  160|     14|    case HB_MODIFIED_COMBINING_CLASS_CCC132: /* sign u */
  ------------------
  |  |  350|     14|#define HB_MODIFIED_COMBINING_CLASS_CCC132 131 /* sign u */
  ------------------
  |  Branch (160:5): [True: 14, False: 5.99k]
  ------------------
  161|     14|      return HB_UNICODE_COMBINING_CLASS_BELOW;
  162|       |
  163|  6.01k|  }
  164|       |
  165|  4.47k|  return klass;
  166|  6.01k|}
hb-ot-shape-fallback.cc:_ZL16position_clusterPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tjjb:
  418|  16.0M|{
  419|  16.0M|  if (end - start < 2)
  ------------------
  |  Branch (419:7): [True: 16.0M, False: 9.90k]
  ------------------
  420|  16.0M|    return;
  421|       |
  422|       |  /* Find the base glyph */
  423|  9.90k|  hb_glyph_info_t *info = buffer->info;
  424|  52.4k|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (424:32): [True: 42.5k, False: 9.90k]
  ------------------
  425|  42.5k|    if (!_hb_glyph_info_is_unicode_mark (&info[i]))
  ------------------
  |  Branch (425:9): [True: 9.71k, False: 32.8k]
  ------------------
  426|  9.71k|    {
  427|       |      /* Find mark glyphs */
  428|  9.71k|      unsigned int j;
  429|   943k|      for (j = i + 1; j < end; j++)
  ------------------
  |  Branch (429:23): [True: 933k, False: 9.71k]
  ------------------
  430|   933k|	if (!_hb_glyph_info_is_unicode_mark (&info[j]))
  ------------------
  |  Branch (430:6): [True: 0, False: 933k]
  ------------------
  431|      0|	  break;
  432|       |
  433|  9.71k|      position_around_base (plan, font, buffer, i, j, adjust_offsets_when_zeroing);
  434|       |
  435|  9.71k|      i = j - 1;
  436|  9.71k|    }
  437|  9.90k|}
hb-ot-shape-fallback.cc:_ZL20position_around_basePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tjjb:
  322|  9.71k|{
  323|  9.71k|  hb_direction_t horiz_dir = HB_DIRECTION_INVALID;
  324|       |
  325|  9.71k|  buffer->unsafe_to_break (base, end);
  326|       |
  327|  9.71k|  hb_glyph_extents_t base_extents;
  328|  9.71k|  if (!font->get_glyph_extents (buffer->info[base].codepoint,
  ------------------
  |  Branch (328:7): [True: 5.55k, False: 4.16k]
  ------------------
  329|  9.71k|				&base_extents))
  330|  5.55k|  {
  331|       |    /* If extents don't work, zero marks and go home. */
  332|  5.55k|    zero_mark_advances (buffer, base + 1, end, adjust_offsets_when_zeroing);
  333|  5.55k|    return;
  334|  5.55k|  }
  335|  4.16k|  base_extents.y_bearing += buffer->pos[base].y_offset;
  336|       |  /* Use horizontal advance for horizontal positioning.
  337|       |   * Generally a better idea.  Also works for zero-ink glyphs.  See:
  338|       |   * https://github.com/harfbuzz/harfbuzz/issues/1532 */
  339|  4.16k|  base_extents.x_bearing = 0;
  340|  4.16k|  base_extents.width = font->get_glyph_h_advance (buffer->info[base].codepoint);
  341|       |
  342|  4.16k|  unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[base]);
  343|       |  /* Use integer for num_lig_components such that it doesn't convert to unsigned
  344|       |   * when we divide or multiply by it. */
  345|  4.16k|  int num_lig_components = _hb_glyph_info_get_lig_num_comps (&buffer->info[base]);
  346|       |
  347|  4.16k|  hb_position_t x_offset = 0, y_offset = 0;
  348|  4.16k|  if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
  ------------------
  |  |  289|  4.16k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 2.65k, False: 1.51k]
  |  |  ------------------
  ------------------
  349|  2.65k|    x_offset -= buffer->pos[base].x_advance;
  350|  2.65k|    y_offset -= buffer->pos[base].y_advance;
  351|  2.65k|  }
  352|       |
  353|  4.16k|  hb_glyph_extents_t component_extents = base_extents;
  354|  4.16k|  int last_lig_component = -1;
  355|  4.16k|  unsigned int last_combining_class = 255;
  356|  4.16k|  hb_glyph_extents_t cluster_extents = base_extents; /* Initialization is just to shut gcc up. */
  357|  4.16k|  hb_glyph_info_t *info = buffer->info;
  358|   883k|  for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (358:35): [True: 879k, False: 4.16k]
  ------------------
  359|   879k|    if (_hb_glyph_info_get_modified_combining_class (&info[i]))
  ------------------
  |  Branch (359:9): [True: 707k, False: 172k]
  ------------------
  360|   707k|    {
  361|   707k|      if (num_lig_components > 1) {
  ------------------
  |  Branch (361:11): [True: 79.6k, False: 627k]
  ------------------
  362|  79.6k|	unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&info[i]);
  363|  79.6k|	int this_lig_component = _hb_glyph_info_get_lig_comp (&info[i]) - 1;
  364|       |	/* Conditions for attaching to the last component. */
  365|  79.6k|	if (!lig_id || lig_id != this_lig_id || this_lig_component >= num_lig_components)
  ------------------
  |  Branch (365:6): [True: 0, False: 79.6k]
  |  Branch (365:17): [True: 15.6k, False: 64.0k]
  |  Branch (365:42): [True: 1.77k, False: 62.2k]
  ------------------
  366|  17.4k|	  this_lig_component = num_lig_components - 1;
  367|  79.6k|	if (last_lig_component != this_lig_component)
  ------------------
  |  Branch (367:6): [True: 803, False: 78.8k]
  ------------------
  368|    803|	{
  369|    803|	  last_lig_component = this_lig_component;
  370|    803|	  last_combining_class = 255;
  371|    803|	  component_extents = base_extents;
  372|    803|	  if (unlikely (horiz_dir == HB_DIRECTION_INVALID)) {
  ------------------
  |  |  259|    803|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 237, False: 566]
  |  |  ------------------
  ------------------
  373|    237|	    if (HB_DIRECTION_IS_HORIZONTAL (plan->props.direction))
  ------------------
  |  |  271|    237|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 237, False: 0]
  |  |  ------------------
  ------------------
  374|    237|	      horiz_dir = plan->props.direction;
  375|      0|	    else
  376|      0|	      horiz_dir = hb_script_get_horizontal_direction (plan->props.script);
  377|    237|	  }
  378|    803|	  if (horiz_dir == HB_DIRECTION_LTR)
  ------------------
  |  Branch (378:8): [True: 454, False: 349]
  ------------------
  379|    454|	    component_extents.x_bearing += (this_lig_component * component_extents.width) / num_lig_components;
  380|    349|	  else
  381|    349|	    component_extents.x_bearing += ((num_lig_components - 1 - this_lig_component) * component_extents.width) / num_lig_components;
  382|    803|	  component_extents.width /= num_lig_components;
  383|    803|	}
  384|  79.6k|      }
  385|       |
  386|   707k|      unsigned int this_combining_class = _hb_glyph_info_get_modified_combining_class (&info[i]);
  387|   707k|      if (last_combining_class != this_combining_class)
  ------------------
  |  Branch (387:11): [True: 4.08k, False: 702k]
  ------------------
  388|  4.08k|      {
  389|  4.08k|	last_combining_class = this_combining_class;
  390|  4.08k|	cluster_extents = component_extents;
  391|  4.08k|      }
  392|       |
  393|   707k|      position_mark (plan, font, buffer, cluster_extents, i, this_combining_class);
  394|       |
  395|   707k|      buffer->pos[i].x_advance = 0;
  396|   707k|      buffer->pos[i].y_advance = 0;
  397|   707k|      buffer->pos[i].x_offset += x_offset;
  398|   707k|      buffer->pos[i].y_offset += y_offset;
  399|       |
  400|   707k|    } else {
  401|   172k|      if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
  ------------------
  |  |  289|   172k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 153k, False: 19.4k]
  |  |  ------------------
  ------------------
  402|   153k|	x_offset -= buffer->pos[i].x_advance;
  403|   153k|	y_offset -= buffer->pos[i].y_advance;
  404|   153k|      } else {
  405|  19.4k|	x_offset += buffer->pos[i].x_advance;
  406|  19.4k|	y_offset += buffer->pos[i].y_advance;
  407|  19.4k|      }
  408|   172k|    }
  409|  4.16k|}
hb-ot-shape-fallback.cc:_ZL18zero_mark_advancesP11hb_buffer_tjjb:
  193|  5.55k|{
  194|  5.55k|  hb_glyph_info_t *info = buffer->info;
  195|  59.5k|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (195:32): [True: 53.9k, False: 5.55k]
  ------------------
  196|  53.9k|    if (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
  ------------------
  |  Branch (196:9): [True: 36.3k, False: 17.6k]
  ------------------
  197|  36.3k|    {
  198|  36.3k|      if (adjust_offsets_when_zeroing)
  ------------------
  |  Branch (198:11): [True: 26.9k, False: 9.38k]
  ------------------
  199|  26.9k|      {
  200|  26.9k|	buffer->pos[i].x_offset -= buffer->pos[i].x_advance;
  201|  26.9k|	buffer->pos[i].y_offset -= buffer->pos[i].y_advance;
  202|  26.9k|      }
  203|  36.3k|      buffer->pos[i].x_advance = 0;
  204|  36.3k|      buffer->pos[i].y_advance = 0;
  205|  36.3k|    }
  206|  5.55k|}
hb-ot-shape-fallback.cc:_ZL13position_markPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_tR18hb_glyph_extents_tjj:
  215|   707k|{
  216|   707k|  hb_glyph_extents_t mark_extents;
  217|   707k|  if (!font->get_glyph_extents (buffer->info[i].codepoint, &mark_extents))
  ------------------
  |  Branch (217:7): [True: 386k, False: 320k]
  ------------------
  218|   386k|    return;
  219|       |
  220|   320k|  hb_position_t y_gap = font->y_scale / 16;
  221|       |
  222|   320k|  hb_glyph_position_t &pos = buffer->pos[i];
  223|   320k|  pos.x_offset = pos.y_offset = 0;
  224|       |
  225|       |
  226|       |  /* We don't position LEFT and RIGHT marks. */
  227|       |
  228|       |  /* X positioning */
  229|   320k|  switch (combining_class)
  230|   320k|  {
  231|  47.9k|    case HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW:
  ------------------
  |  Branch (231:5): [True: 47.9k, False: 272k]
  ------------------
  232|  52.8k|    case HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE:
  ------------------
  |  Branch (232:5): [True: 4.85k, False: 315k]
  ------------------
  233|  52.8k|      if (buffer->props.direction == HB_DIRECTION_LTR) {
  ------------------
  |  Branch (233:11): [True: 44.4k, False: 8.40k]
  ------------------
  234|  44.4k|	pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing;
  235|  44.4k|	break;
  236|  44.4k|      } else if (buffer->props.direction == HB_DIRECTION_RTL) {
  ------------------
  |  Branch (236:18): [True: 8.40k, False: 0]
  ------------------
  237|  8.40k|	pos.x_offset += base_extents.x_bearing - mark_extents.width / 2 - mark_extents.x_bearing;
  238|  8.40k|	break;
  239|  8.40k|      }
  240|  52.8k|      HB_FALLTHROUGH;
  ------------------
  |  |  336|      0|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  241|       |
  242|  50.1k|    default:
  ------------------
  |  Branch (242:5): [True: 50.1k, False: 270k]
  ------------------
  243|  51.7k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
  ------------------
  |  Branch (243:5): [True: 1.65k, False: 318k]
  ------------------
  244|  66.4k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
  ------------------
  |  Branch (244:5): [True: 14.7k, False: 305k]
  ------------------
  245|   104k|    case HB_UNICODE_COMBINING_CLASS_BELOW:
  ------------------
  |  Branch (245:5): [True: 37.5k, False: 283k]
  ------------------
  246|   257k|    case HB_UNICODE_COMBINING_CLASS_ABOVE:
  ------------------
  |  Branch (246:5): [True: 153k, False: 167k]
  ------------------
  247|       |      /* Center align. */
  248|   257k|      pos.x_offset += base_extents.x_bearing + (base_extents.width - mark_extents.width) / 2 - mark_extents.x_bearing;
  249|   257k|      break;
  250|       |
  251|      0|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT:
  ------------------
  |  Branch (251:5): [True: 0, False: 320k]
  ------------------
  252|    402|    case HB_UNICODE_COMBINING_CLASS_BELOW_LEFT:
  ------------------
  |  Branch (252:5): [True: 402, False: 320k]
  ------------------
  253|  1.17k|    case HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT:
  ------------------
  |  Branch (253:5): [True: 772, False: 319k]
  ------------------
  254|       |      /* Left align. */
  255|  1.17k|      pos.x_offset += base_extents.x_bearing - mark_extents.x_bearing;
  256|  1.17k|      break;
  257|       |
  258|    306|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT:
  ------------------
  |  Branch (258:5): [True: 306, False: 320k]
  ------------------
  259|  5.42k|    case HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT:
  ------------------
  |  Branch (259:5): [True: 5.12k, False: 315k]
  ------------------
  260|  9.02k|    case HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT:
  ------------------
  |  Branch (260:5): [True: 3.60k, False: 316k]
  ------------------
  261|       |      /* Right align. */
  262|  9.02k|      pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width - mark_extents.x_bearing;
  263|  9.02k|      break;
  264|   320k|  }
  265|       |
  266|       |  /* Y positioning */
  267|   320k|  switch (combining_class)
  ------------------
  |  Branch (267:11): [True: 50.1k, False: 270k]
  ------------------
  268|   320k|  {
  269|  47.9k|    case HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW:
  ------------------
  |  Branch (269:5): [True: 47.9k, False: 272k]
  ------------------
  270|  48.3k|    case HB_UNICODE_COMBINING_CLASS_BELOW_LEFT:
  ------------------
  |  Branch (270:5): [True: 402, False: 320k]
  ------------------
  271|  85.9k|    case HB_UNICODE_COMBINING_CLASS_BELOW:
  ------------------
  |  Branch (271:5): [True: 37.5k, False: 283k]
  ------------------
  272|  91.0k|    case HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT:
  ------------------
  |  Branch (272:5): [True: 5.12k, False: 315k]
  ------------------
  273|       |      /* Add gap, fall-through. */
  274|  91.0k|      base_extents.height -= y_gap;
  275|  91.0k|      HB_FALLTHROUGH;
  ------------------
  |  |  336|  91.0k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  276|       |
  277|  91.0k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT:
  ------------------
  |  Branch (277:5): [True: 0, False: 320k]
  ------------------
  278|  92.6k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
  ------------------
  |  Branch (278:5): [True: 1.65k, False: 318k]
  ------------------
  279|  92.6k|      pos.y_offset = base_extents.y_bearing + base_extents.height - mark_extents.y_bearing;
  280|       |      /* Never shift up "below" marks. */
  281|  92.6k|      if ((y_gap > 0) == (pos.y_offset > 0))
  ------------------
  |  Branch (281:11): [True: 84.2k, False: 8.43k]
  ------------------
  282|  84.2k|      {
  283|  84.2k|	base_extents.height -= pos.y_offset;
  284|  84.2k|	pos.y_offset = 0;
  285|  84.2k|      }
  286|  92.6k|      base_extents.height += mark_extents.height;
  287|  92.6k|      break;
  288|       |
  289|  4.85k|    case HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE:
  ------------------
  |  Branch (289:5): [True: 4.85k, False: 315k]
  ------------------
  290|  5.62k|    case HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT:
  ------------------
  |  Branch (290:5): [True: 772, False: 319k]
  ------------------
  291|   159k|    case HB_UNICODE_COMBINING_CLASS_ABOVE:
  ------------------
  |  Branch (291:5): [True: 153k, False: 167k]
  ------------------
  292|   162k|    case HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT:
  ------------------
  |  Branch (292:5): [True: 3.60k, False: 316k]
  ------------------
  293|       |      /* Add gap, fall-through. */
  294|   162k|      base_extents.y_bearing += y_gap;
  295|   162k|      base_extents.height -= y_gap;
  296|   162k|      HB_FALLTHROUGH;
  ------------------
  |  |  336|   162k|#  define HB_FALLTHROUGH [[clang::fallthrough]]
  ------------------
  297|       |
  298|   177k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
  ------------------
  |  Branch (298:5): [True: 14.7k, False: 305k]
  ------------------
  299|   177k|    case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT:
  ------------------
  |  Branch (299:5): [True: 306, False: 320k]
  ------------------
  300|   177k|      pos.y_offset = base_extents.y_bearing - (mark_extents.y_bearing + mark_extents.height);
  301|       |      /* Don't shift down "above" marks too much. */
  302|   177k|      if ((y_gap > 0) != (pos.y_offset > 0))
  ------------------
  |  Branch (302:11): [True: 6.07k, False: 171k]
  ------------------
  303|  6.07k|      {
  304|  6.07k|	int correction = -pos.y_offset / 2;
  305|  6.07k|	base_extents.y_bearing += correction;
  306|  6.07k|	base_extents.height -= correction;
  307|  6.07k|	pos.y_offset += correction;
  308|  6.07k|      }
  309|   177k|      base_extents.y_bearing -= mark_extents.height;
  310|   177k|      base_extents.height += mark_extents.height;
  311|   177k|      break;
  312|   320k|  }
  313|   320k|}

_Z22_hb_ot_shape_normalizePK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  294|   565k|{
  295|   565k|  if (unlikely (!buffer->len)) return;
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  296|       |
  297|   565k|  _hb_buffer_assert_unicode_vars (buffer);
  298|       |
  299|   565k|  hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference;
  300|   565k|  if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_AUTO)
  ------------------
  |  Branch (300:7): [True: 559k, False: 5.67k]
  ------------------
  301|   559k|  {
  302|   559k|    if (plan->has_gpos_mark)
  ------------------
  |  Branch (302:9): [True: 654, False: 558k]
  ------------------
  303|       |      // https://github.com/harfbuzz/harfbuzz/issues/653#issuecomment-423905920
  304|       |      //mode = HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED;
  305|    654|      mode = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
  306|   558k|    else
  307|   558k|      mode = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
  308|   559k|  }
  309|       |
  310|   565k|  const hb_ot_shape_normalize_context_t c = {
  311|   565k|    plan,
  312|   565k|    buffer,
  313|   565k|    font,
  314|   565k|    buffer->unicode,
  315|   565k|    buffer->not_found,
  316|   565k|    plan->shaper->decompose ? plan->shaper->decompose : decompose_unicode,
  ------------------
  |  Branch (316:5): [True: 2.89k, False: 562k]
  ------------------
  317|   565k|    plan->shaper->compose   ? plan->shaper->compose   : compose_unicode
  ------------------
  |  Branch (317:5): [True: 5.21k, False: 559k]
  ------------------
  318|   565k|  };
  319|       |
  320|   565k|  bool always_short_circuit = mode == HB_OT_SHAPE_NORMALIZATION_MODE_NONE;
  321|   565k|  bool might_short_circuit = always_short_circuit ||
  ------------------
  |  Branch (321:30): [True: 561, False: 564k]
  ------------------
  322|   565k|			     (mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
  ------------------
  |  Branch (322:10): [True: 564k, False: 0]
  ------------------
  323|   564k|			      mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT);
  ------------------
  |  Branch (323:10): [True: 559k, False: 5.11k]
  ------------------
  324|   565k|  unsigned int count;
  325|       |
  326|       |  /* We do a fairly straightforward yet custom normalization process in three
  327|       |   * separate rounds: decompose, reorder, recompose (if desired).  Currently
  328|       |   * this makes two buffer swaps.  We can make it faster by moving the last
  329|       |   * two rounds into the inner loop for the first round, but it's more readable
  330|       |   * this way. */
  331|       |
  332|       |
  333|       |  /* First round, decompose */
  334|       |
  335|   565k|  bool all_simple = true;
  336|   565k|  {
  337|   565k|    buffer->clear_output ();
  338|   565k|    count = buffer->len;
  339|   565k|    buffer->idx = 0;
  340|   565k|    do
  341|   581k|    {
  342|   581k|      unsigned int end;
  343|  1.62M|      for (end = buffer->idx + 1; end < count; end++)
  ------------------
  |  Branch (343:35): [True: 1.05M, False: 563k]
  ------------------
  344|  1.05M|	if (_hb_glyph_info_is_unicode_mark (&buffer->info[end]))
  ------------------
  |  Branch (344:6): [True: 18.2k, False: 1.03M]
  ------------------
  345|  18.2k|	  break;
  346|       |
  347|   581k|      if (end < count)
  ------------------
  |  Branch (347:11): [True: 18.2k, False: 563k]
  ------------------
  348|  18.2k|	end--; /* Leave one base for the marks to cluster with. */
  349|       |
  350|       |      /* From idx to end are simple clusters. */
  351|   581k|      if (might_short_circuit)
  ------------------
  |  Branch (351:11): [True: 570k, False: 10.9k]
  ------------------
  352|   570k|      {
  353|   570k|	unsigned int done = font->get_nominal_glyphs (end - buffer->idx,
  354|   570k|						      &buffer->cur().codepoint,
  355|   570k|						      sizeof (buffer->info[0]),
  356|   570k|						      &buffer->cur().glyph_index(),
  ------------------
  |  |   34|   570k|#define glyph_index()	var1.u32
  ------------------
  357|   570k|						      sizeof (buffer->info[0]));
  358|   570k|	if (unlikely (!buffer->next_glyphs (done))) break;
  ------------------
  |  |  259|   570k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 570k]
  |  |  ------------------
  ------------------
  359|   570k|      }
  360|  2.13M|      while (buffer->idx < end && buffer->successful)
  ------------------
  |  Branch (360:14): [True: 1.55M, False: 581k]
  |  Branch (360:35): [True: 1.55M, False: 5]
  ------------------
  361|  1.55M|	decompose_current_character (&c, might_short_circuit);
  362|       |
  363|   581k|      if (buffer->idx == count || !buffer->successful)
  ------------------
  |  Branch (363:11): [True: 563k, False: 18.2k]
  |  Branch (363:35): [True: 6, False: 18.2k]
  ------------------
  364|   563k|	break;
  365|       |
  366|  18.2k|      all_simple = false;
  367|       |
  368|       |      /* Find all the marks now. */
  369|  42.7k|      for (end = buffer->idx + 1; end < count; end++)
  ------------------
  |  Branch (369:35): [True: 41.2k, False: 1.42k]
  ------------------
  370|  41.2k|	if (!_hb_glyph_info_is_unicode_mark(&buffer->info[end]))
  ------------------
  |  Branch (370:6): [True: 16.7k, False: 24.5k]
  ------------------
  371|  16.7k|	  break;
  372|       |
  373|       |      /* idx to end is one non-simple cluster. */
  374|  18.2k|      decompose_multi_char_cluster (&c, end, always_short_circuit);
  375|  18.2k|    }
  376|   565k|    while (buffer->idx < count && buffer->successful);
  ------------------
  |  Branch (376:12): [True: 16.7k, False: 1.42k]
  |  Branch (376:35): [True: 16.7k, False: 3]
  ------------------
  377|      0|    buffer->sync ();
  378|   565k|  }
  379|       |
  380|       |
  381|       |  /* Second round, reorder (inplace) */
  382|       |
  383|   565k|  if (!all_simple && buffer->message(font, "start reorder"))
  ------------------
  |  Branch (383:7): [True: 10.6k, False: 554k]
  |  Branch (383:22): [True: 10.6k, False: 0]
  ------------------
  384|  10.6k|  {
  385|  10.6k|    count = buffer->len;
  386|  10.6k|    hb_glyph_info_t *info = buffer->info;
  387|   168k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (387:30): [True: 158k, False: 10.6k]
  ------------------
  388|   158k|    {
  389|   158k|      if (_hb_glyph_info_get_modified_combining_class (&info[i]) == 0)
  ------------------
  |  Branch (389:11): [True: 146k, False: 11.6k]
  ------------------
  390|   146k|	continue;
  391|       |
  392|  11.6k|      unsigned int end;
  393|  14.7k|      for (end = i + 1; end < count; end++)
  ------------------
  |  Branch (393:25): [True: 14.0k, False: 681]
  ------------------
  394|  14.0k|	if (_hb_glyph_info_get_modified_combining_class (&info[end]) == 0)
  ------------------
  |  Branch (394:6): [True: 10.9k, False: 3.07k]
  ------------------
  395|  10.9k|	  break;
  396|       |
  397|       |      /* We are going to do a O(n^2).  Only do this if the sequence is short. */
  398|  11.6k|      if (end - i > HB_OT_SHAPE_MAX_COMBINING_MARKS) {
  ------------------
  |  |   42|  11.6k|#define HB_OT_SHAPE_MAX_COMBINING_MARKS 32
  ------------------
  |  Branch (398:11): [True: 0, False: 11.6k]
  ------------------
  399|      0|	i = end;
  400|      0|	continue;
  401|      0|      }
  402|       |
  403|  11.6k|      buffer->sort (i, end, compare_combining_class);
  404|       |
  405|  11.6k|      if (plan->shaper->reorder_marks)
  ------------------
  |  Branch (405:11): [True: 2.63k, False: 9.02k]
  ------------------
  406|  2.63k|	plan->shaper->reorder_marks (plan, buffer, i, end);
  407|       |
  408|  11.6k|      i = end;
  409|  11.6k|    }
  410|  10.6k|    (void) buffer->message(font, "end reorder");
  411|  10.6k|  }
  412|   565k|  if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_CGJ)
  ------------------
  |  Branch (412:7): [True: 167, False: 564k]
  ------------------
  413|    167|  {
  414|       |    /* For all CGJ, check if it prevented any reordering at all.
  415|       |     * If it did NOT, then make it skippable.
  416|       |     * https://github.com/harfbuzz/harfbuzz/issues/554
  417|       |     */
  418|    167|    unsigned count = buffer->len;
  419|    167|    hb_glyph_info_t *info = buffer->info;
  420|  2.63k|    for (unsigned int i = 1; i + 1 < count; i++)
  ------------------
  |  Branch (420:30): [True: 2.47k, False: 167]
  ------------------
  421|  2.47k|      if (info[i].codepoint == 0x034Fu/*CGJ*/ &&
  ------------------
  |  Branch (421:11): [True: 306, False: 2.16k]
  ------------------
  422|  2.47k|	  (info_cc(info[i+1]) == 0 || info_cc(info[i-1]) <= info_cc(info[i+1])))
  ------------------
  |  |  283|    306|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
              	  (info_cc(info[i+1]) == 0 || info_cc(info[i-1]) <= info_cc(info[i+1])))
  ------------------
  |  |  283|    154|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
              	  (info_cc(info[i+1]) == 0 || info_cc(info[i-1]) <= info_cc(info[i+1])))
  ------------------
  |  |  283|    154|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (422:5): [True: 152, False: 154]
  |  Branch (422:32): [True: 137, False: 17]
  ------------------
  423|    289|      {
  424|    289|	_hb_glyph_info_unhide (&info[i]);
  425|    289|      }
  426|    167|  }
  427|       |
  428|       |
  429|       |  /* Third round, recompose */
  430|       |
  431|   565k|  if (!all_simple &&
  ------------------
  |  Branch (431:7): [True: 10.6k, False: 554k]
  ------------------
  432|   565k|      buffer->successful &&
  ------------------
  |  Branch (432:7): [True: 10.5k, False: 6]
  ------------------
  433|   565k|      (mode == HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS ||
  ------------------
  |  Branch (433:8): [True: 7.12k, False: 3.47k]
  ------------------
  434|  10.5k|       mode == HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT))
  ------------------
  |  Branch (434:8): [True: 3.35k, False: 118]
  ------------------
  435|  10.4k|  {
  436|       |    /* As noted in the comment earlier, we don't try to combine
  437|       |     * ccc=0 chars with their previous Starter. */
  438|       |
  439|  10.4k|    buffer->clear_output ();
  440|  10.4k|    count = buffer->len;
  441|  10.4k|    unsigned int starter = 0;
  442|  10.4k|    (void) buffer->next_glyph ();
  443|   170k|    while (buffer->idx < count /* No need for: && buffer->successful */)
  ------------------
  |  Branch (443:12): [True: 159k, False: 10.4k]
  ------------------
  444|   159k|    {
  445|   159k|      hb_codepoint_t composed, glyph;
  446|   159k|      if (/* We don't try to compose a non-mark character with it's preceding starter.
  447|       |	   * This is both an optimization to avoid trying to compose every two neighboring
  448|       |	   * glyphs in most scripts AND a desired feature for Hangul.  Apparently Hangul
  449|       |	   * fonts are not designed to mix-and-match pre-composed syllables and Jamo. */
  450|   159k|	  _hb_glyph_info_is_unicode_mark(&buffer->cur()))
  ------------------
  |  Branch (450:4): [True: 25.6k, False: 134k]
  ------------------
  451|  25.6k|      {
  452|  25.6k|	if (/* If there's anything between the starter and this char, they should have CCC
  453|       |	     * smaller than this character's. */
  454|  25.6k|	    (starter == buffer->out_len - 1 ||
  ------------------
  |  Branch (454:7): [True: 22.4k, False: 3.15k]
  ------------------
  455|  25.6k|	     info_cc (buffer->prev()) < info_cc (buffer->cur())) &&
  ------------------
  |  |  283|  3.15k|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
              	     info_cc (buffer->prev()) < info_cc (buffer->cur())) &&
  ------------------
  |  |  283|  3.15k|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (455:7): [True: 548, False: 2.60k]
  ------------------
  456|       |	    /* And compose. */
  457|  25.6k|	    c.compose (&c,
  ------------------
  |  Branch (457:6): [True: 1.19k, False: 21.8k]
  ------------------
  458|  23.0k|		       buffer->out_info[starter].codepoint,
  459|  23.0k|		       buffer->cur().codepoint,
  460|  23.0k|		       &composed) &&
  461|       |	    /* And the font has glyph for the composite. */
  462|  25.6k|	    font->get_nominal_glyph (composed, &glyph))
  ------------------
  |  Branch (462:6): [True: 720, False: 475]
  ------------------
  463|    720|	{
  464|       |	  /* Composes. */
  465|    720|	  if (unlikely (!buffer->next_glyph ())) break; /* Copy to out-buffer. */
  ------------------
  |  |  259|    720|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 720]
  |  |  ------------------
  ------------------
  466|    720|	  buffer->merge_out_clusters (starter, buffer->out_len);
  467|    720|	  buffer->out_len--; /* Remove the second composable. */
  468|       |	  /* Modify starter and carry on. */
  469|    720|	  buffer->out_info[starter].codepoint = composed;
  470|    720|	  buffer->out_info[starter].glyph_index() = glyph;
  ------------------
  |  |   34|    720|#define glyph_index()	var1.u32
  ------------------
  471|    720|	  _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer);
  472|       |
  473|    720|	  continue;
  474|    720|	}
  475|  25.6k|      }
  476|       |
  477|       |      /* Blocked, or doesn't compose. */
  478|   158k|      if (unlikely (!buffer->next_glyph ())) break;
  ------------------
  |  |  259|   158k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 158k]
  |  |  ------------------
  ------------------
  479|       |
  480|   158k|      if (info_cc (buffer->prev()) == 0)
  ------------------
  |  |  283|   158k|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (480:11): [True: 145k, False: 13.6k]
  ------------------
  481|   145k|	starter = buffer->out_len - 1;
  482|   158k|    }
  483|  10.4k|    buffer->sync ();
  484|  10.4k|  }
  485|   565k|}
hb-ot-shape-normalize.cc:_ZL17decompose_unicodePK31hb_ot_shape_normalize_context_tjPjS2_:
   82|  1.53M|{
   83|  1.53M|  return (bool) c->unicode->decompose (ab, a, b);
   84|  1.53M|}
hb-ot-shape-normalize.cc:_ZL15compose_unicodePK31hb_ot_shape_normalize_context_tjjPj:
   91|  12.5k|{
   92|  12.5k|  return (bool) c->unicode->compose (a, b, ab);
   93|  12.5k|}
hb-ot-shape-normalize.cc:_ZL27decompose_current_characterPK31hb_ot_shape_normalize_context_tb:
  168|  1.59M|{
  169|  1.59M|  hb_buffer_t * const buffer = c->buffer;
  170|  1.59M|  hb_codepoint_t u = buffer->cur().codepoint;
  171|  1.59M|  hb_codepoint_t glyph = 0;
  172|       |
  173|  1.59M|  if (shortest && c->font->get_nominal_glyph (u, &glyph, c->not_found))
  ------------------
  |  Branch (173:7): [True: 1.48M, False: 106k]
  |  Branch (173:19): [True: 8.20k, False: 1.47M]
  ------------------
  174|  8.20k|  {
  175|  8.20k|    next_char (buffer, glyph);
  176|  8.20k|    return;
  177|  8.20k|  }
  178|       |
  179|  1.58M|  if (decompose (c, shortest, u))
  ------------------
  |  Branch (179:7): [True: 1.21k, False: 1.58M]
  ------------------
  180|  1.21k|  {
  181|  1.21k|    skip_char (buffer);
  182|  1.21k|    return;
  183|  1.21k|  }
  184|       |
  185|  1.58M|  if (!shortest && c->font->get_nominal_glyph (u, &glyph, c->not_found))
  ------------------
  |  Branch (185:7): [True: 105k, False: 1.47M]
  |  Branch (185:20): [True: 2.42k, False: 103k]
  ------------------
  186|  2.42k|  {
  187|  2.42k|    next_char (buffer, glyph);
  188|  2.42k|    return;
  189|  2.42k|  }
  190|       |
  191|  1.58M|  if (_hb_glyph_info_is_unicode_space (&buffer->cur()))
  ------------------
  |  Branch (191:7): [True: 1.91k, False: 1.57M]
  ------------------
  192|  1.91k|  {
  193|  1.91k|    hb_codepoint_t space_glyph;
  194|  1.91k|    hb_unicode_funcs_t::space_t space_type = buffer->unicode->space_fallback_type (u);
  195|  1.91k|    if (space_type != hb_unicode_funcs_t::NOT_SPACE &&
  ------------------
  |  Branch (195:9): [True: 1.90k, False: 10]
  ------------------
  196|  1.91k|	(c->font->get_nominal_glyph (0x0020, &space_glyph) || (space_glyph = buffer->invisible)))
  ------------------
  |  Branch (196:3): [True: 365, False: 1.54k]
  |  Branch (196:56): [True: 0, False: 1.54k]
  ------------------
  197|    365|    {
  198|    365|      _hb_glyph_info_set_unicode_space_fallback_type (&buffer->cur(), space_type);
  199|    365|      next_char (buffer, space_glyph);
  200|    365|      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK;
  201|    365|      return;
  202|    365|    }
  203|  1.91k|  }
  204|       |
  205|  1.58M|  if (u == 0x2011u)
  ------------------
  |  Branch (205:7): [True: 35, False: 1.58M]
  ------------------
  206|     35|  {
  207|       |    /* U+2011 is the only sensible character that is a no-break version of another character
  208|       |     * and not a space.  The space ones are handled already.  Handle this lone one. */
  209|     35|    hb_codepoint_t other_glyph;
  210|     35|    if (c->font->get_nominal_glyph (0x2010u, &other_glyph))
  ------------------
  |  Branch (210:9): [True: 11, False: 24]
  ------------------
  211|     11|    {
  212|     11|      next_char (buffer, other_glyph);
  213|     11|      return;
  214|     11|    }
  215|     35|  }
  216|       |
  217|  1.58M|  next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
  218|  1.58M|}
hb-ot-shape-normalize.cc:_ZL9next_charP11hb_buffer_tj:
  112|  1.59M|{
  113|  1.59M|  buffer->cur().glyph_index() = glyph;
  ------------------
  |  |   34|  1.59M|#define glyph_index()	var1.u32
  ------------------
  114|  1.59M|  (void) buffer->next_glyph ();
  115|  1.59M|}
hb-ot-shape-normalize.cc:_ZL9decomposePK31hb_ot_shape_normalize_context_tbj:
  126|  1.58M|{
  127|  1.58M|  hb_codepoint_t a = 0, b = 0, a_glyph = 0, b_glyph = 0;
  128|  1.58M|  hb_buffer_t * const buffer = c->buffer;
  129|  1.58M|  hb_font_t * const font = c->font;
  130|       |
  131|  1.58M|  if (!c->decompose (c, ab, &a, &b) ||
  ------------------
  |  Branch (131:7): [True: 1.54M, False: 43.9k]
  ------------------
  132|  1.58M|      (b && !font->get_nominal_glyph (b, &b_glyph)))
  ------------------
  |  Branch (132:8): [True: 43.2k, False: 723]
  |  Branch (132:13): [True: 41.1k, False: 2.15k]
  ------------------
  133|  1.58M|    return 0;
  134|       |
  135|  2.87k|  bool has_a = (bool) font->get_nominal_glyph (a, &a_glyph);
  136|  2.87k|  if (shortest && has_a) {
  ------------------
  |  Branch (136:7): [True: 1.00k, False: 1.87k]
  |  Branch (136:19): [True: 223, False: 782]
  ------------------
  137|       |    /* Output a and b */
  138|    223|    output_char (buffer, a, a_glyph);
  139|    223|    if (likely (b)) {
  ------------------
  |  |  258|    223|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 215, False: 8]
  |  |  ------------------
  ------------------
  140|    215|      output_char (buffer, b, b_glyph);
  141|    215|      return 2;
  142|    215|    }
  143|      8|    return 1;
  144|    223|  }
  145|       |
  146|  2.65k|  if (unsigned ret = decompose (c, shortest, a)) {
  ------------------
  |  Branch (146:16): [True: 921, False: 1.73k]
  ------------------
  147|    921|    if (b) {
  ------------------
  |  Branch (147:9): [True: 909, False: 12]
  ------------------
  148|    909|      output_char (buffer, b, b_glyph);
  149|    909|      return ret + 1;
  150|    909|    }
  151|     12|    return ret;
  152|    921|  }
  153|       |
  154|  1.73k|  if (has_a) {
  ------------------
  |  Branch (154:7): [True: 987, False: 746]
  ------------------
  155|    987|    output_char (buffer, a, a_glyph);
  156|    987|    if (likely (b)) {
  ------------------
  |  |  258|    987|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 966, False: 21]
  |  |  ------------------
  ------------------
  157|    966|      output_char (buffer, b, b_glyph);
  158|    966|      return 2;
  159|    966|    }
  160|     21|    return 1;
  161|    987|  }
  162|       |
  163|    746|  return 0;
  164|  1.73k|}
hb-ot-shape-normalize.cc:_ZL11output_charP11hb_buffer_tjj:
  103|  3.30k|{
  104|       |  /* This is very confusing indeed. */
  105|  3.30k|  buffer->cur().glyph_index() = glyph;
  ------------------
  |  |   34|  3.30k|#define glyph_index()	var1.u32
  ------------------
  106|  3.30k|  (void) buffer->output_glyph (unichar);
  107|  3.30k|  _hb_glyph_info_set_unicode_props (&buffer->prev(), buffer);
  108|  3.30k|}
hb-ot-shape-normalize.cc:_ZL9skip_charP11hb_buffer_t:
  119|  1.21k|{
  120|  1.21k|  buffer->skip_glyph ();
  121|  1.21k|}
hb-ot-shape-normalize.cc:_ZL28decompose_multi_char_clusterPK31hb_ot_shape_normalize_context_tjb:
  267|  18.2k|{
  268|  18.2k|  hb_buffer_t * const buffer = c->buffer;
  269|  59.3k|  for (unsigned int i = buffer->idx; i < end && buffer->successful; i++)
  ------------------
  |  Branch (269:38): [True: 42.3k, False: 17.0k]
  |  Branch (269:49): [True: 42.3k, False: 0]
  ------------------
  270|  42.3k|    if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
  ------------------
  |  |  259|  42.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.13k, False: 41.1k]
  |  |  ------------------
  ------------------
  271|  1.13k|      handle_variation_selector_cluster (c, end, short_circuit);
  272|  1.13k|      return;
  273|  1.13k|    }
  274|       |
  275|  57.0k|  while (buffer->idx < end && buffer->successful)
  ------------------
  |  Branch (275:10): [True: 39.9k, False: 17.0k]
  |  Branch (275:31): [True: 39.9k, False: 2]
  ------------------
  276|  39.9k|    decompose_current_character (c, short_circuit);
  277|  17.0k|}
hb-ot-shape-normalize.cc:_ZL33handle_variation_selector_clusterPK31hb_ot_shape_normalize_context_tjb:
  224|  1.13k|{
  225|       |  /* Currently if there's a variation-selector we give-up on normalization, it's just too hard. */
  226|  1.13k|  hb_buffer_t * const buffer = c->buffer;
  227|  1.13k|  hb_font_t * const font = c->font;
  228|  2.45k|  for (; buffer->idx < end - 1 && buffer->successful;) {
  ------------------
  |  Branch (228:10): [True: 1.31k, False: 1.13k]
  |  Branch (228:35): [True: 1.31k, False: 0]
  ------------------
  229|  1.31k|    if (unlikely (buffer->unicode->is_variation_selector (buffer->cur(+1).codepoint))) {
  ------------------
  |  |  259|  1.31k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.18k, False: 133]
  |  |  ------------------
  ------------------
  230|  1.18k|      if (font->get_variation_glyph (buffer->cur().codepoint, buffer->cur(+1).codepoint, &buffer->cur().glyph_index()))
  ------------------
  |  |   34|  1.18k|#define glyph_index()	var1.u32
  ------------------
  |  Branch (230:11): [True: 36, False: 1.14k]
  ------------------
  231|     36|      {
  232|     36|	hb_codepoint_t unicode = buffer->cur().codepoint;
  233|     36|	(void) buffer->replace_glyphs (2, 1, &unicode);
  234|     36|      }
  235|  1.14k|      else
  236|  1.14k|      {
  237|       |	/* Just pass on the two characters separately, let GSUB do its magic. */
  238|  1.14k|	set_glyph (buffer->cur(), font);
  239|  1.14k|	(void) buffer->next_glyph ();
  240|  1.14k|	set_glyph (buffer->cur(), font);
  241|  1.14k|	(void) buffer->next_glyph ();
  242|  1.14k|      }
  243|       |      /* Skip any further variation selectors. */
  244|  1.34k|      while (buffer->idx < end &&
  ------------------
  |  Branch (244:14): [True: 299, False: 1.04k]
  ------------------
  245|  1.34k|	     buffer->successful &&
  ------------------
  |  Branch (245:7): [True: 299, False: 0]
  ------------------
  246|  1.34k|	     unlikely (buffer->unicode->is_variation_selector (buffer->cur().codepoint)))
  ------------------
  |  |  259|    299|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 162, False: 137]
  |  |  ------------------
  ------------------
  247|    162|      {
  248|    162|	set_glyph (buffer->cur(), font);
  249|    162|	(void) buffer->next_glyph ();
  250|    162|      }
  251|  1.18k|    }
  252|    133|    else
  253|    133|    {
  254|    133|      set_glyph (buffer->cur(), font);
  255|    133|      (void) buffer->next_glyph ();
  256|    133|    }
  257|  1.31k|  }
  258|  1.13k|  if (likely (buffer->idx < end))
  ------------------
  |  |  258|  1.13k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 90, False: 1.04k]
  |  |  ------------------
  ------------------
  259|     90|  {
  260|     90|    set_glyph (buffer->cur(), font);
  261|     90|    (void) buffer->next_glyph ();
  262|     90|  }
  263|  1.13k|}
hb-ot-shape-normalize.cc:_ZL9set_glyphR15hb_glyph_info_tP9hb_font_t:
   97|  2.67k|{
   98|  2.67k|  (void) font->get_nominal_glyph (info.codepoint, &info.glyph_index());
  ------------------
  |  |   34|  2.67k|#define glyph_index()	var1.u32
  ------------------
   99|  2.67k|}
hb-ot-shape-normalize.cc:_ZL23compare_combining_classPK15hb_glyph_info_tS1_:
  282|  3.42k|{
  283|  3.42k|  unsigned int a = _hb_glyph_info_get_modified_combining_class (pa);
  284|  3.42k|  unsigned int b = _hb_glyph_info_get_modified_combining_class (pb);
  285|       |
  286|  3.42k|  return a < b ? -1 : a == b ? 0 : +1;
  ------------------
  |  Branch (286:10): [True: 434, False: 2.99k]
  |  Branch (286:23): [True: 2.40k, False: 591]
  ------------------
  287|  3.42k|}

_ZN21hb_ot_shape_planner_tC2EP9hb_face_tRK23hb_segment_properties_t:
   87|  49.3k|{
   88|  49.3k|  shaper = hb_ot_shaper_categorize (this);
   89|       |
   90|  49.3k|  script_zero_marks = shaper->zero_width_marks != HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE;
   91|  49.3k|  script_fallback_mark_positioning = shaper->fallback_position;
   92|       |
   93|  49.3k|#ifndef HB_NO_AAT_SHAPE
   94|       |  /* https://github.com/harfbuzz/harfbuzz/issues/1528 */
   95|  49.3k|  if (apply_morx && shaper != &_hb_ot_shaper_default)
  ------------------
  |  Branch (95:7): [True: 2.45k, False: 46.8k]
  |  Branch (95:21): [True: 225, False: 2.23k]
  ------------------
   96|    225|    shaper = &_hb_ot_shaper_dumber;
   97|  49.3k|#endif
   98|  49.3k|}
_ZN21hb_ot_shape_planner_t7compileER18hb_ot_shape_plan_tRK22hb_ot_shape_plan_key_t:
  103|  49.3k|{
  104|  49.3k|  plan.props = props;
  105|  49.3k|  plan.shaper = shaper;
  106|  49.3k|  map.compile (plan.map, key);
  107|       |
  108|  49.3k|#ifndef HB_NO_OT_SHAPE_FRACTIONS
  109|  49.3k|  plan.frac_mask = plan.map.get_1_mask (HB_TAG ('f','r','a','c'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  110|  49.3k|  plan.numr_mask = plan.map.get_1_mask (HB_TAG ('n','u','m','r'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  111|  49.3k|  plan.dnom_mask = plan.map.get_1_mask (HB_TAG ('d','n','o','m'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  112|  49.3k|  plan.has_frac = plan.frac_mask || (plan.numr_mask && plan.dnom_mask);
  ------------------
  |  Branch (112:19): [True: 64, False: 49.2k]
  |  Branch (112:38): [True: 18, False: 49.2k]
  |  Branch (112:56): [True: 6, False: 12]
  ------------------
  113|  49.3k|#endif
  114|       |
  115|  49.3k|  plan.rtlm_mask = plan.map.get_1_mask (HB_TAG ('r','t','l','m'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  116|  49.3k|  plan.has_vert = !!plan.map.get_1_mask (HB_TAG ('v','e','r','t'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  117|       |
  118|  49.3k|  hb_tag_t kern_tag = HB_DIRECTION_IS_HORIZONTAL (props.direction) ?
  ------------------
  |  |  271|  49.3k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 49.3k, False: 0]
  |  |  ------------------
  ------------------
  119|  49.3k|		      HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n');
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
              		      HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n');
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  120|  49.3k|#ifndef HB_NO_OT_KERN
  121|  49.3k|  plan.kern_mask = plan.map.get_mask (kern_tag);
  122|  49.3k|  plan.requested_kerning = !!plan.kern_mask;
  123|  49.3k|#endif
  124|  49.3k|#ifndef HB_NO_AAT_SHAPE
  125|  49.3k|  plan.trak_mask = plan.map.get_mask (HB_TAG ('t','r','a','k'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  126|  49.3k|  plan.requested_tracking = !!plan.trak_mask;
  127|  49.3k|#endif
  128|       |
  129|  49.3k|  bool has_gpos_kern = plan.map.get_feature_index (1, kern_tag) != HB_OT_LAYOUT_NO_FEATURE_INDEX;
  ------------------
  |  |  199|  49.3k|#define HB_OT_LAYOUT_NO_FEATURE_INDEX		0xFFFFu
  ------------------
  130|  49.3k|  bool disable_gpos = plan.shaper->gpos_tag &&
  ------------------
  |  Branch (130:23): [True: 559, False: 48.7k]
  ------------------
  131|  49.3k|		      plan.shaper->gpos_tag != plan.map.chosen_script[1];
  ------------------
  |  Branch (131:9): [True: 559, False: 0]
  ------------------
  132|       |
  133|       |  /*
  134|       |   * Decide who provides glyph classes. GDEF or Unicode.
  135|       |   */
  136|       |
  137|  49.3k|  if (!hb_ot_layout_has_glyph_classes (face))
  ------------------
  |  Branch (137:7): [True: 47.7k, False: 1.56k]
  ------------------
  138|  47.7k|    plan.fallback_glyph_classes = true;
  139|       |
  140|       |  /*
  141|       |   * Decide who does substitutions. GSUB, morx, or fallback.
  142|       |   */
  143|       |
  144|  49.3k|#ifndef HB_NO_AAT_SHAPE
  145|  49.3k|  plan.apply_morx = apply_morx;
  146|  49.3k|#endif
  147|       |
  148|       |  /*
  149|       |   * Decide who does positioning. GPOS, kerx, kern, or fallback.
  150|       |   */
  151|       |
  152|  49.3k|#ifndef HB_NO_AAT_SHAPE
  153|  49.3k|  bool has_kerx = hb_aat_layout_has_positioning (face);
  154|  49.3k|  bool has_gsub = !apply_morx && hb_ot_layout_has_substitution (face);
  ------------------
  |  Branch (154:19): [True: 46.8k, False: 2.45k]
  |  Branch (154:34): [True: 12.1k, False: 34.6k]
  ------------------
  155|  49.3k|#endif
  156|  49.3k|  bool has_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
  ------------------
  |  Branch (156:19): [True: 48.7k, False: 559]
  |  Branch (156:36): [True: 7.52k, False: 41.2k]
  ------------------
  157|  49.3k|  if (false)
  ------------------
  |  Branch (157:7): [Folded - Ignored]
  ------------------
  158|      0|    ;
  159|  49.3k|#ifndef HB_NO_AAT_SHAPE
  160|       |  /* Prefer GPOS over kerx if GSUB is present;
  161|       |   * https://github.com/harfbuzz/harfbuzz/issues/3008 */
  162|  49.3k|  else if (has_kerx && !(has_gsub && has_gpos))
  ------------------
  |  Branch (162:12): [True: 1.77k, False: 47.5k]
  |  Branch (162:26): [True: 540, False: 1.23k]
  |  Branch (162:38): [True: 11, False: 529]
  ------------------
  163|  1.76k|    plan.apply_kerx = true;
  164|  47.5k|#endif
  165|  47.5k|  else if (has_gpos)
  ------------------
  |  Branch (165:12): [True: 7.52k, False: 40.0k]
  ------------------
  166|  7.52k|    plan.apply_gpos = true;
  167|       |
  168|  49.3k|  if (!plan.apply_kerx && (!has_gpos_kern || !plan.apply_gpos))
  ------------------
  |  Branch (168:7): [True: 47.5k, False: 1.76k]
  |  Branch (168:28): [True: 47.1k, False: 410]
  |  Branch (168:46): [True: 5, False: 405]
  ------------------
  169|  47.1k|  {
  170|  47.1k|#ifndef HB_NO_AAT_SHAPE
  171|  47.1k|    if (has_kerx)
  ------------------
  |  Branch (171:9): [True: 11, False: 47.1k]
  ------------------
  172|     11|      plan.apply_kerx = true;
  173|  47.1k|    else
  174|  47.1k|#endif
  175|  47.1k|#ifndef HB_NO_OT_KERN
  176|  47.1k|    if (hb_ot_layout_has_kerning (face))
  ------------------
  |  Branch (176:9): [True: 874, False: 46.2k]
  ------------------
  177|    874|      plan.apply_kern = true;
  178|  47.1k|#endif
  179|  47.1k|  }
  180|       |
  181|  49.3k|  plan.apply_fallback_kern = !(plan.apply_gpos || plan.apply_kerx || plan.apply_kern);
  ------------------
  |  Branch (181:32): [True: 7.52k, False: 41.7k]
  |  Branch (181:51): [True: 1.76k, False: 40.0k]
  |  Branch (181:70): [True: 869, False: 39.1k]
  ------------------
  182|       |
  183|  49.3k|  plan.zero_marks = script_zero_marks &&
  ------------------
  |  Branch (183:21): [True: 45.7k, False: 3.56k]
  ------------------
  184|  49.3k|		    !plan.apply_kerx &&
  ------------------
  |  Branch (184:7): [True: 44.0k, False: 1.73k]
  ------------------
  185|  49.3k|		    (!plan.apply_kern
  ------------------
  |  Branch (185:8): [True: 43.1k, False: 862]
  ------------------
  186|  44.0k|#ifndef HB_NO_OT_KERN
  187|  44.0k|		     || !hb_ot_layout_has_machine_kerning (face)
  ------------------
  |  Branch (187:11): [True: 608, False: 254]
  ------------------
  188|  44.0k|#endif
  189|  44.0k|		    );
  190|  49.3k|  plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  191|       |
  192|  49.3k|  plan.adjust_mark_positioning_when_zeroing = !plan.apply_gpos &&
  ------------------
  |  Branch (192:47): [True: 41.7k, False: 7.52k]
  ------------------
  193|  49.3k|					      !plan.apply_kerx &&
  ------------------
  |  Branch (193:12): [True: 40.0k, False: 1.76k]
  ------------------
  194|  49.3k|					      (!plan.apply_kern
  ------------------
  |  Branch (194:13): [True: 39.1k, False: 869]
  ------------------
  195|  40.0k|#ifndef HB_NO_OT_KERN
  196|  40.0k|					       || !hb_ot_layout_has_cross_kerning (face)
  ------------------
  |  Branch (196:16): [True: 362, False: 507]
  ------------------
  197|  40.0k|#endif
  198|  40.0k|					      );
  199|       |
  200|  49.3k|  plan.fallback_mark_positioning = plan.adjust_mark_positioning_when_zeroing &&
  ------------------
  |  Branch (200:36): [True: 39.5k, False: 9.79k]
  ------------------
  201|  49.3k|				   script_fallback_mark_positioning;
  ------------------
  |  Branch (201:8): [True: 33.9k, False: 5.58k]
  ------------------
  202|       |
  203|  49.3k|#ifndef HB_NO_AAT_SHAPE
  204|       |  /* If we're using morx shaping, we cancel mark position adjustment because
  205|       |     Apple Color Emoji assumes this will NOT be done when forming emoji sequences;
  206|       |     https://github.com/harfbuzz/harfbuzz/issues/2967. */
  207|  49.3k|  if (plan.apply_morx)
  ------------------
  |  Branch (207:7): [True: 2.45k, False: 46.8k]
  ------------------
  208|  2.45k|    plan.adjust_mark_positioning_when_zeroing = false;
  209|       |
  210|       |  /* Currently we always apply trak. */
  211|  49.3k|  plan.apply_trak = plan.requested_tracking && hb_aat_layout_has_tracking (face);
  ------------------
  |  Branch (211:21): [True: 48.0k, False: 1.30k]
  |  Branch (211:48): [True: 69, False: 47.9k]
  ------------------
  212|  49.3k|#endif
  213|  49.3k|}
_ZN18hb_ot_shape_plan_t5init0EP9hb_face_tPK19hb_shape_plan_key_t:
  218|  49.3k|{
  219|  49.3k|  map.init ();
  220|       |
  221|  49.3k|  hb_ot_shape_planner_t planner (face,
  222|  49.3k|				 key->props);
  223|       |
  224|  49.3k|  hb_ot_shape_collect_features (&planner,
  225|  49.3k|				key->user_features,
  226|  49.3k|				key->num_user_features);
  227|       |
  228|  49.3k|  planner.compile (*this, key->ot);
  229|       |
  230|  49.3k|  if (shaper->data_create)
  ------------------
  |  Branch (230:7): [True: 6.62k, False: 42.6k]
  ------------------
  231|  6.62k|  {
  232|  6.62k|    data = shaper->data_create (this);
  233|  6.62k|    if (unlikely (!data))
  ------------------
  |  |  259|  6.62k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25, False: 6.60k]
  |  |  ------------------
  ------------------
  234|     25|    {
  235|     25|      map.fini ();
  236|     25|      return false;
  237|     25|    }
  238|  6.62k|  }
  239|       |
  240|  49.2k|  return true;
  241|  49.3k|}
_ZN18hb_ot_shape_plan_t4finiEv:
  245|  49.2k|{
  246|  49.2k|  if (shaper->data_destroy)
  ------------------
  |  Branch (246:7): [True: 6.60k, False: 42.6k]
  ------------------
  247|  6.60k|    shaper->data_destroy (const_cast<void *> (data));
  248|       |
  249|  49.2k|  map.fini ();
  250|  49.2k|}
_ZNK18hb_ot_shape_plan_t10substituteEP9hb_font_tP11hb_buffer_t:
  255|   553k|{
  256|   553k|  map.substitute (this, font, buffer);
  257|   553k|}
_ZNK18hb_ot_shape_plan_t8positionEP9hb_font_tP11hb_buffer_t:
  262|   565k|{
  263|   565k|  if (this->apply_gpos)
  ------------------
  |  Branch (263:7): [True: 85.9k, False: 479k]
  ------------------
  264|  85.9k|    map.position (this, font, buffer);
  265|   479k|#ifndef HB_NO_AAT_SHAPE
  266|   479k|  else if (this->apply_kerx)
  ------------------
  |  Branch (266:12): [True: 10.9k, False: 468k]
  ------------------
  267|  10.9k|    hb_aat_layout_position (this, font, buffer);
  268|   565k|#endif
  269|       |
  270|   565k|#ifndef HB_NO_OT_KERN
  271|   565k|  if (this->apply_kern)
  ------------------
  |  Branch (271:7): [True: 5.02k, False: 560k]
  ------------------
  272|  5.02k|    hb_ot_layout_kern (this, font, buffer);
  273|   560k|#endif
  274|   560k|  else if (this->apply_fallback_kern)
  ------------------
  |  Branch (274:12): [True: 463k, False: 96.8k]
  ------------------
  275|   463k|    _hb_ot_shape_fallback_kern (this, font, buffer);
  276|       |
  277|   565k|#ifndef HB_NO_AAT_SHAPE
  278|   565k|  if (this->apply_trak)
  ------------------
  |  Branch (278:7): [True: 1.08k, False: 563k]
  ------------------
  279|  1.08k|    hb_aat_layout_track (this, font, buffer);
  280|   565k|#endif
  281|   565k|}
_hb_ot_shaper_face_data_create:
  403|  33.1k|{
  404|  33.1k|  return (hb_ot_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
  ------------------
  |  |   71|  33.1k|#define HB_SHAPER_DATA_SUCCEEDED ((void *) +1)
  ------------------
  405|  33.1k|}
_hb_ot_shaper_face_data_destroy:
  409|  33.1k|{
  410|  33.1k|}
_hb_ot_shaper_font_data_create:
  421|  33.0k|{
  422|  33.0k|  return (hb_ot_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
  ------------------
  |  |   71|  33.0k|#define HB_SHAPER_DATA_SUCCEEDED ((void *) +1)
  ------------------
  423|  33.0k|}
_hb_ot_shaper_font_data_destroy:
  427|  33.0k|{
  428|  33.0k|}
_hb_ot_shape:
 1204|   565k|{
 1205|   565k|  hb_ot_shape_context_t c = {&shape_plan->ot, font, font->face, buffer, features, num_features};
 1206|   565k|  hb_ot_shape_internal (&c);
 1207|       |
 1208|   565k|  return true;
 1209|   565k|}
hb-ot-shape.cc:_ZL14_hb_apply_morxP9hb_face_tRK23hb_segment_properties_t:
   57|  49.3k|{
   58|       |  /* https://github.com/harfbuzz/harfbuzz/issues/2124 */
   59|  49.3k|  return hb_aat_layout_has_substitution (face) &&
  ------------------
  |  Branch (59:10): [True: 2.45k, False: 46.8k]
  ------------------
   60|  49.3k|	 (HB_DIRECTION_IS_HORIZONTAL (props.direction) || !hb_ot_layout_has_substitution (face));
  ------------------
  |  |  271|  4.91k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 2.45k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (60:52): [True: 0, False: 0]
  ------------------
   61|  49.3k|}
hb-ot-shape.cc:_ZL28hb_ot_shape_collect_featuresP21hb_ot_shape_planner_tPK12hb_feature_tj:
  313|  49.3k|{
  314|  49.3k|  hb_ot_map_builder_t *map = &planner->map;
  315|       |
  316|  49.3k|  map->enable_feature (HB_TAG('r','v','r','n'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  317|  49.3k|  map->add_gsub_pause (nullptr);
  318|       |
  319|  49.3k|  switch (planner->props.direction)
  320|  49.3k|  {
  321|  46.3k|    case HB_DIRECTION_LTR:
  ------------------
  |  Branch (321:5): [True: 46.3k, False: 3.01k]
  ------------------
  322|  46.3k|      map->enable_feature (HB_TAG ('l','t','r','a'));
  ------------------
  |  |  179|  46.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  323|  46.3k|      map->enable_feature (HB_TAG ('l','t','r','m'));
  ------------------
  |  |  179|  46.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  324|  46.3k|      break;
  325|  3.01k|    case HB_DIRECTION_RTL:
  ------------------
  |  Branch (325:5): [True: 3.01k, False: 46.3k]
  ------------------
  326|  3.01k|      map->enable_feature (HB_TAG ('r','t','l','a'));
  ------------------
  |  |  179|  3.01k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  327|  3.01k|      map->add_feature (HB_TAG ('r','t','l','m'));
  ------------------
  |  |  179|  3.01k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  328|  3.01k|      break;
  329|      0|    case HB_DIRECTION_TTB:
  ------------------
  |  Branch (329:5): [True: 0, False: 49.3k]
  ------------------
  330|      0|    case HB_DIRECTION_BTT:
  ------------------
  |  Branch (330:5): [True: 0, False: 49.3k]
  ------------------
  331|      0|    case HB_DIRECTION_INVALID:
  ------------------
  |  Branch (331:5): [True: 0, False: 49.3k]
  ------------------
  332|      0|    default:
  ------------------
  |  Branch (332:5): [True: 0, False: 49.3k]
  ------------------
  333|      0|      break;
  334|  49.3k|  }
  335|       |
  336|  49.3k|#ifndef HB_NO_OT_SHAPE_FRACTIONS
  337|       |  /* Automatic fractions. */
  338|  49.3k|  map->add_feature (HB_TAG ('f','r','a','c'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  339|  49.3k|  map->add_feature (HB_TAG ('n','u','m','r'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  340|  49.3k|  map->add_feature (HB_TAG ('d','n','o','m'));
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  341|  49.3k|#endif
  342|       |
  343|       |  /* Random! */
  344|  49.3k|  map->enable_feature (HB_TAG ('r','a','n','d'), F_RANDOM, HB_OT_MAP_MAX_VALUE);
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
                map->enable_feature (HB_TAG ('r','a','n','d'), F_RANDOM, HB_OT_MAP_MAX_VALUE);
  ------------------
  |  |   36|  49.3k|#define HB_OT_MAP_MAX_VALUE ((1u << HB_OT_MAP_MAX_BITS) - 1u)
  |  |  ------------------
  |  |  |  |   35|  49.3k|#define HB_OT_MAP_MAX_BITS 8u
  |  |  ------------------
  ------------------
  345|       |
  346|  49.3k|#ifndef HB_NO_AAT_SHAPE
  347|       |  /* Tracking.  We enable dummy feature here just to allow disabling
  348|       |   * AAT 'trak' table using features.
  349|       |   * https://github.com/harfbuzz/harfbuzz/issues/1303 */
  350|  49.3k|  map->enable_feature (HB_TAG ('t','r','a','k'), F_HAS_FALLBACK);
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  351|  49.3k|#endif
  352|       |
  353|  49.3k|  map->enable_feature (HB_TAG ('H','a','r','f')); /* Considered required. */
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  354|  49.3k|  map->enable_feature (HB_TAG ('H','A','R','F')); /* Considered discretionary. */
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  355|       |
  356|  49.3k|  if (planner->shaper->collect_features)
  ------------------
  |  Branch (356:7): [True: 7.08k, False: 42.2k]
  ------------------
  357|  7.08k|    planner->shaper->collect_features (planner);
  358|       |
  359|  49.3k|  map->enable_feature (HB_TAG ('B','u','z','z')); /* Considered required. */
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  360|  49.3k|  map->enable_feature (HB_TAG ('B','U','Z','Z')); /* Considered discretionary. */
  ------------------
  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  361|       |
  362|   394k|  for (unsigned int i = 0; i < ARRAY_LENGTH (common_features); i++)
  ------------------
  |  Branch (362:28): [True: 345k, False: 49.3k]
  ------------------
  363|   345k|    map->add_feature (common_features[i]);
  364|       |
  365|  49.3k|  if (HB_DIRECTION_IS_HORIZONTAL (planner->props.direction))
  ------------------
  |  |  271|  49.3k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 49.3k, False: 0]
  |  |  ------------------
  ------------------
  366|   394k|    for (unsigned int i = 0; i < ARRAY_LENGTH (horizontal_features); i++)
  ------------------
  |  Branch (366:30): [True: 345k, False: 49.3k]
  ------------------
  367|   345k|      map->add_feature (horizontal_features[i]);
  368|      0|  else
  369|      0|  {
  370|       |    /* We only apply `vert` feature. See:
  371|       |     * https://github.com/harfbuzz/harfbuzz/commit/d71c0df2d17f4590d5611239577a6cb532c26528
  372|       |     * https://lists.freedesktop.org/archives/harfbuzz/2013-August/003490.html */
  373|       |
  374|       |    /* We really want to find a 'vert' feature if there's any in the font, no
  375|       |     * matter which script/langsys it is listed (or not) under.
  376|       |     * See various bugs referenced from:
  377|       |     * https://github.com/harfbuzz/harfbuzz/issues/63 */
  378|      0|    map->enable_feature (HB_TAG ('v','e','r','t'), F_GLOBAL_SEARCH);
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  379|      0|  }
  380|       |
  381|  49.3k|  for (unsigned int i = 0; i < num_user_features; i++)
  ------------------
  |  Branch (381:28): [True: 0, False: 49.3k]
  ------------------
  382|      0|  {
  383|      0|    const hb_feature_t *feature = &user_features[i];
  384|      0|    map->add_feature (feature->tag,
  385|      0|		      (feature->start == HB_FEATURE_GLOBAL_START &&
  ------------------
  |  |  805|      0|#define HB_FEATURE_GLOBAL_START	0
  ------------------
  |  Branch (385:10): [True: 0, False: 0]
  ------------------
  386|      0|		       feature->end == HB_FEATURE_GLOBAL_END) ?  F_GLOBAL : F_NONE,
  ------------------
  |  |  815|      0|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  |  Branch (386:10): [True: 0, False: 0]
  ------------------
  387|      0|		      feature->value);
  388|      0|  }
  389|       |
  390|  49.3k|  if (planner->shaper->override_features)
  ------------------
  |  Branch (390:7): [True: 3.46k, False: 45.8k]
  ------------------
  391|  3.46k|    planner->shaper->override_features (planner);
  392|  49.3k|}
hb-ot-shape.cc:_ZL20hb_ot_shape_internalP21hb_ot_shape_context_t:
 1163|   565k|{
 1164|       |  /* Save the original direction, we use it later. */
 1165|   565k|  c->target_direction = c->buffer->props.direction;
 1166|       |
 1167|   565k|  _hb_buffer_allocate_unicode_vars (c->buffer);
 1168|       |
 1169|   565k|  hb_ot_shape_initialize_masks (c);
 1170|   565k|  hb_set_unicode_props (c->buffer);
 1171|   565k|  hb_insert_dotted_circle (c->buffer, c->font);
 1172|       |
 1173|   565k|  hb_form_clusters (c->buffer);
 1174|       |
 1175|   565k|  hb_ensure_native_direction (c->buffer);
 1176|       |
 1177|   565k|  if (c->plan->shaper->preprocess_text &&
  ------------------
  |  Branch (1177:7): [True: 5.23k, False: 559k]
  ------------------
 1178|   565k|      c->buffer->message(c->font, "start preprocess-text"))
  ------------------
  |  Branch (1178:7): [True: 5.23k, False: 0]
  ------------------
 1179|  5.23k|  {
 1180|  5.23k|    c->plan->shaper->preprocess_text (c->plan, c->buffer, c->font);
 1181|  5.23k|    (void) c->buffer->message(c->font, "end preprocess-text");
 1182|  5.23k|  }
 1183|       |
 1184|   565k|  hb_ot_substitute_pre (c);
 1185|   565k|  hb_ot_position (c);
 1186|   565k|  hb_ot_substitute_post (c);
 1187|       |
 1188|   565k|  hb_propagate_flags (c->buffer);
 1189|       |
 1190|   565k|  _hb_buffer_deallocate_unicode_vars (c->buffer);
 1191|       |
 1192|   565k|  c->buffer->props.direction = c->target_direction;
 1193|       |
 1194|   565k|  c->buffer->leave ();
 1195|   565k|}
hb-ot-shape.cc:_ZL28hb_ot_shape_initialize_masksPK21hb_ot_shape_context_t:
  768|   565k|{
  769|   565k|  hb_ot_map_t *map = &c->plan->map;
  770|   565k|  hb_buffer_t *buffer = c->buffer;
  771|       |
  772|   565k|  hb_mask_t global_mask = map->get_global_mask ();
  773|   565k|  buffer->reset_masks (global_mask);
  774|   565k|}
hb-ot-shape.cc:_ZL20hb_set_unicode_propsP11hb_buffer_t:
  457|   565k|{
  458|       |  /* Implement enough of Unicode Graphemes here that shaping
  459|       |   * in reverse-direction wouldn't break graphemes.  Namely,
  460|       |   * we mark all marks and ZWJ and ZWJ,Extended_Pictographic
  461|       |   * sequences as continuations.  The foreach_grapheme()
  462|       |   * macro uses this bit.
  463|       |   *
  464|       |   * https://www.unicode.org/reports/tr29/#Regex_Definitions
  465|       |   */
  466|   565k|  unsigned int count = buffer->len;
  467|   565k|  hb_glyph_info_t *info = buffer->info;
  468|  2.20M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (468:28): [True: 1.64M, False: 565k]
  ------------------
  469|  1.64M|  {
  470|  1.64M|    _hb_glyph_info_set_unicode_props (&info[i], buffer);
  471|       |
  472|       |    /* Marks are already set as continuation by the above line.
  473|       |     * Handle Emoji_Modifier and ZWJ-continuation. */
  474|  1.64M|    if (unlikely (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL &&
  ------------------
  |  |  259|  1.64M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 19, False: 1.64M]
  |  |  |  Branch (259:47): [True: 265, False: 1.64M]
  |  |  |  Branch (259:47): [True: 19, False: 246]
  |  |  ------------------
  ------------------
  475|  1.64M|		  hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x1F3FBu, 0x1F3FFu)))
  476|     19|    {
  477|     19|      _hb_glyph_info_set_continuation (&info[i]);
  478|     19|    }
  479|       |    /* Regional_Indicators are hairy as hell...
  480|       |     * https://github.com/harfbuzz/harfbuzz/issues/2265 */
  481|  1.64M|    else if (unlikely (i && _hb_codepoint_is_regional_indicator (info[i].codepoint)))
  ------------------
  |  |  259|  2.72M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 60, False: 1.64M]
  |  |  |  Branch (259:47): [True: 1.07M, False: 565k]
  |  |  |  Branch (259:47): [True: 60, False: 1.07M]
  |  |  ------------------
  ------------------
  482|     60|    {
  483|     60|      if (_hb_codepoint_is_regional_indicator (info[i - 1].codepoint) &&
  ------------------
  |  Branch (483:11): [True: 35, False: 25]
  ------------------
  484|     60|	  !_hb_glyph_info_is_continuation (&info[i - 1]))
  ------------------
  |  Branch (484:4): [True: 21, False: 14]
  ------------------
  485|     21|	_hb_glyph_info_set_continuation (&info[i]);
  486|     60|    }
  487|  1.64M|#ifndef HB_NO_EMOJI_SEQUENCES
  488|  1.64M|    else if (unlikely (_hb_glyph_info_is_zwj (&info[i])))
  ------------------
  |  |  259|  1.64M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.17k, False: 1.64M]
  |  |  ------------------
  ------------------
  489|  2.17k|    {
  490|  2.17k|      _hb_glyph_info_set_continuation (&info[i]);
  491|  2.17k|      if (i + 1 < count &&
  ------------------
  |  Branch (491:11): [True: 1.66k, False: 509]
  ------------------
  492|  2.17k|	  _hb_unicode_is_emoji_Extended_Pictographic (info[i + 1].codepoint))
  ------------------
  |  Branch (492:4): [True: 12, False: 1.65k]
  ------------------
  493|     12|      {
  494|     12|	i++;
  495|     12|	_hb_glyph_info_set_unicode_props (&info[i], buffer);
  496|     12|	_hb_glyph_info_set_continuation (&info[i]);
  497|     12|      }
  498|  2.17k|    }
  499|  1.64M|#endif
  500|       |    /* Or part of the Other_Grapheme_Extend that is not marks.
  501|       |     * As of Unicode 15 that is just:
  502|       |     *
  503|       |     * 200C          ; Other_Grapheme_Extend # Cf       ZERO WIDTH NON-JOINER
  504|       |     * FF9E..FF9F    ; Other_Grapheme_Extend # Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
  505|       |     * E0020..E007F  ; Other_Grapheme_Extend # Cf  [96] TAG SPACE..CANCEL TAG
  506|       |     *
  507|       |     * ZWNJ is special, we don't want to merge it as there's no need, and keeping
  508|       |     * it separate results in more granular clusters.
  509|       |     * Tags are used for Emoji sub-region flag sequences:
  510|       |     * https://github.com/harfbuzz/harfbuzz/issues/1556
  511|       |     * Katakana ones were requested:
  512|       |     * https://github.com/harfbuzz/harfbuzz/issues/3844
  513|       |     */
  514|  1.64M|    else if (unlikely (hb_in_ranges<hb_codepoint_t> (info[i].codepoint, 0xFF9Eu, 0xFF9Fu, 0xE0020u, 0xE007Fu)))
  ------------------
  |  |  259|  1.64M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 123, False: 1.64M]
  |  |  ------------------
  ------------------
  515|    123|      _hb_glyph_info_set_continuation (&info[i]);
  516|  1.64M|  }
  517|   565k|}
hb-ot-shape.cc:_ZL35_hb_codepoint_is_regional_indicatorj:
   52|  1.07M|{ return hb_in_range<hb_codepoint_t> (u, 0x1F1E6u, 0x1F1FFu); }
hb-ot-shape.cc:_ZL23hb_insert_dotted_circleP11hb_buffer_tP9hb_font_t:
  521|   565k|{
  522|   565k|  if (unlikely (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  523|      0|    return;
  524|       |
  525|   565k|  if (!(buffer->flags & HB_BUFFER_FLAG_BOT) ||
  ------------------
  |  Branch (525:7): [True: 565k, False: 0]
  ------------------
  526|   565k|      buffer->context_len[0] ||
  ------------------
  |  Branch (526:7): [True: 0, False: 0]
  ------------------
  527|   565k|      !_hb_glyph_info_is_unicode_mark (&buffer->info[0]))
  ------------------
  |  Branch (527:7): [True: 0, False: 0]
  ------------------
  528|   565k|    return;
  529|       |
  530|      0|  if (!font->has_glyph (0x25CCu))
  ------------------
  |  Branch (530:7): [True: 0, False: 0]
  ------------------
  531|      0|    return;
  532|       |
  533|      0|  hb_glyph_info_t dottedcircle = {0};
  534|      0|  dottedcircle.codepoint = 0x25CCu;
  535|      0|  _hb_glyph_info_set_unicode_props (&dottedcircle, buffer);
  536|       |
  537|      0|  buffer->clear_output ();
  538|       |
  539|      0|  buffer->idx = 0;
  540|      0|  hb_glyph_info_t info = dottedcircle;
  541|      0|  info.cluster = buffer->cur().cluster;
  542|      0|  info.mask = buffer->cur().mask;
  543|      0|  (void) buffer->output_info (info);
  544|       |
  545|      0|  buffer->sync ();
  546|      0|}
hb-ot-shape.cc:_ZL16hb_form_clustersP11hb_buffer_t:
  550|   565k|{
  551|   565k|  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII))
  ------------------
  |  Branch (551:7): [True: 532k, False: 32.1k]
  ------------------
  552|   532k|    return;
  553|       |
  554|  32.1k|  if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
  ------------------
  |  Branch (554:7): [True: 32.1k, False: 0]
  ------------------
  555|  32.1k|    foreach_grapheme (buffer, start, end)
  ------------------
  |  |  349|  32.1k|	foreach_group (buffer, start, end, _hb_grapheme_group_func)
  |  |  ------------------
  |  |  |  |  656|  32.1k|  for (unsigned int \
  |  |  |  |  657|  32.1k|       _count = buffer->len, \
  |  |  |  |  658|  32.1k|       start = 0, end = _count ? buffer->group_end (0, group_func) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (658:25): [True: 32.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  659|   520k|       start < _count; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (659:8): [True: 487k, False: 32.1k]
  |  |  |  |  ------------------
  |  |  |  |  660|   487k|       start = end, end = buffer->group_end (start, group_func))
  |  |  ------------------
  ------------------
  556|   487k|      buffer->merge_clusters (start, end);
  557|      0|  else
  558|      0|    foreach_grapheme (buffer, start, end)
  ------------------
  |  |  349|      0|	foreach_group (buffer, start, end, _hb_grapheme_group_func)
  |  |  ------------------
  |  |  |  |  656|      0|  for (unsigned int \
  |  |  |  |  657|      0|       _count = buffer->len, \
  |  |  |  |  658|      0|       start = 0, end = _count ? buffer->group_end (0, group_func) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (658:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  659|      0|       start < _count; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (659:8): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  660|      0|       start = end, end = buffer->group_end (start, group_func))
  |  |  ------------------
  ------------------
  559|      0|      buffer->unsafe_to_break (start, end);
  560|  32.1k|}
hb-ot-shape.cc:_ZL26hb_ensure_native_directionP11hb_buffer_t:
  564|   565k|{
  565|   565k|  hb_direction_t direction = buffer->props.direction;
  566|   565k|  hb_direction_t horiz_dir = hb_script_get_horizontal_direction (buffer->props.script);
  567|       |
  568|       |  /* Numeric runs in natively-RTL scripts are actually native-LTR, so we reset
  569|       |   * the horiz_dir if the run contains at least one decimal-number char, and no
  570|       |   * letter chars (ideally we should be checking for chars with strong
  571|       |   * directionality but hb-unicode currently lacks bidi categories).
  572|       |   *
  573|       |   * This allows digit sequences in Arabic etc to be shaped in "native"
  574|       |   * direction, so that features like ligatures will work as intended.
  575|       |   *
  576|       |   * https://github.com/harfbuzz/harfbuzz/issues/501
  577|       |   *
  578|       |   * Similar thing about Regional_Indicators; They are bidi=L, but Script=Common.
  579|       |   * If they are present in a run of natively-RTL text, they get assigned a script
  580|       |   * with natively RTL direction, which would result in wrong shaping if we
  581|       |   * assign such native RTL direction to them then. Detect that as well.
  582|       |   *
  583|       |   * https://github.com/harfbuzz/harfbuzz/issues/3314
  584|       |   */
  585|   565k|  if (unlikely (horiz_dir == HB_DIRECTION_RTL && direction == HB_DIRECTION_LTR))
  ------------------
  |  |  259|   568k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 565k]
  |  |  |  Branch (259:47): [True: 3.00k, False: 562k]
  |  |  |  Branch (259:47): [True: 0, False: 3.00k]
  |  |  ------------------
  ------------------
  586|      0|  {
  587|      0|    bool found_number = false, found_letter = false, found_ri = false;
  588|      0|    const auto* info = buffer->info;
  589|      0|    const auto count = buffer->len;
  590|      0|    for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (590:26): [True: 0, False: 0]
  ------------------
  591|      0|    {
  592|      0|      auto gc = _hb_glyph_info_get_general_category (&info[i]);
  593|      0|      if (gc == HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
  ------------------
  |  Branch (593:11): [True: 0, False: 0]
  ------------------
  594|      0|	found_number = true;
  595|      0|      else if (HB_UNICODE_GENERAL_CATEGORY_IS_LETTER (gc))
  ------------------
  |  |  361|      0|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|      0|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (361:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|      0|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|      0|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|      0|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  364|      0|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|      0|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  365|      0|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|      0|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  366|      0|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER)))
  |  |  ------------------
  |  |  |  |   73|      0|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  596|      0|      {
  597|      0|	found_letter = true;
  598|      0|	break;
  599|      0|      }
  600|      0|      else if (_hb_codepoint_is_regional_indicator (info[i].codepoint))
  ------------------
  |  Branch (600:16): [True: 0, False: 0]
  ------------------
  601|      0|	found_ri = true;
  602|      0|    }
  603|      0|    if ((found_number || found_ri) && !found_letter)
  ------------------
  |  Branch (603:10): [True: 0, False: 0]
  |  Branch (603:26): [True: 0, False: 0]
  |  Branch (603:39): [True: 0, False: 0]
  ------------------
  604|      0|      horiz_dir = HB_DIRECTION_LTR;
  605|      0|  }
  606|       |
  607|       |  /* TODO vertical:
  608|       |   * The only BTT vertical script is Ogham, but it's not clear to me whether OpenType
  609|       |   * Ogham fonts are supposed to be implemented BTT or not.  Need to research that
  610|       |   * first. */
  611|   565k|  if ((HB_DIRECTION_IS_HORIZONTAL (direction) &&
  ------------------
  |  |  271|  1.13M|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 565k, False: 0]
  |  |  ------------------
  ------------------
  612|   565k|       direction != horiz_dir && horiz_dir != HB_DIRECTION_INVALID) ||
  ------------------
  |  Branch (612:8): [True: 20, False: 565k]
  |  Branch (612:34): [True: 0, False: 20]
  ------------------
  613|   565k|      (HB_DIRECTION_IS_VERTICAL   (direction) &&
  ------------------
  |  |  280|  1.13M|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  |  |  ------------------
  |  |  |  Branch (280:39): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  614|   565k|       direction != HB_DIRECTION_TTB))
  ------------------
  |  Branch (614:8): [True: 0, False: 0]
  ------------------
  615|      0|  {
  616|      0|    _hb_ot_layout_reverse_graphemes (buffer);
  617|      0|    buffer->props.direction = HB_DIRECTION_REVERSE (buffer->props.direction);
  ------------------
  |  |  307|      0|#define HB_DIRECTION_REVERSE(dir)	((hb_direction_t) (((unsigned int) (dir)) ^ 1))
  ------------------
  618|      0|  }
  619|   565k|}
hb-ot-shape.cc:_ZL20hb_ot_substitute_prePK21hb_ot_shape_context_t:
  923|   565k|{
  924|   565k|  hb_ot_substitute_default (c);
  925|       |
  926|   565k|  _hb_buffer_allocate_gsubgpos_vars (c->buffer);
  927|       |
  928|   565k|  hb_ot_substitute_plan (c);
  929|       |
  930|   565k|#ifndef HB_NO_AAT_SHAPE
  931|   565k|  if (c->plan->apply_morx && c->plan->apply_gpos)
  ------------------
  |  Branch (931:7): [True: 11.1k, False: 553k]
  |  Branch (931:30): [True: 188, False: 10.9k]
  ------------------
  932|    188|    hb_aat_layout_remove_deleted_glyphs (c->buffer);
  933|   565k|#endif
  934|   565k|}
hb-ot-shape.cc:_ZL24hb_ot_substitute_defaultPK21hb_ot_shape_context_t:
  882|   565k|{
  883|   565k|  hb_buffer_t *buffer = c->buffer;
  884|       |
  885|   565k|  hb_ot_rotate_chars (c);
  886|       |
  887|   565k|  HB_BUFFER_ALLOCATE_VAR (buffer, glyph_index);
  ------------------
  |  |  669|   565k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  888|       |
  889|   565k|  _hb_ot_shape_normalize (c->plan, buffer, c->font);
  890|       |
  891|   565k|  hb_ot_shape_setup_masks (c);
  892|       |
  893|       |  /* This is unfortunate to go here, but necessary... */
  894|   565k|  if (c->plan->fallback_mark_positioning)
  ------------------
  |  Branch (894:7): [True: 459k, False: 105k]
  ------------------
  895|   459k|    _hb_ot_shape_fallback_mark_position_recategorize_marks (c->plan, c->font, buffer);
  896|       |
  897|   565k|  hb_ot_map_glyphs_fast (buffer);
  898|       |
  899|   565k|  HB_BUFFER_DEALLOCATE_VAR (buffer, glyph_index);
  ------------------
  |  |  671|   565k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|   565k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|   565k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  900|   565k|}
hb-ot-shape.cc:_ZL18hb_ot_rotate_charsPK21hb_ot_shape_context_t:
  681|   565k|{
  682|   565k|  hb_buffer_t *buffer = c->buffer;
  683|   565k|  unsigned int count = buffer->len;
  684|   565k|  hb_glyph_info_t *info = buffer->info;
  685|       |
  686|   565k|  if (HB_DIRECTION_IS_BACKWARD (c->target_direction))
  ------------------
  |  |  298|   565k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  |  |  ------------------
  |  |  |  Branch (298:39): [True: 3.00k, False: 562k]
  |  |  ------------------
  ------------------
  687|  3.00k|  {
  688|  3.00k|    hb_unicode_funcs_t *unicode = buffer->unicode;
  689|  3.00k|    hb_mask_t rtlm_mask = c->plan->rtlm_mask;
  690|       |
  691|  51.0k|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (691:30): [True: 48.0k, False: 3.00k]
  ------------------
  692|  48.0k|      hb_codepoint_t codepoint = unicode->mirroring (info[i].codepoint);
  693|  48.0k|      if (unlikely (codepoint != info[i].codepoint && c->font->has_glyph (codepoint)))
  ------------------
  |  |  259|  48.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 15, False: 48.0k]
  |  |  |  Branch (259:47): [True: 79, False: 48.0k]
  |  |  |  Branch (259:47): [True: 15, False: 64]
  |  |  ------------------
  ------------------
  694|     15|	info[i].codepoint = codepoint;
  695|  48.0k|      else
  696|  48.0k|	info[i].mask |= rtlm_mask;
  697|  48.0k|    }
  698|  3.00k|  }
  699|       |
  700|   565k|#ifndef HB_NO_VERTICAL
  701|   565k|  if (HB_DIRECTION_IS_VERTICAL (c->target_direction) && !c->plan->has_vert)
  ------------------
  |  |  280|  1.13M|#define HB_DIRECTION_IS_VERTICAL(dir)	((((unsigned int) (dir)) & ~1U) == 6)
  |  |  ------------------
  |  |  |  Branch (280:39): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  |  Branch (701:57): [True: 0, False: 0]
  ------------------
  702|      0|  {
  703|      0|    for (unsigned int i = 0; i < count; i++) {
  ------------------
  |  Branch (703:30): [True: 0, False: 0]
  ------------------
  704|      0|      hb_codepoint_t codepoint = hb_vert_char_for (info[i].codepoint);
  705|      0|      if (unlikely (codepoint != info[i].codepoint && c->font->has_glyph (codepoint)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  706|      0|	info[i].codepoint = codepoint;
  707|      0|    }
  708|      0|  }
  709|   565k|#endif
  710|   565k|}
hb-ot-shape.cc:_ZL23hb_ot_shape_setup_masksPK21hb_ot_shape_context_t:
  778|   565k|{
  779|   565k|  hb_ot_map_t *map = &c->plan->map;
  780|   565k|  hb_buffer_t *buffer = c->buffer;
  781|       |
  782|   565k|  hb_ot_shape_setup_masks_fraction (c);
  783|       |
  784|   565k|  if (c->plan->shaper->setup_masks)
  ------------------
  |  Branch (784:7): [True: 7.05k, False: 558k]
  ------------------
  785|  7.05k|    c->plan->shaper->setup_masks (c->plan, buffer, c->font);
  786|       |
  787|   565k|  for (unsigned int i = 0; i < c->num_user_features; i++)
  ------------------
  |  Branch (787:28): [True: 0, False: 565k]
  ------------------
  788|      0|  {
  789|      0|    const hb_feature_t *feature = &c->user_features[i];
  790|      0|    if (!(feature->start == HB_FEATURE_GLOBAL_START && feature->end == HB_FEATURE_GLOBAL_END)) {
  ------------------
  |  |  805|      0|#define HB_FEATURE_GLOBAL_START	0
  ------------------
                  if (!(feature->start == HB_FEATURE_GLOBAL_START && feature->end == HB_FEATURE_GLOBAL_END)) {
  ------------------
  |  |  815|      0|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  |  Branch (790:11): [True: 0, False: 0]
  |  Branch (790:56): [True: 0, False: 0]
  ------------------
  791|      0|      unsigned int shift;
  792|      0|      hb_mask_t mask = map->get_mask (feature->tag, &shift);
  793|      0|      buffer->set_masks (feature->value << shift, mask, feature->start, feature->end);
  794|      0|    }
  795|      0|  }
  796|   565k|}
hb-ot-shape.cc:_ZL32hb_ot_shape_setup_masks_fractionPK21hb_ot_shape_context_t:
  714|   565k|{
  715|       |#ifdef HB_NO_OT_SHAPE_FRACTIONS
  716|       |  return;
  717|       |#endif
  718|       |
  719|   565k|  if (!(c->buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII) ||
  ------------------
  |  Branch (719:7): [True: 532k, False: 32.1k]
  ------------------
  720|   565k|      !c->plan->has_frac)
  ------------------
  |  Branch (720:7): [True: 32.0k, False: 38]
  ------------------
  721|   565k|    return;
  722|       |
  723|     38|  hb_buffer_t *buffer = c->buffer;
  724|       |
  725|     38|  hb_mask_t pre_mask, post_mask;
  726|     38|  if (HB_DIRECTION_IS_FORWARD (buffer->props.direction))
  ------------------
  |  |  289|     38|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 31, False: 7]
  |  |  ------------------
  ------------------
  727|     31|  {
  728|     31|    pre_mask = c->plan->numr_mask | c->plan->frac_mask;
  729|     31|    post_mask = c->plan->frac_mask | c->plan->dnom_mask;
  730|     31|  }
  731|      7|  else
  732|      7|  {
  733|      7|    pre_mask = c->plan->frac_mask | c->plan->dnom_mask;
  734|      7|    post_mask = c->plan->numr_mask | c->plan->frac_mask;
  735|      7|  }
  736|       |
  737|     38|  unsigned int count = buffer->len;
  738|     38|  hb_glyph_info_t *info = buffer->info;
  739|    584|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (739:28): [True: 546, False: 38]
  ------------------
  740|    546|  {
  741|    546|    if (info[i].codepoint == 0x2044u) /* FRACTION SLASH */
  ------------------
  |  Branch (741:9): [True: 73, False: 473]
  ------------------
  742|     73|    {
  743|     73|      unsigned int start = i, end = i + 1;
  744|    149|      while (start &&
  ------------------
  |  Branch (744:14): [True: 146, False: 3]
  ------------------
  745|    149|	     _hb_glyph_info_get_general_category (&info[start - 1]) ==
  ------------------
  |  Branch (745:7): [True: 76, False: 70]
  ------------------
  746|    146|	     HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
  747|     76|	start--;
  748|    136|      while (end < count &&
  ------------------
  |  Branch (748:14): [True: 116, False: 20]
  ------------------
  749|    136|	     _hb_glyph_info_get_general_category (&info[end]) ==
  ------------------
  |  Branch (749:7): [True: 63, False: 53]
  ------------------
  750|    116|	     HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
  751|     63|	end++;
  752|       |
  753|     73|      buffer->unsafe_to_break (start, end);
  754|       |
  755|    149|      for (unsigned int j = start; j < i; j++)
  ------------------
  |  Branch (755:36): [True: 76, False: 73]
  ------------------
  756|     76|	info[j].mask |= pre_mask;
  757|     73|      info[i].mask |= c->plan->frac_mask;
  758|    136|      for (unsigned int j = i + 1; j < end; j++)
  ------------------
  |  Branch (758:36): [True: 63, False: 73]
  ------------------
  759|     63|	info[j].mask |= post_mask;
  760|       |
  761|     73|      i = end - 1;
  762|     73|    }
  763|    546|  }
  764|     38|}
hb-ot-shape.cc:_ZL21hb_ot_map_glyphs_fastP11hb_buffer_t:
  844|   565k|{
  845|       |  /* Normalization process sets up glyph_index(), we just copy it. */
  846|   565k|  unsigned int count = buffer->len;
  847|   565k|  hb_glyph_info_t *info = buffer->info;
  848|  2.21M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (848:28): [True: 1.64M, False: 565k]
  ------------------
  849|  1.64M|    info[i].codepoint = info[i].glyph_index();
  ------------------
  |  |   34|  1.64M|#define glyph_index()	var1.u32
  ------------------
  850|       |
  851|   565k|  buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
  852|   565k|}
hb-ot-shape.cc:_ZL21hb_ot_substitute_planPK21hb_ot_shape_context_t:
  904|   565k|{
  905|   565k|  hb_buffer_t *buffer = c->buffer;
  906|       |
  907|   565k|  hb_ot_layout_substitute_start (c->font, buffer);
  908|       |
  909|   565k|  if (c->plan->fallback_glyph_classes)
  ------------------
  |  Branch (909:7): [True: 549k, False: 15.6k]
  ------------------
  910|   549k|    hb_synthesize_glyph_classes (c->buffer);
  911|       |
  912|   565k|#ifndef HB_NO_AAT_SHAPE
  913|   565k|  if (unlikely (c->plan->apply_morx))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11.1k, False: 553k]
  |  |  ------------------
  ------------------
  914|  11.1k|    hb_aat_layout_substitute (c->plan, c->font, c->buffer,
  915|  11.1k|			      c->user_features, c->num_user_features);
  916|   553k|  else
  917|   553k|#endif
  918|   553k|    c->plan->substitute (c->font, buffer);
  919|   565k|}
hb-ot-shape.cc:_ZL27hb_synthesize_glyph_classesP11hb_buffer_t:
  856|   549k|{
  857|   549k|  unsigned int count = buffer->len;
  858|   549k|  hb_glyph_info_t *info = buffer->info;
  859|  2.14M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (859:28): [True: 1.59M, False: 549k]
  ------------------
  860|  1.59M|  {
  861|  1.59M|    hb_ot_layout_glyph_props_flags_t klass;
  862|       |
  863|       |    /* Never mark default-ignorables as marks.
  864|       |     * They won't get in the way of lookups anyway,
  865|       |     * but having them as mark will cause them to be skipped
  866|       |     * over if the lookup-flag says so, but at least for the
  867|       |     * Mongolian variation selectors, looks like Uniscribe
  868|       |     * marks them as non-mark.  Some Mongolian fonts without
  869|       |     * GDEF rely on this.  Another notable character that
  870|       |     * this applies to is COMBINING GRAPHEME JOINER. */
  871|  1.59M|    klass = (_hb_glyph_info_get_general_category (&info[i]) !=
  ------------------
  |  Branch (871:14): [True: 1.57M, False: 22.0k]
  ------------------
  872|  1.59M|	     HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK ||
  873|  1.59M|	     _hb_glyph_info_is_default_ignorable (&info[i])) ?
  ------------------
  |  Branch (873:7): [True: 1.87k, False: 20.1k]
  ------------------
  874|  1.57M|	    HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH :
  875|  1.59M|	    HB_OT_LAYOUT_GLYPH_PROPS_MARK;
  876|  1.59M|    _hb_glyph_info_set_glyph_props (&info[i], klass);
  877|  1.59M|  }
  878|   549k|}
hb-ot-shape.cc:_ZL14hb_ot_positionPK21hb_ot_shape_context_t:
 1101|   565k|{
 1102|   565k|  c->buffer->clear_positions ();
 1103|       |
 1104|   565k|  hb_ot_position_default (c);
 1105|       |
 1106|   565k|  hb_ot_position_plan (c);
 1107|       |
 1108|   565k|  if (HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction))
  ------------------
  |  |  298|   565k|#define HB_DIRECTION_IS_BACKWARD(dir)	((((unsigned int) (dir)) & ~2U) == 5)
  |  |  ------------------
  |  |  |  Branch (298:39): [True: 3.00k, False: 562k]
  |  |  ------------------
  ------------------
 1109|  3.00k|    hb_buffer_reverse (c->buffer);
 1110|       |
 1111|   565k|  _hb_buffer_deallocate_gsubgpos_vars (c->buffer);
 1112|   565k|}
hb-ot-shape.cc:_ZL22hb_ot_position_defaultPK21hb_ot_shape_context_t:
  988|   565k|{
  989|   565k|  hb_direction_t direction = c->buffer->props.direction;
  990|   565k|  unsigned int count = c->buffer->len;
  991|   565k|  hb_glyph_info_t *info = c->buffer->info;
  992|   565k|  hb_glyph_position_t *pos = c->buffer->pos;
  993|       |
  994|   565k|  if (HB_DIRECTION_IS_HORIZONTAL (direction))
  ------------------
  |  |  271|   565k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 565k, False: 0]
  |  |  ------------------
  ------------------
  995|   565k|  {
  996|   565k|    c->font->get_glyph_h_advances (count, &info[0].codepoint, sizeof(info[0]),
  997|   565k|				   &pos[0].x_advance, sizeof(pos[0]));
  998|       |    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
  999|   565k|    if (c->font->has_glyph_h_origin_func ())
  ------------------
  |  Branch (999:9): [True: 0, False: 565k]
  ------------------
 1000|      0|      for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1000:32): [True: 0, False: 0]
  ------------------
 1001|      0|	c->font->subtract_glyph_h_origin (info[i].codepoint,
 1002|      0|					  &pos[i].x_offset,
 1003|      0|					  &pos[i].y_offset);
 1004|   565k|  }
 1005|      0|  else
 1006|      0|  {
 1007|      0|    c->font->get_glyph_v_advances (count, &info[0].codepoint, sizeof(info[0]),
 1008|      0|				   &pos[0].y_advance, sizeof(pos[0]));
 1009|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1009:30): [True: 0, False: 0]
  ------------------
 1010|      0|    {
 1011|      0|      c->font->subtract_glyph_v_origin (info[i].codepoint,
 1012|      0|					&pos[i].x_offset,
 1013|      0|					&pos[i].y_offset);
 1014|      0|    }
 1015|      0|  }
 1016|   565k|  if (c->buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK)
  ------------------
  |  Branch (1016:7): [True: 146, False: 564k]
  ------------------
 1017|    146|    _hb_ot_shape_fallback_spaces (c->plan, c->font, c->buffer);
 1018|   565k|}
hb-ot-shape.cc:_ZL19hb_ot_position_planPK21hb_ot_shape_context_t:
 1022|   565k|{
 1023|   565k|  unsigned int count = c->buffer->len;
 1024|   565k|  hb_glyph_info_t *info = c->buffer->info;
 1025|   565k|  hb_glyph_position_t *pos = c->buffer->pos;
 1026|       |
 1027|       |  /* If the font has no GPOS and direction is forward, then when
 1028|       |   * zeroing mark widths, we shift the mark with it, such that the
 1029|       |   * mark is positioned hanging over the previous glyph.  When
 1030|       |   * direction is backward we don't shift and it will end up
 1031|       |   * hanging over the next glyph after the final reordering.
 1032|       |   *
 1033|       |   * Note: If fallback positinoing happens, we don't care about
 1034|       |   * this as it will be overridden.
 1035|       |   */
 1036|   565k|  bool adjust_offsets_when_zeroing = c->plan->adjust_mark_positioning_when_zeroing &&
  ------------------
  |  Branch (1036:38): [True: 454k, False: 110k]
  ------------------
 1037|   565k|				     HB_DIRECTION_IS_FORWARD (c->buffer->props.direction);
  ------------------
  |  |  289|   454k|#define HB_DIRECTION_IS_FORWARD(dir)	((((unsigned int) (dir)) & ~2U) == 4)
  |  |  ------------------
  |  |  |  Branch (289:38): [True: 452k, False: 2.28k]
  |  |  ------------------
  ------------------
 1038|       |
 1039|       |  /* We change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
 1040|       |
 1041|       |  /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
 1042|   565k|  if (c->font->has_glyph_h_origin_func ())
  ------------------
  |  Branch (1042:7): [True: 0, False: 565k]
  ------------------
 1043|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1043:30): [True: 0, False: 0]
  ------------------
 1044|      0|      c->font->add_glyph_h_origin (info[i].codepoint,
 1045|      0|				   &pos[i].x_offset,
 1046|      0|				   &pos[i].y_offset);
 1047|       |
 1048|   565k|  hb_ot_layout_position_start (c->font, c->buffer);
 1049|       |
 1050|   565k|  if (c->plan->zero_marks)
  ------------------
  |  Branch (1050:7): [True: 549k, False: 15.4k]
  ------------------
 1051|   549k|    switch (c->plan->shaper->zero_width_marks)
 1052|   549k|    {
 1053|  2.19k|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
  ------------------
  |  Branch (1053:7): [True: 2.19k, False: 547k]
  ------------------
 1054|  2.19k|	zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
 1055|  2.19k|	break;
 1056|       |
 1057|      0|      default:
  ------------------
  |  Branch (1057:7): [True: 0, False: 549k]
  ------------------
 1058|    128|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
  ------------------
  |  Branch (1058:7): [True: 128, False: 549k]
  ------------------
 1059|   547k|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
  ------------------
  |  Branch (1059:7): [True: 547k, False: 2.32k]
  ------------------
 1060|   547k|	break;
 1061|   549k|    }
 1062|       |
 1063|   565k|  c->plan->position (c->font, c->buffer);
 1064|       |
 1065|   565k|  if (c->plan->zero_marks)
  ------------------
  |  Branch (1065:7): [True: 549k, False: 15.4k]
  ------------------
 1066|   549k|    switch (c->plan->shaper->zero_width_marks)
 1067|   549k|    {
 1068|   547k|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
  ------------------
  |  Branch (1068:7): [True: 547k, False: 2.32k]
  ------------------
 1069|   547k|	zero_mark_widths_by_gdef (c->buffer, adjust_offsets_when_zeroing);
 1070|   547k|	break;
 1071|       |
 1072|      0|      default:
  ------------------
  |  Branch (1072:7): [True: 0, False: 549k]
  ------------------
 1073|    128|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE:
  ------------------
  |  Branch (1073:7): [True: 128, False: 549k]
  ------------------
 1074|  2.32k|      case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
  ------------------
  |  Branch (1074:7): [True: 2.19k, False: 547k]
  ------------------
 1075|  2.32k|	break;
 1076|   549k|    }
 1077|       |
 1078|       |  /* Finish off.  Has to follow a certain order. */
 1079|   565k|  hb_ot_layout_position_finish_advances (c->font, c->buffer);
 1080|   565k|  hb_ot_zero_width_default_ignorables (c->buffer);
 1081|   565k|#ifndef HB_NO_AAT_SHAPE
 1082|   565k|  if (c->plan->apply_morx)
  ------------------
  |  Branch (1082:7): [True: 11.1k, False: 553k]
  ------------------
 1083|  11.1k|    hb_aat_layout_zero_width_deleted_glyphs (c->buffer);
 1084|   565k|#endif
 1085|   565k|  hb_ot_layout_position_finish_offsets (c->font, c->buffer);
 1086|       |
 1087|       |  /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
 1088|   565k|  if (c->font->has_glyph_h_origin_func ())
  ------------------
  |  Branch (1088:7): [True: 0, False: 565k]
  ------------------
 1089|      0|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (1089:30): [True: 0, False: 0]
  ------------------
 1090|      0|      c->font->subtract_glyph_h_origin (info[i].codepoint,
 1091|      0|					&pos[i].x_offset,
 1092|      0|					&pos[i].y_offset);
 1093|       |
 1094|   565k|  if (c->plan->fallback_mark_positioning)
  ------------------
  |  Branch (1094:7): [True: 459k, False: 105k]
  ------------------
 1095|   459k|    _hb_ot_shape_fallback_mark_position (c->plan, c->font, c->buffer,
 1096|   459k|					 adjust_offsets_when_zeroing);
 1097|   565k|}
hb-ot-shape.cc:_ZL24zero_mark_widths_by_gdefP11hb_buffer_tb:
  974|   549k|{
  975|   549k|  unsigned int count = buffer->len;
  976|   549k|  hb_glyph_info_t *info = buffer->info;
  977|  24.3M|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (977:28): [True: 23.7M, False: 549k]
  ------------------
  978|  23.7M|    if (_hb_glyph_info_is_mark (&info[i]))
  ------------------
  |  Branch (978:9): [True: 1.28M, False: 22.4M]
  ------------------
  979|  1.28M|    {
  980|  1.28M|      if (adjust_offsets)
  ------------------
  |  Branch (980:11): [True: 883k, False: 402k]
  ------------------
  981|   883k|	adjust_mark_offsets (&buffer->pos[i]);
  982|  1.28M|      zero_mark_width (&buffer->pos[i]);
  983|  1.28M|    }
  984|   549k|}
hb-ot-shape.cc:_ZL19adjust_mark_offsetsP19hb_glyph_position_t:
  960|   883k|{
  961|   883k|  pos->x_offset -= pos->x_advance;
  962|   883k|  pos->y_offset -= pos->y_advance;
  963|   883k|}
hb-ot-shape.cc:_ZL15zero_mark_widthP19hb_glyph_position_t:
  967|  1.28M|{
  968|  1.28M|  pos->x_advance = 0;
  969|  1.28M|  pos->y_advance = 0;
  970|  1.28M|}
hb-ot-shape.cc:_ZL35hb_ot_zero_width_default_ignorablesPK11hb_buffer_t:
  800|   565k|{
  801|   565k|  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES) ||
  ------------------
  |  Branch (801:7): [True: 561k, False: 3.38k]
  ------------------
  802|   565k|      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES) ||
  ------------------
  |  Branch (802:7): [True: 0, False: 3.38k]
  ------------------
  803|   565k|      (buffer->flags & HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES))
  ------------------
  |  Branch (803:7): [True: 0, False: 3.38k]
  ------------------
  804|   561k|    return;
  805|       |
  806|  3.38k|  unsigned int count = buffer->len;
  807|  3.38k|  hb_glyph_info_t *info = buffer->info;
  808|  3.38k|  hb_glyph_position_t *pos = buffer->pos;
  809|  3.38k|  unsigned int i = 0;
  810|  1.88M|  for (i = 0; i < count; i++)
  ------------------
  |  Branch (810:15): [True: 1.88M, False: 3.38k]
  ------------------
  811|  1.88M|    if (unlikely (_hb_glyph_info_is_default_ignorable (&info[i])))
  ------------------
  |  |  259|  1.88M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 87.5k, False: 1.79M]
  |  |  ------------------
  ------------------
  812|  87.5k|      pos[i].x_advance = pos[i].y_advance = pos[i].x_offset = pos[i].y_offset = 0;
  813|  3.38k|}
hb-ot-shape.cc:_ZL21hb_ot_substitute_postPK21hb_ot_shape_context_t:
  938|   565k|{
  939|   565k|#ifndef HB_NO_AAT_SHAPE
  940|   565k|  if (c->plan->apply_morx && !c->plan->apply_gpos)
  ------------------
  |  Branch (940:7): [True: 11.1k, False: 553k]
  |  Branch (940:30): [True: 10.9k, False: 188]
  ------------------
  941|  10.9k|    hb_aat_layout_remove_deleted_glyphs (c->buffer);
  942|   565k|#endif
  943|       |
  944|   565k|  hb_ot_hide_default_ignorables (c->buffer, c->font);
  945|       |
  946|   565k|  if (c->plan->shaper->postprocess_glyphs &&
  ------------------
  |  Branch (946:7): [True: 1.38k, False: 563k]
  ------------------
  947|   565k|    c->buffer->message(c->font, "start postprocess-glyphs")) {
  ------------------
  |  Branch (947:5): [True: 1.38k, False: 0]
  ------------------
  948|  1.38k|    c->plan->shaper->postprocess_glyphs (c->plan, c->buffer, c->font);
  949|  1.38k|    (void) c->buffer->message(c->font, "end postprocess-glyphs");
  950|  1.38k|  }
  951|   565k|}
hb-ot-shape.cc:_ZL29hb_ot_hide_default_ignorablesP11hb_buffer_tP9hb_font_t:
  818|   565k|{
  819|   565k|  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES) ||
  ------------------
  |  Branch (819:7): [True: 561k, False: 3.38k]
  ------------------
  820|   565k|      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES))
  ------------------
  |  Branch (820:7): [True: 0, False: 3.38k]
  ------------------
  821|   561k|    return;
  822|       |
  823|  3.38k|  unsigned int count = buffer->len;
  824|  3.38k|  hb_glyph_info_t *info = buffer->info;
  825|       |
  826|  3.38k|  hb_codepoint_t invisible = buffer->invisible;
  827|  3.38k|  if (!(buffer->flags & HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES) &&
  ------------------
  |  Branch (827:7): [True: 3.38k, False: 0]
  ------------------
  828|  3.38k|      (invisible || font->get_nominal_glyph (' ', &invisible)))
  ------------------
  |  Branch (828:8): [True: 0, False: 3.38k]
  |  Branch (828:21): [True: 96, False: 3.28k]
  ------------------
  829|     96|  {
  830|       |    /* Replace default-ignorables with a zero-advance invisible glyph. */
  831|  35.3k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (831:30): [True: 35.2k, False: 96]
  ------------------
  832|  35.2k|    {
  833|  35.2k|      if (_hb_glyph_info_is_default_ignorable (&info[i]))
  ------------------
  |  Branch (833:11): [True: 4.22k, False: 31.0k]
  ------------------
  834|  4.22k|	info[i].codepoint = invisible;
  835|  35.2k|    }
  836|     96|  }
  837|  3.28k|  else
  838|  3.28k|    buffer->delete_glyphs_inplace (_hb_glyph_info_is_default_ignorable);
  839|  3.38k|}
hb-ot-shape.cc:_ZL18hb_propagate_flagsP11hb_buffer_t:
 1116|   565k|{
 1117|       |  /* Propagate cluster-level glyph flags to be the same on all cluster glyphs.
 1118|       |   * Simplifies using them. */
 1119|       |
 1120|   565k|  if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS))
  ------------------
  |  Branch (1120:7): [True: 541k, False: 23.5k]
  ------------------
 1121|   541k|    return;
 1122|       |
 1123|       |  /* If we are producing SAFE_TO_INSERT_TATWEEL, then do two things:
 1124|       |   *
 1125|       |   * - If the places that the Arabic shaper marked as SAFE_TO_INSERT_TATWEEL,
 1126|       |   *   are UNSAFE_TO_BREAK, then clear the SAFE_TO_INSERT_TATWEEL,
 1127|       |   * - Any place that is SAFE_TO_INSERT_TATWEEL, is also now UNSAFE_TO_BREAK.
 1128|       |   *
 1129|       |   * We couldn't make this interaction earlier. It has to be done here.
 1130|       |   */
 1131|  23.5k|  bool flip_tatweel = buffer->flags & HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL;
 1132|       |
 1133|  23.5k|  bool clear_concat = (buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0;
 1134|       |
 1135|  23.5k|  hb_glyph_info_t *info = buffer->info;
 1136|       |
 1137|  23.5k|  foreach_cluster (buffer, start, end)
  ------------------
  |  |  663|  23.5k|	foreach_group (buffer, start, end, hb_buffer_t::_cluster_group_func)
  |  |  ------------------
  |  |  |  |  656|  23.5k|  for (unsigned int \
  |  |  |  |  657|  23.5k|       _count = buffer->len, \
  |  |  |  |  658|  23.5k|       start = 0, end = _count ? buffer->group_end (0, group_func) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (658:25): [True: 23.4k, False: 94]
  |  |  |  |  ------------------
  |  |  |  |  659|   256k|       start < _count; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (659:8): [True: 233k, False: 23.5k]
  |  |  |  |  ------------------
  |  |  |  |  660|   233k|       start = end, end = buffer->group_end (start, group_func))
  |  |  ------------------
  ------------------
 1138|   233k|  {
 1139|   233k|    unsigned int mask = 0;
 1140|  15.8M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (1140:34): [True: 15.5M, False: 233k]
  ------------------
 1141|  15.5M|      mask |= info[i].mask & HB_GLYPH_FLAG_DEFINED;
 1142|       |
 1143|   233k|    if (flip_tatweel)
  ------------------
  |  Branch (1143:9): [True: 0, False: 233k]
  ------------------
 1144|      0|    {
 1145|      0|      if (mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK)
  ------------------
  |  Branch (1145:11): [True: 0, False: 0]
  ------------------
 1146|      0|	mask &= ~HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL;
 1147|      0|      if (mask & HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL)
  ------------------
  |  Branch (1147:11): [True: 0, False: 0]
  ------------------
 1148|      0|	mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT;
 1149|      0|    }
 1150|       |
 1151|   233k|    if (clear_concat)
  ------------------
  |  Branch (1151:9): [True: 233k, False: 0]
  ------------------
 1152|   233k|	mask &= ~HB_GLYPH_FLAG_UNSAFE_TO_CONCAT;
 1153|       |
 1154|  15.8M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (1154:34): [True: 15.5M, False: 233k]
  ------------------
 1155|  15.5M|      info[i].mask = mask;
 1156|   233k|  }
 1157|  23.5k|}

_ZN22hb_ot_shape_plan_key_t4initEP9hb_face_tPKij:
   43|   615k|  {
   44|  1.84M|    for (unsigned int table_index = 0; table_index < 2; table_index++)
  ------------------
  |  Branch (44:40): [True: 1.23M, False: 615k]
  ------------------
   45|  1.23M|      hb_ot_layout_table_find_feature_variations (face,
   46|  1.23M|						  table_tags[table_index],
   47|  1.23M|						  coords,
   48|  1.23M|						  num_coords,
   49|  1.23M|						  &variations_index[table_index]);
   50|   615k|  }
_ZN22hb_ot_shape_plan_key_t5equalEPKS_:
   53|   515k|  {
   54|   515k|    return 0 == hb_memcmp (this, other, sizeof (*this));
   55|   515k|  }
_ZN18hb_ot_shape_plan_tD2Ev:
   63|  49.2k|  ~hb_ot_shape_plan_t () { fini (); }

hb-ot-shaper-arabic.cc:_ZL28arabic_fallback_plan_destroyP22arabic_fallback_plan_t:
  351|  1.73k|{
  352|  1.73k|  if (!fallback_plan || fallback_plan->num_lookups == 0)
  ------------------
  |  Branch (352:7): [True: 681, False: 1.05k]
  |  Branch (352:25): [True: 693, False: 365]
  ------------------
  353|  1.37k|    return;
  354|       |
  355|  1.78k|  for (unsigned int i = 0; i < fallback_plan->num_lookups; i++)
  ------------------
  |  Branch (355:28): [True: 1.41k, False: 365]
  ------------------
  356|  1.41k|    if (fallback_plan->lookup_array[i])
  ------------------
  |  Branch (356:9): [True: 1.41k, False: 0]
  ------------------
  357|  1.41k|    {
  358|  1.41k|      hb_free (fallback_plan->accel_array[i]);
  ------------------
  |  |  236|  1.41k|#define hb_free hb_free_impl
  ------------------
  359|  1.41k|      if (fallback_plan->free_lookups)
  ------------------
  |  Branch (359:11): [True: 1.41k, False: 0]
  ------------------
  360|  1.41k|	hb_free (fallback_plan->lookup_array[i]);
  ------------------
  |  |  236|  1.41k|#define hb_free hb_free_impl
  ------------------
  361|  1.41k|    }
  362|       |
  363|    365|  hb_free (fallback_plan);
  ------------------
  |  |  236|    365|#define hb_free hb_free_impl
  ------------------
  364|    365|}
hb-ot-shaper-arabic.cc:_ZL27arabic_fallback_plan_createPK18hb_ot_shape_plan_tP9hb_font_t:
  326|  1.05k|{
  327|  1.05k|  arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) hb_calloc (1, sizeof (arabic_fallback_plan_t));
  ------------------
  |  |  234|  1.05k|#define hb_calloc hb_calloc_impl
  ------------------
  328|  1.05k|  if (unlikely (!fallback_plan))
  ------------------
  |  |  259|  1.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 1.04k]
  |  |  ------------------
  ------------------
  329|     10|    return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t));
  ------------------
  |  |  124|     10|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  330|       |
  331|  1.04k|  fallback_plan->num_lookups = 0;
  332|  1.04k|  fallback_plan->free_lookups = false;
  333|       |
  334|       |  /* Try synthesizing GSUB table using Unicode Arabic Presentation Forms,
  335|       |   * in case the font has cmap entries for the presentation-forms characters. */
  336|  1.04k|  if (arabic_fallback_plan_init_unicode (fallback_plan, plan, font))
  ------------------
  |  Branch (336:7): [True: 365, False: 683]
  ------------------
  337|    365|    return fallback_plan;
  338|       |
  339|       |  /* See if this looks like a Windows-1256-encoded font.  If it does, use a
  340|       |   * hand-coded GSUB table. */
  341|    683|  if (arabic_fallback_plan_init_win1256 (fallback_plan, plan, font))
  ------------------
  |  Branch (341:7): [True: 0, False: 683]
  ------------------
  342|      0|    return fallback_plan;
  343|       |
  344|    683|  assert (fallback_plan->num_lookups == 0);
  345|    683|  hb_free (fallback_plan);
  ------------------
  |  |  236|    683|#define hb_free hb_free_impl
  ------------------
  346|    683|  return const_cast<arabic_fallback_plan_t *> (&Null (arabic_fallback_plan_t));
  ------------------
  |  |  124|    683|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  347|    683|}
hb-ot-shaper-arabic.cc:_ZL33arabic_fallback_plan_init_unicodeP22arabic_fallback_plan_tPK18hb_ot_shape_plan_tP9hb_font_t:
  300|  1.04k|{
  301|  1.04k|  static_assert ((ARRAY_LENGTH_CONST (arabic_fallback_features) <= ARABIC_FALLBACK_MAX_LOOKUPS), "");
  302|  1.04k|  unsigned int j = 0;
  303|  8.38k|  for (unsigned int i = 0; i < ARRAY_LENGTH(arabic_fallback_features) ; i++)
  ------------------
  |  Branch (303:28): [True: 7.33k, False: 1.04k]
  ------------------
  304|  7.33k|  {
  305|  7.33k|    fallback_plan->mask_array[j] = plan->map.get_1_mask (arabic_fallback_features[i]);
  306|  7.33k|    if (fallback_plan->mask_array[j])
  ------------------
  |  Branch (306:9): [True: 7.29k, False: 42]
  ------------------
  307|  7.29k|    {
  308|  7.29k|      fallback_plan->lookup_array[j] = arabic_fallback_synthesize_lookup (plan, font, i);
  309|  7.29k|      if (fallback_plan->lookup_array[j])
  ------------------
  |  Branch (309:11): [True: 1.41k, False: 5.87k]
  ------------------
  310|  1.41k|      {
  311|  1.41k|	fallback_plan->accel_array[j] = OT::hb_ot_layout_lookup_accelerator_t::create (*fallback_plan->lookup_array[j]);
  312|  1.41k|	j++;
  313|  1.41k|      }
  314|  7.29k|    }
  315|  7.33k|  }
  316|       |
  317|  1.04k|  fallback_plan->num_lookups = j;
  318|  1.04k|  fallback_plan->free_lookups = true;
  319|       |
  320|  1.04k|  return j > 0;
  321|  1.04k|}
hb-ot-shaper-arabic.cc:_ZL33arabic_fallback_synthesize_lookupPK18hb_ot_shape_plan_tP9hb_font_tj:
  207|  7.29k|{
  208|  7.29k|  if (feature_index < 4)
  ------------------
  |  Branch (208:7): [True: 4.19k, False: 3.10k]
  ------------------
  209|  4.19k|    return arabic_fallback_synthesize_lookup_single (plan, font, feature_index);
  210|  3.10k|  else
  211|  3.10k|  {
  212|  3.10k|    switch (feature_index) {
  ------------------
  |  Branch (212:13): [True: 0, False: 3.10k]
  ------------------
  213|  1.03k|      case 4: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_3_table, OT::LookupFlag::IgnoreMarks);
  ------------------
  |  Branch (213:7): [True: 1.03k, False: 2.06k]
  ------------------
  214|  1.03k|      case 5: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_table, OT::LookupFlag::IgnoreMarks);
  ------------------
  |  Branch (214:7): [True: 1.03k, False: 2.06k]
  ------------------
  215|  1.03k|      case 6: return arabic_fallback_synthesize_lookup_ligature (plan, font, ligature_mark_table, 0);
  ------------------
  |  Branch (215:7): [True: 1.03k, False: 2.06k]
  ------------------
  216|  3.10k|    }
  217|  3.10k|  }
  218|      0|  assert (false);
  219|      0|  return nullptr;
  220|  7.29k|}
hb-ot-shaper-arabic.cc:_ZL40arabic_fallback_synthesize_lookup_singlePK18hb_ot_shape_plan_tP9hb_font_tj:
   57|  4.19k|{
   58|  4.19k|  OT::HBGlyphID16 glyphs[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
   59|  4.19k|  OT::HBGlyphID16 substitutes[SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1];
   60|  4.19k|  unsigned int num_glyphs = 0;
   61|       |
   62|       |  /* Populate arrays */
   63|   754k|  for (hb_codepoint_t u = SHAPING_TABLE_FIRST; u < SHAPING_TABLE_LAST + 1; u++)
  ------------------
  |  |  412|  4.19k|#define SHAPING_TABLE_FIRST	0x0621u
  ------------------
                for (hb_codepoint_t u = SHAPING_TABLE_FIRST; u < SHAPING_TABLE_LAST + 1; u++)
  ------------------
  |  |  413|   754k|#define SHAPING_TABLE_LAST	0x06D3u
  ------------------
  |  Branch (63:48): [True: 750k, False: 4.19k]
  ------------------
   64|   750k|  {
   65|   750k|    hb_codepoint_t s = shaping_table[u - SHAPING_TABLE_FIRST][feature_index];
  ------------------
  |  |  412|   750k|#define SHAPING_TABLE_FIRST	0x0621u
  ------------------
   66|   750k|    hb_codepoint_t u_glyph, s_glyph;
   67|       |
   68|   750k|    if (!s ||
  ------------------
  |  Branch (68:9): [True: 496k, False: 253k]
  ------------------
   69|   750k|	!hb_font_get_glyph (font, u, 0, &u_glyph) ||
  ------------------
  |  Branch (69:2): [True: 175k, False: 78.1k]
  ------------------
   70|   750k|	!hb_font_get_glyph (font, s, 0, &s_glyph) ||
  ------------------
  |  Branch (70:2): [True: 13.8k, False: 64.3k]
  ------------------
   71|   750k|	u_glyph == s_glyph ||
  ------------------
  |  Branch (71:2): [True: 20.1k, False: 44.2k]
  ------------------
   72|   750k|	u_glyph > 0xFFFFu || s_glyph > 0xFFFFu)
  ------------------
  |  Branch (72:2): [True: 12.7k, False: 31.4k]
  |  Branch (72:23): [True: 3.27k, False: 28.1k]
  ------------------
   73|   722k|      continue;
   74|       |
   75|  28.1k|    glyphs[num_glyphs] = u_glyph;
   76|  28.1k|    substitutes[num_glyphs] = s_glyph;
   77|       |
   78|  28.1k|    num_glyphs++;
   79|  28.1k|  }
   80|       |
   81|  4.19k|  if (!num_glyphs)
  ------------------
  |  Branch (81:7): [True: 3.37k, False: 818]
  ------------------
   82|  3.37k|    return nullptr;
   83|       |
   84|       |  /* Bubble-sort or something equally good!
   85|       |   * May not be good-enough for presidential candidate interviews, but good-enough for us... */
   86|    818|  hb_stable_sort (&glyphs[0], num_glyphs,
   87|    818|		  (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
   88|    818|		  &substitutes[0]);
   89|       |
   90|       |
   91|       |  /* Each glyph takes four bytes max, and there's some overhead. */
   92|    818|  char buf[(SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1) * 4 + 128];
   93|    818|  hb_serialize_context_t c (buf, sizeof (buf));
   94|    818|  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
   95|    818|  bool ret = lookup->serialize_single (&c,
   96|    818|				       OT::LookupFlag::IgnoreMarks,
   97|    818|				       hb_sorted_array (glyphs, num_glyphs),
   98|    818|				       hb_array (substitutes, num_glyphs));
   99|    818|  c.end_serialize ();
  100|       |
  101|    818|  return ret && !c.in_error () ? c.copy<OT::SubstLookup> () : nullptr;
  ------------------
  |  Branch (101:10): [True: 787, False: 31]
  |  Branch (101:17): [True: 702, False: 85]
  ------------------
  102|  4.19k|}
hb-ot-shaper-arabic.cc:_ZL42arabic_fallback_synthesize_lookup_ligatureIA1_16ligature_3_set_tEPN2OT6Layout9GSUB_impl11SubstLookupEPK18hb_ot_shape_plan_tP9hb_font_tRKT_j:
  110|  1.03k|{
  111|  1.03k|  OT::HBGlyphID16 first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
  112|  1.03k|  unsigned int first_glyphs_indirection[ARRAY_LENGTH_CONST (ligature_table)];
  113|  1.03k|  unsigned int ligature_per_first_glyph_count_list[ARRAY_LENGTH_CONST (first_glyphs)];
  114|  1.03k|  unsigned int num_first_glyphs = 0;
  115|       |
  116|       |  /* We know that all our ligatures have the same number of components. */
  117|  1.03k|  OT::HBGlyphID16 ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
  118|  1.03k|  unsigned int component_count_list[ARRAY_LENGTH_CONST (ligature_list)];
  119|  1.03k|  OT::HBGlyphID16 component_list[ARRAY_LENGTH_CONST (ligature_list) *
  120|  1.03k|				 ARRAY_LENGTH_CONST (ligature_table[0].ligatures[0].components)];
  121|  1.03k|  unsigned int num_ligatures = 0;
  122|  1.03k|  unsigned int num_components = 0;
  123|       |
  124|       |  /* Populate arrays */
  125|       |
  126|       |  /* Sort out the first-glyphs */
  127|  2.06k|  for (unsigned int first_glyph_idx = 0; first_glyph_idx < ARRAY_LENGTH (first_glyphs); first_glyph_idx++)
  ------------------
  |  Branch (127:42): [True: 1.03k, False: 1.03k]
  ------------------
  128|  1.03k|  {
  129|  1.03k|    hb_codepoint_t first_u = ligature_table[first_glyph_idx].first;
  130|  1.03k|    hb_codepoint_t first_glyph;
  131|  1.03k|    if (!hb_font_get_glyph (font, first_u, 0, &first_glyph))
  ------------------
  |  Branch (131:9): [True: 717, False: 317]
  ------------------
  132|    717|      continue;
  133|    317|    first_glyphs[num_first_glyphs] = first_glyph;
  134|    317|    ligature_per_first_glyph_count_list[num_first_glyphs] = 0;
  135|    317|    first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
  136|    317|    num_first_glyphs++;
  137|    317|  }
  138|  1.03k|  hb_stable_sort (&first_glyphs[0], num_first_glyphs,
  139|  1.03k|		  (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
  140|  1.03k|		  &first_glyphs_indirection[0]);
  141|       |
  142|       |  /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
  143|  1.35k|  for (unsigned int i = 0; i < num_first_glyphs; i++)
  ------------------
  |  Branch (143:28): [True: 317, False: 1.03k]
  ------------------
  144|    317|  {
  145|    317|    unsigned int first_glyph_idx = first_glyphs_indirection[i];
  146|       |
  147|  1.26k|    for (unsigned int ligature_idx = 0; ligature_idx < ARRAY_LENGTH (ligature_table[0].ligatures); ligature_idx++)
  ------------------
  |  Branch (147:41): [True: 951, False: 317]
  ------------------
  148|    951|    {
  149|    951|      hb_codepoint_t ligature_u = ligature_table[first_glyph_idx].ligatures[ligature_idx].ligature;
  150|    951|      hb_codepoint_t ligature_glyph;
  151|    951|      if (!hb_font_get_glyph (font, ligature_u, 0, &ligature_glyph))
  ------------------
  |  Branch (151:11): [True: 99, False: 852]
  ------------------
  152|     99|	continue;
  153|       |
  154|    852|      const auto &components = ligature_table[first_glyph_idx].ligatures[ligature_idx].components;
  155|    852|      unsigned component_count = ARRAY_LENGTH_CONST (components);
  ------------------
  |  |  944|    852|#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
  ------------------
  156|       |
  157|    852|      bool matched = true;
  158|  2.47k|      for (unsigned j = 0; j < component_count; j++)
  ------------------
  |  Branch (158:28): [True: 1.67k, False: 806]
  ------------------
  159|  1.67k|      {
  160|  1.67k|	hb_codepoint_t component_u   = ligature_table[first_glyph_idx].ligatures[ligature_idx].components[j];
  161|  1.67k|	hb_codepoint_t component_glyph;
  162|  1.67k|	if (!component_u ||
  ------------------
  |  Branch (162:6): [True: 0, False: 1.67k]
  ------------------
  163|  1.67k|	    !hb_font_get_nominal_glyph (font, component_u, &component_glyph))
  ------------------
  |  Branch (163:6): [True: 46, False: 1.62k]
  ------------------
  164|     46|	{
  165|     46|	  matched = false;
  166|     46|	  break;
  167|     46|	}
  168|       |
  169|  1.62k|	component_list[num_components++] = component_glyph;
  170|  1.62k|      }
  171|    852|      if (!matched)
  ------------------
  |  Branch (171:11): [True: 46, False: 806]
  ------------------
  172|     46|        continue;
  173|       |
  174|    806|      component_count_list[num_ligatures] = 1 + component_count;
  175|    806|      ligature_list[num_ligatures] = ligature_glyph;
  176|       |
  177|    806|      ligature_per_first_glyph_count_list[i]++;
  178|       |
  179|    806|      num_ligatures++;
  180|    806|    }
  181|    317|  }
  182|       |
  183|  1.03k|  if (!num_ligatures)
  ------------------
  |  Branch (183:7): [True: 749, False: 285]
  ------------------
  184|    749|    return nullptr;
  185|       |
  186|       |
  187|       |  /* 16 bytes per ligature ought to be enough... */
  188|    285|  char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128];
  189|    285|  hb_serialize_context_t c (buf, sizeof (buf));
  190|    285|  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
  191|    285|  bool ret = lookup->serialize_ligature (&c,
  192|    285|					 lookup_flags,
  193|    285|					 hb_sorted_array (first_glyphs, num_first_glyphs),
  194|    285|					 hb_array (ligature_per_first_glyph_count_list, num_first_glyphs),
  195|    285|					 hb_array (ligature_list, num_ligatures),
  196|    285|					 hb_array (component_count_list, num_ligatures),
  197|    285|					 hb_array (component_list, num_components));
  198|    285|  c.end_serialize ();
  199|       |
  200|    285|  return ret && !c.in_error () ? c.copy<OT::SubstLookup> () : nullptr;
  ------------------
  |  Branch (200:10): [True: 245, False: 40]
  |  Branch (200:17): [True: 238, False: 7]
  ------------------
  201|  1.03k|}
hb-ot-shaper-arabic.cc:_ZL42arabic_fallback_synthesize_lookup_ligatureIA18_14ligature_set_tEPN2OT6Layout9GSUB_impl11SubstLookupEPK18hb_ot_shape_plan_tP9hb_font_tRKT_j:
  110|  1.03k|{
  111|  1.03k|  OT::HBGlyphID16 first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
  112|  1.03k|  unsigned int first_glyphs_indirection[ARRAY_LENGTH_CONST (ligature_table)];
  113|  1.03k|  unsigned int ligature_per_first_glyph_count_list[ARRAY_LENGTH_CONST (first_glyphs)];
  114|  1.03k|  unsigned int num_first_glyphs = 0;
  115|       |
  116|       |  /* We know that all our ligatures have the same number of components. */
  117|  1.03k|  OT::HBGlyphID16 ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
  118|  1.03k|  unsigned int component_count_list[ARRAY_LENGTH_CONST (ligature_list)];
  119|  1.03k|  OT::HBGlyphID16 component_list[ARRAY_LENGTH_CONST (ligature_list) *
  120|  1.03k|				 ARRAY_LENGTH_CONST (ligature_table[0].ligatures[0].components)];
  121|  1.03k|  unsigned int num_ligatures = 0;
  122|  1.03k|  unsigned int num_components = 0;
  123|       |
  124|       |  /* Populate arrays */
  125|       |
  126|       |  /* Sort out the first-glyphs */
  127|  19.6k|  for (unsigned int first_glyph_idx = 0; first_glyph_idx < ARRAY_LENGTH (first_glyphs); first_glyph_idx++)
  ------------------
  |  Branch (127:42): [True: 18.6k, False: 1.03k]
  ------------------
  128|  18.6k|  {
  129|  18.6k|    hb_codepoint_t first_u = ligature_table[first_glyph_idx].first;
  130|  18.6k|    hb_codepoint_t first_glyph;
  131|  18.6k|    if (!hb_font_get_glyph (font, first_u, 0, &first_glyph))
  ------------------
  |  Branch (131:9): [True: 12.7k, False: 5.81k]
  ------------------
  132|  12.7k|      continue;
  133|  5.81k|    first_glyphs[num_first_glyphs] = first_glyph;
  134|  5.81k|    ligature_per_first_glyph_count_list[num_first_glyphs] = 0;
  135|  5.81k|    first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
  136|  5.81k|    num_first_glyphs++;
  137|  5.81k|  }
  138|  1.03k|  hb_stable_sort (&first_glyphs[0], num_first_glyphs,
  139|  1.03k|		  (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
  140|  1.03k|		  &first_glyphs_indirection[0]);
  141|       |
  142|       |  /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
  143|  6.85k|  for (unsigned int i = 0; i < num_first_glyphs; i++)
  ------------------
  |  Branch (143:28): [True: 5.81k, False: 1.03k]
  ------------------
  144|  5.81k|  {
  145|  5.81k|    unsigned int first_glyph_idx = first_glyphs_indirection[i];
  146|       |
  147|  87.2k|    for (unsigned int ligature_idx = 0; ligature_idx < ARRAY_LENGTH (ligature_table[0].ligatures); ligature_idx++)
  ------------------
  |  Branch (147:41): [True: 81.4k, False: 5.81k]
  ------------------
  148|  81.4k|    {
  149|  81.4k|      hb_codepoint_t ligature_u = ligature_table[first_glyph_idx].ligatures[ligature_idx].ligature;
  150|  81.4k|      hb_codepoint_t ligature_glyph;
  151|  81.4k|      if (!hb_font_get_glyph (font, ligature_u, 0, &ligature_glyph))
  ------------------
  |  Branch (151:11): [True: 35.4k, False: 46.0k]
  ------------------
  152|  35.4k|	continue;
  153|       |
  154|  46.0k|      const auto &components = ligature_table[first_glyph_idx].ligatures[ligature_idx].components;
  155|  46.0k|      unsigned component_count = ARRAY_LENGTH_CONST (components);
  ------------------
  |  |  944|  46.0k|#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
  ------------------
  156|       |
  157|  46.0k|      bool matched = true;
  158|  61.7k|      for (unsigned j = 0; j < component_count; j++)
  ------------------
  |  Branch (158:28): [True: 46.0k, False: 15.6k]
  ------------------
  159|  46.0k|      {
  160|  46.0k|	hb_codepoint_t component_u   = ligature_table[first_glyph_idx].ligatures[ligature_idx].components[j];
  161|  46.0k|	hb_codepoint_t component_glyph;
  162|  46.0k|	if (!component_u ||
  ------------------
  |  Branch (162:6): [True: 29.7k, False: 16.2k]
  ------------------
  163|  46.0k|	    !hb_font_get_nominal_glyph (font, component_u, &component_glyph))
  ------------------
  |  Branch (163:6): [True: 599, False: 15.6k]
  ------------------
  164|  30.3k|	{
  165|  30.3k|	  matched = false;
  166|  30.3k|	  break;
  167|  30.3k|	}
  168|       |
  169|  15.6k|	component_list[num_components++] = component_glyph;
  170|  15.6k|      }
  171|  46.0k|      if (!matched)
  ------------------
  |  Branch (171:11): [True: 30.3k, False: 15.6k]
  ------------------
  172|  30.3k|        continue;
  173|       |
  174|  15.6k|      component_count_list[num_ligatures] = 1 + component_count;
  175|  15.6k|      ligature_list[num_ligatures] = ligature_glyph;
  176|       |
  177|  15.6k|      ligature_per_first_glyph_count_list[i]++;
  178|       |
  179|  15.6k|      num_ligatures++;
  180|  15.6k|    }
  181|  5.81k|  }
  182|       |
  183|  1.03k|  if (!num_ligatures)
  ------------------
  |  Branch (183:7): [True: 708, False: 326]
  ------------------
  184|    708|    return nullptr;
  185|       |
  186|       |
  187|       |  /* 16 bytes per ligature ought to be enough... */
  188|    326|  char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128];
  189|    326|  hb_serialize_context_t c (buf, sizeof (buf));
  190|    326|  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
  191|    326|  bool ret = lookup->serialize_ligature (&c,
  192|    326|					 lookup_flags,
  193|    326|					 hb_sorted_array (first_glyphs, num_first_glyphs),
  194|    326|					 hb_array (ligature_per_first_glyph_count_list, num_first_glyphs),
  195|    326|					 hb_array (ligature_list, num_ligatures),
  196|    326|					 hb_array (component_count_list, num_ligatures),
  197|    326|					 hb_array (component_list, num_components));
  198|    326|  c.end_serialize ();
  199|       |
  200|    326|  return ret && !c.in_error () ? c.copy<OT::SubstLookup> () : nullptr;
  ------------------
  |  Branch (200:10): [True: 254, False: 72]
  |  Branch (200:17): [True: 248, False: 6]
  ------------------
  201|  1.03k|}
hb-ot-shaper-arabic.cc:_ZL42arabic_fallback_synthesize_lookup_ligatureIA1_19ligature_mark_set_tEPN2OT6Layout9GSUB_impl11SubstLookupEPK18hb_ot_shape_plan_tP9hb_font_tRKT_j:
  110|  1.03k|{
  111|  1.03k|  OT::HBGlyphID16 first_glyphs[ARRAY_LENGTH_CONST (ligature_table)];
  112|  1.03k|  unsigned int first_glyphs_indirection[ARRAY_LENGTH_CONST (ligature_table)];
  113|  1.03k|  unsigned int ligature_per_first_glyph_count_list[ARRAY_LENGTH_CONST (first_glyphs)];
  114|  1.03k|  unsigned int num_first_glyphs = 0;
  115|       |
  116|       |  /* We know that all our ligatures have the same number of components. */
  117|  1.03k|  OT::HBGlyphID16 ligature_list[ARRAY_LENGTH_CONST (first_glyphs) * ARRAY_LENGTH_CONST(ligature_table[0].ligatures)];
  118|  1.03k|  unsigned int component_count_list[ARRAY_LENGTH_CONST (ligature_list)];
  119|  1.03k|  OT::HBGlyphID16 component_list[ARRAY_LENGTH_CONST (ligature_list) *
  120|  1.03k|				 ARRAY_LENGTH_CONST (ligature_table[0].ligatures[0].components)];
  121|  1.03k|  unsigned int num_ligatures = 0;
  122|  1.03k|  unsigned int num_components = 0;
  123|       |
  124|       |  /* Populate arrays */
  125|       |
  126|       |  /* Sort out the first-glyphs */
  127|  2.06k|  for (unsigned int first_glyph_idx = 0; first_glyph_idx < ARRAY_LENGTH (first_glyphs); first_glyph_idx++)
  ------------------
  |  Branch (127:42): [True: 1.03k, False: 1.03k]
  ------------------
  128|  1.03k|  {
  129|  1.03k|    hb_codepoint_t first_u = ligature_table[first_glyph_idx].first;
  130|  1.03k|    hb_codepoint_t first_glyph;
  131|  1.03k|    if (!hb_font_get_glyph (font, first_u, 0, &first_glyph))
  ------------------
  |  Branch (131:9): [True: 695, False: 339]
  ------------------
  132|    695|      continue;
  133|    339|    first_glyphs[num_first_glyphs] = first_glyph;
  134|    339|    ligature_per_first_glyph_count_list[num_first_glyphs] = 0;
  135|    339|    first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
  136|    339|    num_first_glyphs++;
  137|    339|  }
  138|  1.03k|  hb_stable_sort (&first_glyphs[0], num_first_glyphs,
  139|  1.03k|		  (int(*)(const OT::HBUINT16*, const OT::HBUINT16 *)) OT::HBGlyphID16::cmp,
  140|  1.03k|		  &first_glyphs_indirection[0]);
  141|       |
  142|       |  /* Now that the first-glyphs are sorted, walk again, populate ligatures. */
  143|  1.37k|  for (unsigned int i = 0; i < num_first_glyphs; i++)
  ------------------
  |  Branch (143:28): [True: 339, False: 1.03k]
  ------------------
  144|    339|  {
  145|    339|    unsigned int first_glyph_idx = first_glyphs_indirection[i];
  146|       |
  147|  2.03k|    for (unsigned int ligature_idx = 0; ligature_idx < ARRAY_LENGTH (ligature_table[0].ligatures); ligature_idx++)
  ------------------
  |  Branch (147:41): [True: 1.69k, False: 339]
  ------------------
  148|  1.69k|    {
  149|  1.69k|      hb_codepoint_t ligature_u = ligature_table[first_glyph_idx].ligatures[ligature_idx].ligature;
  150|  1.69k|      hb_codepoint_t ligature_glyph;
  151|  1.69k|      if (!hb_font_get_glyph (font, ligature_u, 0, &ligature_glyph))
  ------------------
  |  Branch (151:11): [True: 280, False: 1.41k]
  ------------------
  152|    280|	continue;
  153|       |
  154|  1.41k|      const auto &components = ligature_table[first_glyph_idx].ligatures[ligature_idx].components;
  155|  1.41k|      unsigned component_count = ARRAY_LENGTH_CONST (components);
  ------------------
  |  |  944|  1.41k|#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
  ------------------
  156|       |
  157|  1.41k|      bool matched = true;
  158|  2.81k|      for (unsigned j = 0; j < component_count; j++)
  ------------------
  |  Branch (158:28): [True: 1.41k, False: 1.40k]
  ------------------
  159|  1.41k|      {
  160|  1.41k|	hb_codepoint_t component_u   = ligature_table[first_glyph_idx].ligatures[ligature_idx].components[j];
  161|  1.41k|	hb_codepoint_t component_glyph;
  162|  1.41k|	if (!component_u ||
  ------------------
  |  Branch (162:6): [True: 0, False: 1.41k]
  ------------------
  163|  1.41k|	    !hb_font_get_nominal_glyph (font, component_u, &component_glyph))
  ------------------
  |  Branch (163:6): [True: 13, False: 1.40k]
  ------------------
  164|     13|	{
  165|     13|	  matched = false;
  166|     13|	  break;
  167|     13|	}
  168|       |
  169|  1.40k|	component_list[num_components++] = component_glyph;
  170|  1.40k|      }
  171|  1.41k|      if (!matched)
  ------------------
  |  Branch (171:11): [True: 13, False: 1.40k]
  ------------------
  172|     13|        continue;
  173|       |
  174|  1.40k|      component_count_list[num_ligatures] = 1 + component_count;
  175|  1.40k|      ligature_list[num_ligatures] = ligature_glyph;
  176|       |
  177|  1.40k|      ligature_per_first_glyph_count_list[i]++;
  178|       |
  179|  1.40k|      num_ligatures++;
  180|  1.40k|    }
  181|    339|  }
  182|       |
  183|  1.03k|  if (!num_ligatures)
  ------------------
  |  Branch (183:7): [True: 745, False: 289]
  ------------------
  184|    745|    return nullptr;
  185|       |
  186|       |
  187|       |  /* 16 bytes per ligature ought to be enough... */
  188|    289|  char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128];
  189|    289|  hb_serialize_context_t c (buf, sizeof (buf));
  190|    289|  OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> ();
  191|    289|  bool ret = lookup->serialize_ligature (&c,
  192|    289|					 lookup_flags,
  193|    289|					 hb_sorted_array (first_glyphs, num_first_glyphs),
  194|    289|					 hb_array (ligature_per_first_glyph_count_list, num_first_glyphs),
  195|    289|					 hb_array (ligature_list, num_ligatures),
  196|    289|					 hb_array (component_count_list, num_ligatures),
  197|    289|					 hb_array (component_list, num_components));
  198|    289|  c.end_serialize ();
  199|       |
  200|    289|  return ret && !c.in_error () ? c.copy<OT::SubstLookup> () : nullptr;
  ------------------
  |  Branch (200:10): [True: 251, False: 38]
  |  Branch (200:17): [True: 243, False: 8]
  ------------------
  201|  1.03k|}
hb-ot-shaper-arabic.cc:_ZL33arabic_fallback_plan_init_win1256P22arabic_fallback_plan_tPK18hb_ot_shape_plan_tP9hb_font_t:
  256|    683|{
  257|       |#ifdef HB_WITH_WIN1256
  258|       |  /* Does this font look like it's Windows-1256-encoded? */
  259|       |  hb_codepoint_t g;
  260|       |  if (!(hb_font_get_glyph (font, 0x0627u, 0, &g) && g == 199 /* ALEF */ &&
  261|       |	hb_font_get_glyph (font, 0x0644u, 0, &g) && g == 225 /* LAM */ &&
  262|       |	hb_font_get_glyph (font, 0x0649u, 0, &g) && g == 236 /* ALEF MAKSURA */ &&
  263|       |	hb_font_get_glyph (font, 0x064Au, 0, &g) && g == 237 /* YEH */ &&
  264|       |	hb_font_get_glyph (font, 0x0652u, 0, &g) && g == 250 /* SUKUN */))
  265|       |    return false;
  266|       |
  267|       |  const Manifest &manifest = reinterpret_cast<const Manifest&> (arabic_win1256_gsub_lookups.manifest);
  268|       |  static_assert (sizeof (arabic_win1256_gsub_lookups.manifestData) <=
  269|       |		 ARABIC_FALLBACK_MAX_LOOKUPS * sizeof (ManifestLookup), "");
  270|       |
  271|       |  unsigned j = 0;
  272|       |  unsigned int count = manifest.len;
  273|       |  for (unsigned int i = 0; i < count; i++)
  274|       |  {
  275|       |    fallback_plan->mask_array[j] = plan->map.get_1_mask (manifest[i].tag);
  276|       |    if (fallback_plan->mask_array[j])
  277|       |    {
  278|       |      fallback_plan->lookup_array[j] = const_cast<OT::SubstLookup*> (&(&manifest+manifest[i].lookupOffset));
  279|       |      if (fallback_plan->lookup_array[j])
  280|       |      {
  281|       |	fallback_plan->accel_array[j] = OT::hb_ot_layout_lookup_accelerator_t::create (*fallback_plan->lookup_array[j]);
  282|       |	j++;
  283|       |      }
  284|       |    }
  285|       |  }
  286|       |
  287|       |  fallback_plan->num_lookups = j;
  288|       |  fallback_plan->free_lookups = false;
  289|       |
  290|       |  return j > 0;
  291|       |#else
  292|    683|  return false;
  293|    683|#endif
  294|    683|}
hb-ot-shaper-arabic.cc:_ZL26arabic_fallback_plan_shapeP22arabic_fallback_plan_tP9hb_font_tP11hb_buffer_t:
  370|  1.05k|{
  371|  1.05k|  OT::hb_ot_apply_context_t c (0, font, buffer);
  372|  2.47k|  for (unsigned int i = 0; i < fallback_plan->num_lookups; i++)
  ------------------
  |  Branch (372:28): [True: 1.41k, False: 1.05k]
  ------------------
  373|  1.41k|    if (fallback_plan->lookup_array[i]) {
  ------------------
  |  Branch (373:9): [True: 1.41k, False: 0]
  ------------------
  374|  1.41k|      c.set_lookup_mask (fallback_plan->mask_array[i]);
  375|  1.41k|      if (fallback_plan->accel_array[i])
  ------------------
  |  Branch (375:11): [True: 1.39k, False: 23]
  ------------------
  376|  1.39k|	hb_ot_layout_substitute_lookup (&c,
  377|  1.39k|					*fallback_plan->lookup_array[i],
  378|  1.39k|					*fallback_plan->accel_array[i]);
  379|  1.41k|    }
  380|  1.05k|}

hb-ot-shaper-use.cc:_ZL18has_arabic_joining11hb_script_t:
   20|  1.76k|{
   21|       |  /* List of scripts that have data in arabic-table. */
   22|  1.76k|  switch ((int) script)
   23|  1.76k|  {
   24|     10|    case HB_SCRIPT_ADLAM:
  ------------------
  |  Branch (24:5): [True: 10, False: 1.75k]
  ------------------
   25|     10|    case HB_SCRIPT_ARABIC:
  ------------------
  |  Branch (25:5): [True: 0, False: 1.76k]
  ------------------
   26|     17|    case HB_SCRIPT_CHORASMIAN:
  ------------------
  |  Branch (26:5): [True: 7, False: 1.76k]
  ------------------
   27|     42|    case HB_SCRIPT_HANIFI_ROHINGYA:
  ------------------
  |  Branch (27:5): [True: 25, False: 1.74k]
  ------------------
   28|     60|    case HB_SCRIPT_MANDAIC:
  ------------------
  |  Branch (28:5): [True: 18, False: 1.75k]
  ------------------
   29|     71|    case HB_SCRIPT_MANICHAEAN:
  ------------------
  |  Branch (29:5): [True: 11, False: 1.75k]
  ------------------
   30|    285|    case HB_SCRIPT_MONGOLIAN:
  ------------------
  |  Branch (30:5): [True: 214, False: 1.55k]
  ------------------
   31|    328|    case HB_SCRIPT_NKO:
  ------------------
  |  Branch (31:5): [True: 43, False: 1.72k]
  ------------------
   32|    335|    case HB_SCRIPT_OLD_UYGHUR:
  ------------------
  |  Branch (32:5): [True: 7, False: 1.76k]
  ------------------
   33|    347|    case HB_SCRIPT_PHAGS_PA:
  ------------------
  |  Branch (33:5): [True: 12, False: 1.75k]
  ------------------
   34|    355|    case HB_SCRIPT_PSALTER_PAHLAVI:
  ------------------
  |  Branch (34:5): [True: 8, False: 1.76k]
  ------------------
   35|    358|    case HB_SCRIPT_SOGDIAN:
  ------------------
  |  Branch (35:5): [True: 3, False: 1.76k]
  ------------------
   36|    358|    case HB_SCRIPT_SYRIAC:
  ------------------
  |  Branch (36:5): [True: 0, False: 1.76k]
  ------------------
   37|    358|      return true;
   38|       |
   39|  1.41k|    default:
  ------------------
  |  Branch (39:5): [True: 1.41k, False: 358]
  ------------------
   40|  1.41k|      return false;
   41|  1.76k|  }
   42|  1.76k|}

hb-face.cc:_ZL23_hb_arabic_pua_simp_mapj:
  107|  2.06k|{
  108|  2.06k|  return u<65277u?_hb_arabic_u16[((_hb_arabic_u8[40+(((_hb_arabic_b4(8+_hb_arabic_u8,((_hb_arabic_b2(_hb_arabic_u8,u>>3>>4>>4))<<4)+((u>>3>>4)&15u)))<<4)+((u>>3)&15u))])<<3)+((u)&7u)]:0;
  ------------------
  |  Branch (108:10): [True: 1.99k, False: 69]
  ------------------
  109|  2.06k|}
hb-face.cc:_ZL13_hb_arabic_b4PKhj:
  102|  6.06k|{
  103|  6.06k|  return (a[i>>1]>>((i&1u)<<2))&15u;
  104|  6.06k|}
hb-face.cc:_ZL13_hb_arabic_b2PKhj:
   97|  1.99k|{
   98|  1.99k|  return (a[i>>2]>>((i&3u)<<1))&3u;
   99|  1.99k|}
hb-face.cc:_ZL23_hb_arabic_pua_trad_mapj:
  112|  2.15k|{
  113|  2.15k|  return u<65277u?_hb_arabic_u16[320+(((_hb_arabic_u8[208+(((_hb_arabic_b4(168+_hb_arabic_u8,((_hb_arabic_b4(136+_hb_arabic_u8,u>>2>>4>>4))<<4)+((u>>2>>4)&15u)))<<4)+((u>>2)&15u))])<<2)+((u)&3u))]:0;
  ------------------
  |  Branch (113:10): [True: 2.03k, False: 120]
  ------------------
  114|  2.15k|}

hb-ot-shaper-arabic.cc:_ZL12joining_typej:
  178|  28.0k|{
  179|  28.0k|  switch (u >> 12)
  180|  28.0k|  {
  181|  11.2k|    case 0x0u:
  ------------------
  |  Branch (181:5): [True: 11.2k, False: 16.7k]
  ------------------
  182|  11.2k|      if (hb_in_range<hb_codepoint_t> (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
  ------------------
  |  |   33|  1.35k|#define joining_offset_0x0600u 0
  ------------------
  |  Branch (182:11): [True: 1.35k, False: 9.87k]
  ------------------
  183|  9.87k|      break;
  184|       |
  185|  9.87k|    case 0x1u:
  ------------------
  |  Branch (185:5): [True: 711, False: 27.3k]
  ------------------
  186|    711|      if (hb_in_range<hb_codepoint_t> (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
  ------------------
  |  |   91|    359|#define joining_offset_0x1806u 739
  ------------------
  |  Branch (186:11): [True: 359, False: 352]
  ------------------
  187|    352|      break;
  188|       |
  189|    521|    case 0x2u:
  ------------------
  |  Branch (189:5): [True: 521, False: 27.4k]
  ------------------
  190|    521|      if (hb_in_range<hb_codepoint_t> (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
  ------------------
  |  |  102|    274|#define joining_offset_0x200cu 904
  ------------------
  |  Branch (190:11): [True: 274, False: 247]
  ------------------
  191|    247|      break;
  192|       |
  193|    247|    case 0xAu:
  ------------------
  |  Branch (193:5): [True: 109, False: 27.9k]
  ------------------
  194|    109|      if (hb_in_range<hb_codepoint_t> (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
  ------------------
  |  |  111|     55|#define joining_offset_0xa840u 998
  ------------------
  |  Branch (194:11): [True: 55, False: 54]
  ------------------
  195|     54|      break;
  196|       |
  197|    395|    case 0x10u:
  ------------------
  |  Branch (197:5): [True: 395, False: 27.6k]
  ------------------
  198|    395|      if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
  ------------------
  |  |  118|     31|#define joining_offset_0x10ac0u 1050
  ------------------
  |  Branch (198:11): [True: 31, False: 364]
  ------------------
  199|    364|      if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
  ------------------
  |  |  125|     27|#define joining_offset_0x10b80u 1098
  ------------------
  |  Branch (199:11): [True: 27, False: 337]
  ------------------
  200|    337|      if (hb_in_range<hb_codepoint_t> (u, 0x10D00u, 0x10D23u)) return joining_table[u - 0x10D00u + joining_offset_0x10d00u];
  ------------------
  |  |  132|     40|#define joining_offset_0x10d00u 1146
  ------------------
  |  Branch (200:11): [True: 40, False: 297]
  ------------------
  201|    297|      if (hb_in_range<hb_codepoint_t> (u, 0x10F30u, 0x10FCBu)) return joining_table[u - 0x10F30u + joining_offset_0x10f30u];
  ------------------
  |  |  139|     23|#define joining_offset_0x10f30u 1182
  ------------------
  |  Branch (201:11): [True: 23, False: 274]
  ------------------
  202|    274|      break;
  203|       |
  204|    274|    case 0x11u:
  ------------------
  |  Branch (204:5): [True: 74, False: 27.9k]
  ------------------
  205|     74|      if (hb_in_range<hb_codepoint_t> (u, 0x110BDu, 0x110CDu)) return joining_table[u - 0x110BDu + joining_offset_0x110bdu];
  ------------------
  |  |  158|     19|#define joining_offset_0x110bdu 1338
  ------------------
  |  Branch (205:11): [True: 19, False: 55]
  ------------------
  206|     55|      break;
  207|       |
  208|     72|    case 0x1Eu:
  ------------------
  |  Branch (208:5): [True: 72, False: 27.9k]
  ------------------
  209|     72|      if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E94Bu)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
  ------------------
  |  |  165|     20|#define joining_offset_0x1e900u 1355
  ------------------
  |  Branch (209:11): [True: 20, False: 52]
  ------------------
  210|     52|      break;
  211|       |
  212|  14.9k|    default:
  ------------------
  |  Branch (212:5): [True: 14.9k, False: 13.1k]
  ------------------
  213|  14.9k|      break;
  214|  28.0k|  }
  215|  25.8k|  return X;
  ------------------
  |  |   28|  25.8k|#define X	JOINING_TYPE_X
  ------------------
  216|  28.0k|}

_Z18data_create_arabicPK18hb_ot_shape_plan_t:
  274|  1.74k|{
  275|  1.74k|  arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) hb_calloc (1, sizeof (arabic_shape_plan_t));
  ------------------
  |  |  234|  1.74k|#define hb_calloc hb_calloc_impl
  ------------------
  276|  1.74k|  if (unlikely (!arabic_plan))
  ------------------
  |  |  259|  1.74k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 1.73k]
  |  |  ------------------
  ------------------
  277|      9|    return nullptr;
  278|       |
  279|  1.73k|  arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
  280|  1.73k|  arabic_plan->has_stch = !!plan->map.get_1_mask (HB_TAG ('s','t','c','h'));
  ------------------
  |  |  179|  1.73k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  281|  13.9k|  for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++) {
  ------------------
  |  Branch (281:28): [True: 12.1k, False: 1.73k]
  ------------------
  282|  12.1k|    arabic_plan->mask_array[i] = plan->map.get_1_mask (arabic_features[i]);
  283|  12.1k|    arabic_plan->do_fallback = arabic_plan->do_fallback &&
  ------------------
  |  Branch (283:32): [True: 7.71k, False: 4.46k]
  ------------------
  284|  12.1k|			       (FEATURE_IS_SYRIAC (arabic_features[i]) ||
  ------------------
  |  |   99|  15.4k|#define FEATURE_IS_SYRIAC(tag) hb_in_range<unsigned char> ((unsigned char) (tag), '2', '3')
  |  |  ------------------
  |  |  |  Branch (99:32): [True: 3.27k, False: 4.43k]
  |  |  ------------------
  ------------------
  285|  7.71k|				plan->map.needs_fallback (arabic_features[i]));
  ------------------
  |  Branch (285:5): [True: 4.36k, False: 70]
  ------------------
  286|  12.1k|  }
  287|       |
  288|  1.73k|  return arabic_plan;
  289|  1.74k|}
_Z19data_destroy_arabicPv:
  293|  1.73k|{
  294|  1.73k|  arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) data;
  295|       |
  296|  1.73k|  arabic_fallback_plan_destroy (arabic_plan->fallback_plan);
  297|       |
  298|  1.73k|  hb_free (data);
  ------------------
  |  |  236|  1.73k|#define hb_free hb_free_impl
  ------------------
  299|  1.73k|}
_Z23setup_masks_arabic_planPK19arabic_shape_plan_tP11hb_buffer_t11hb_script_t:
  394|  1.73k|{
  395|  1.73k|  HB_BUFFER_ALLOCATE_VAR (buffer, arabic_shaping_action);
  ------------------
  |  |  669|  1.73k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  1.73k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.73k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  396|       |
  397|  1.73k|  arabic_joining (buffer);
  398|  1.73k|  if (script == HB_SCRIPT_MONGOLIAN)
  ------------------
  |  Branch (398:7): [True: 213, False: 1.52k]
  ------------------
  399|    213|    mongolian_variation_selectors (buffer);
  400|       |
  401|  1.73k|  unsigned int count = buffer->len;
  402|  1.73k|  hb_glyph_info_t *info = buffer->info;
  403|  29.7k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (403:28): [True: 28.0k, False: 1.73k]
  ------------------
  404|  28.0k|    info[i].mask |= arabic_plan->mask_array[info[i].arabic_shaping_action()];
  ------------------
  |  |   36|  28.0k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  28.0k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  405|  1.73k|}
hb-ot-shaper-arabic.cc:_ZL14arabic_joiningP11hb_buffer_t:
  303|  1.73k|{
  304|  1.73k|  unsigned int count = buffer->len;
  305|  1.73k|  hb_glyph_info_t *info = buffer->info;
  306|  1.73k|  unsigned int prev = UINT_MAX, state = 0;
  307|       |
  308|       |  /* Check pre-context */
  309|  1.73k|  for (unsigned int i = 0; i < buffer->context_len[0]; i++)
  ------------------
  |  Branch (309:28): [True: 0, False: 1.73k]
  ------------------
  310|      0|  {
  311|      0|    unsigned int this_type = get_joining_type (buffer->context[0][i], buffer->unicode->general_category (buffer->context[0][i]));
  312|       |
  313|      0|    if (unlikely (this_type == JOINING_TYPE_T))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  314|      0|      continue;
  315|       |
  316|      0|    const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
  317|      0|    state = entry->next_state;
  318|      0|    break;
  319|      0|  }
  320|       |
  321|  29.7k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (321:28): [True: 28.0k, False: 1.73k]
  ------------------
  322|  28.0k|  {
  323|  28.0k|    unsigned int this_type = get_joining_type (info[i].codepoint, _hb_glyph_info_get_general_category (&info[i]));
  324|       |
  325|  28.0k|    if (unlikely (this_type == JOINING_TYPE_T)) {
  ------------------
  |  |  259|  28.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.15k, False: 25.8k]
  |  |  ------------------
  ------------------
  326|  2.15k|      info[i].arabic_shaping_action() = NONE;
  ------------------
  |  |   36|  2.15k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  2.15k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  327|  2.15k|      continue;
  328|  2.15k|    }
  329|       |
  330|  25.8k|    const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
  331|       |
  332|  25.8k|    if (entry->prev_action != NONE && prev != UINT_MAX)
  ------------------
  |  Branch (332:9): [True: 113, False: 25.7k]
  |  Branch (332:39): [True: 113, False: 0]
  ------------------
  333|    113|    {
  334|    113|      info[prev].arabic_shaping_action() = entry->prev_action;
  ------------------
  |  |   36|    113|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|    113|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  335|    113|      buffer->safe_to_insert_tatweel (prev, i + 1);
  336|    113|    }
  337|  25.7k|    else
  338|  25.7k|    {
  339|  25.7k|      if (prev == UINT_MAX)
  ------------------
  |  Branch (339:11): [True: 1.73k, False: 24.0k]
  ------------------
  340|  1.73k|      {
  341|  1.73k|        if (this_type >= JOINING_TYPE_R)
  ------------------
  |  Branch (341:13): [True: 103, False: 1.63k]
  ------------------
  342|    103|	  buffer->unsafe_to_concat_from_outbuffer (0, i + 1);
  343|  1.73k|      }
  344|  24.0k|      else
  345|  24.0k|      {
  346|  24.0k|	if (this_type >= JOINING_TYPE_R ||
  ------------------
  |  Branch (346:6): [True: 316, False: 23.6k]
  ------------------
  347|  24.0k|	    (2 <= state && state <= 5) /* States that have a possible prev_action. */)
  ------------------
  |  Branch (347:7): [True: 287, False: 23.4k]
  |  Branch (347:21): [True: 276, False: 11]
  ------------------
  348|    592|	  buffer->unsafe_to_concat (prev, i + 1);
  349|  24.0k|      }
  350|  25.7k|    }
  351|       |
  352|  25.8k|    info[i].arabic_shaping_action() = entry->curr_action;
  ------------------
  |  |   36|  25.8k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  25.8k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  353|       |
  354|  25.8k|    prev = i;
  355|  25.8k|    state = entry->next_state;
  356|  25.8k|  }
  357|       |
  358|  1.73k|  for (unsigned int i = 0; i < buffer->context_len[1]; i++)
  ------------------
  |  Branch (358:28): [True: 0, False: 1.73k]
  ------------------
  359|      0|  {
  360|      0|    unsigned int this_type = get_joining_type (buffer->context[1][i], buffer->unicode->general_category (buffer->context[1][i]));
  361|       |
  362|      0|    if (unlikely (this_type == JOINING_TYPE_T))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  363|      0|      continue;
  364|       |
  365|      0|    const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
  366|      0|    if (entry->prev_action != NONE && prev != UINT_MAX)
  ------------------
  |  Branch (366:9): [True: 0, False: 0]
  |  Branch (366:39): [True: 0, False: 0]
  ------------------
  367|      0|    {
  368|      0|      info[prev].arabic_shaping_action() = entry->prev_action;
  ------------------
  |  |   36|      0|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|      0|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  369|      0|      buffer->safe_to_insert_tatweel (prev, buffer->len);
  370|      0|    }
  371|      0|    else if (2 <= state && state <= 5) /* States that have a possible prev_action. */
  ------------------
  |  Branch (371:14): [True: 0, False: 0]
  |  Branch (371:28): [True: 0, False: 0]
  ------------------
  372|      0|    {
  373|      0|      buffer->unsafe_to_concat (prev, buffer->len);
  374|      0|    }
  375|      0|    break;
  376|      0|  }
  377|  1.73k|}
hb-ot-shaper-arabic.cc:_ZL16get_joining_typej29hb_unicode_general_category_t:
   87|  28.0k|{
   88|  28.0k|  unsigned int j_type = joining_type(u);
   89|  28.0k|  if (likely (j_type != JOINING_TYPE_X))
  ------------------
  |  |  258|  28.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.08k, False: 26.9k]
  |  |  ------------------
  ------------------
   90|  1.08k|    return j_type;
   91|       |
   92|  26.9k|  return (FLAG_UNSAFE(gen_cat) &
  ------------------
  |  |   74|  26.9k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 26.9k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (92:10): [True: 2.15k, False: 24.7k]
  ------------------
   93|  26.9k|	  (FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) |
  ------------------
  |  |   73|  26.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  26.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
   94|  26.9k|	   FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
  ------------------
  |  |   73|  26.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  26.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
   95|  26.9k|	   FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))
  ------------------
  |  |   73|  26.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  26.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
   96|  26.9k|	 ) ?  JOINING_TYPE_T : JOINING_TYPE_U;
   97|  28.0k|}
hb-ot-shaper-arabic.cc:_ZL29mongolian_variation_selectorsP11hb_buffer_t:
  381|    213|{
  382|       |  /* Copy arabic_shaping_action() from base to Mongolian variation selectors. */
  383|    213|  unsigned int count = buffer->len;
  384|    213|  hb_glyph_info_t *info = buffer->info;
  385|  3.50k|  for (unsigned int i = 1; i < count; i++)
  ------------------
  |  Branch (385:28): [True: 3.29k, False: 213]
  ------------------
  386|  3.29k|    if (unlikely (hb_in_ranges<hb_codepoint_t> (info[i].codepoint, 0x180Bu, 0x180Du, 0x180Fu, 0x180Fu)))
  ------------------
  |  |  259|  3.29k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 251, False: 3.04k]
  |  |  ------------------
  ------------------
  387|    251|      info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
  ------------------
  |  |   36|    251|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|    251|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
                    info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
  ------------------
  |  |   36|    251|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|    251|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  388|    213|}
hb-ot-shaper-arabic.cc:_ZL23collect_features_arabicP21hb_ot_shape_planner_t:
  185|  1.39k|{
  186|  1.39k|  hb_ot_map_builder_t *map = &plan->map;
  187|       |
  188|       |  /* We apply features according to the Arabic spec, with pauses
  189|       |   * in between most.
  190|       |   *
  191|       |   * The pause between init/medi/... and rlig is required.  See eg:
  192|       |   * https://bugzilla.mozilla.org/show_bug.cgi?id=644184
  193|       |   *
  194|       |   * The pauses between init/medi/... themselves are not necessarily
  195|       |   * needed as only one of those features is applied to any character.
  196|       |   * The only difference it makes is when fonts have contextual
  197|       |   * substitutions.  We now follow the order of the spec, which makes
  198|       |   * for better experience if that's what Uniscribe is doing.
  199|       |   *
  200|       |   * At least for Arabic, looks like Uniscribe has a pause between
  201|       |   * rlig and calt.  Otherwise the IranNastaliq's ALLAH ligature won't
  202|       |   * work.  However, testing shows that rlig and calt are applied
  203|       |   * together for Mongolian in Uniscribe.  As such, we only add a
  204|       |   * pause for Arabic, not other scripts.
  205|       |   */
  206|       |
  207|       |
  208|  1.39k|  map->enable_feature (HB_TAG('s','t','c','h'));
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  209|  1.39k|  map->add_gsub_pause (record_stch);
  210|       |
  211|  1.39k|  map->enable_feature (HB_TAG('c','c','m','p'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  212|  1.39k|  map->enable_feature (HB_TAG('l','o','c','l'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  213|       |
  214|  1.39k|  map->add_gsub_pause (nullptr);
  215|       |
  216|  11.1k|  for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++)
  ------------------
  |  Branch (216:28): [True: 9.73k, False: 1.39k]
  ------------------
  217|  9.73k|  {
  218|  9.73k|    bool has_fallback = plan->props.script == HB_SCRIPT_ARABIC && !FEATURE_IS_SYRIAC (arabic_features[i]);
  ------------------
  |  |   99|  8.14k|#define FEATURE_IS_SYRIAC(tag) hb_in_range<unsigned char> ((unsigned char) (tag), '2', '3')
  ------------------
  |  Branch (218:25): [True: 8.14k, False: 1.58k]
  |  Branch (218:67): [True: 4.65k, False: 3.49k]
  ------------------
  219|  9.73k|    map->add_feature (arabic_features[i], F_MANUAL_ZWJ | (has_fallback ? F_HAS_FALLBACK : F_NONE));
  ------------------
  |  Branch (219:59): [True: 4.65k, False: 5.07k]
  ------------------
  220|  9.73k|    map->add_gsub_pause (nullptr);
  221|  9.73k|  }
  222|  1.39k|   map->add_gsub_pause (deallocate_buffer_var);
  223|       |
  224|       |  /* Normally, Unicode says a ZWNJ means "don't ligate".  In Arabic script
  225|       |   * however, it says a ZWJ should also mean "don't ligate".  So we run
  226|       |   * the main ligating features as MANUAL_ZWJ. */
  227|       |
  228|  1.39k|  map->enable_feature (HB_TAG('r','l','i','g'), F_MANUAL_ZWJ | F_HAS_FALLBACK);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  229|       |
  230|  1.39k|  if (plan->props.script == HB_SCRIPT_ARABIC)
  ------------------
  |  Branch (230:7): [True: 1.16k, False: 226]
  ------------------
  231|  1.16k|    map->add_gsub_pause (arabic_fallback_shape);
  232|       |
  233|  1.39k|   map->enable_feature (HB_TAG('c','a','l','t'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  234|       |   /* https://github.com/harfbuzz/harfbuzz/issues/1573 */
  235|  1.39k|   if (!map->has_feature (HB_TAG('r','c','l','t')))
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (235:8): [True: 1.38k, False: 1]
  ------------------
  236|  1.38k|   {
  237|  1.38k|     map->add_gsub_pause (nullptr);
  238|  1.38k|     map->enable_feature (HB_TAG('r','c','l','t'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.38k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  239|  1.38k|   }
  240|       |
  241|  1.39k|   map->enable_feature (HB_TAG('l','i','g','a'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  242|  1.39k|   map->enable_feature (HB_TAG('c','l','i','g'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  243|       |
  244|       |  /* The spec includes 'cswh'.  Earlier versions of Windows
  245|       |   * used to enable this by default, but testing suggests
  246|       |   * that Windows 8 and later do not enable it by default,
  247|       |   * and spec now says 'Off by default'.
  248|       |   * We disabled this in ae23c24c32.
  249|       |   * Note that IranNastaliq uses this feature extensively
  250|       |   * to fixup broken glyph sequences.  Oh well...
  251|       |   * Test case: U+0643,U+0640,U+0631. */
  252|       |  //map->enable_feature (HB_TAG('c','s','w','h'), F_MANUAL_ZWJ);
  253|  1.39k|  map->enable_feature (HB_TAG('m','s','e','t'), F_MANUAL_ZWJ);
  ------------------
  |  |  179|  1.39k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  254|  1.39k|}
hb-ot-shaper-arabic.cc:_ZL11record_stchPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  459|  1.35k|{
  460|  1.35k|  const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
  461|  1.35k|  if (!arabic_plan->has_stch)
  ------------------
  |  Branch (461:7): [True: 1.32k, False: 36]
  ------------------
  462|  1.32k|    return false;
  463|       |
  464|       |  /* 'stch' feature was just applied.  Look for anything that multiplied,
  465|       |   * and record it for stch treatment later.  Note that rtlm, frac, etc
  466|       |   * are applied before stch, but we assume that they didn't result in
  467|       |   * anything multiplying into 5 pieces, so it's safe-ish... */
  468|       |
  469|     36|  unsigned int count = buffer->len;
  470|     36|  hb_glyph_info_t *info = buffer->info;
  471|  6.38k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (471:28): [True: 6.35k, False: 36]
  ------------------
  472|  6.35k|    if (unlikely (_hb_glyph_info_multiplied (&info[i])))
  ------------------
  |  |  259|  6.35k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6.07k, False: 282]
  |  |  ------------------
  ------------------
  473|  6.07k|    {
  474|  6.07k|      unsigned int comp = _hb_glyph_info_get_lig_comp (&info[i]);
  475|  6.07k|      info[i].arabic_shaping_action() = comp % 2 ? STCH_REPEATING : STCH_FIXED;
  ------------------
  |  |   36|  6.07k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  6.07k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (475:41): [True: 3.09k, False: 2.98k]
  ------------------
  476|  6.07k|      buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH;
  ------------------
  |  |   38|  6.07k|#define HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH HB_BUFFER_SCRATCH_FLAG_SHAPER0
  ------------------
  477|  6.07k|    }
  478|     36|  return false;
  479|  1.35k|}
hb-ot-shaper-arabic.cc:_ZL21deallocate_buffer_varPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  178|  1.33k|{
  179|  1.33k|  HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
  ------------------
  |  |  671|  1.33k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  1.33k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.33k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  180|  1.33k|  return false;
  181|  1.33k|}
hb-ot-shaper-arabic.cc:_ZL21arabic_fallback_shapePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  420|  1.11k|{
  421|       |#ifdef HB_NO_OT_SHAPER_ARABIC_FALLBACK
  422|       |  return false;
  423|       |#endif
  424|       |
  425|  1.11k|  const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
  426|       |
  427|  1.11k|  if (!arabic_plan->do_fallback)
  ------------------
  |  Branch (427:7): [True: 56, False: 1.05k]
  ------------------
  428|     56|    return false;
  429|       |
  430|  1.05k|retry:
  431|  1.05k|  arabic_fallback_plan_t *fallback_plan = arabic_plan->fallback_plan;
  432|  1.05k|  if (unlikely (!fallback_plan))
  ------------------
  |  |  259|  1.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.05k, False: 0]
  |  |  ------------------
  ------------------
  433|  1.05k|  {
  434|       |    /* This sucks.  We need a font to build the fallback plan... */
  435|  1.05k|    fallback_plan = arabic_fallback_plan_create (plan, font);
  436|  1.05k|    if (unlikely (!arabic_plan->fallback_plan.cmpexch (nullptr, fallback_plan)))
  ------------------
  |  |  259|  1.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.05k]
  |  |  ------------------
  ------------------
  437|      0|    {
  438|      0|      arabic_fallback_plan_destroy (fallback_plan);
  439|      0|      goto retry;
  440|      0|    }
  441|  1.05k|  }
  442|       |
  443|  1.05k|  arabic_fallback_plan_shape (fallback_plan, font, buffer);
  444|  1.05k|  return true;
  445|  1.05k|}
hb-ot-shaper-arabic.cc:_ZL25postprocess_glyphs_arabicPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  635|  1.38k|{
  636|  1.38k|  apply_stch (plan, buffer, font);
  637|  1.38k|}
hb-ot-shaper-arabic.cc:_ZL10apply_stchPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  485|  1.38k|{
  486|  1.38k|  if (likely (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH)))
  ------------------
  |  |  258|  1.38k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.35k, False: 30]
  |  |  ------------------
  ------------------
  487|  1.35k|    return;
  488|       |
  489|       |  /* The Arabic shaper currently always processes in RTL mode, so we should
  490|       |   * stretch / position the stretched pieces to the left / preceding glyphs. */
  491|       |
  492|       |  /* We do a two pass implementation:
  493|       |   * First pass calculates the exact number of extra glyphs we need,
  494|       |   * We then enlarge buffer to have that much room,
  495|       |   * Second pass applies the stretch, copying things to the end of buffer.
  496|       |   */
  497|       |
  498|     30|  int sign = font->x_scale < 0 ? -1 : +1;
  ------------------
  |  Branch (498:14): [True: 0, False: 30]
  ------------------
  499|     30|  unsigned int extra_glyphs_needed = 0; // Set during MEASURE, used during CUT
  500|     30|  enum { MEASURE, CUT } /* step_t */;
  501|       |
  502|     90|  for (unsigned int step = MEASURE; step <= CUT; step = step + 1)
  ------------------
  |  Branch (502:37): [True: 60, False: 30]
  ------------------
  503|     60|  {
  504|     60|    unsigned int count = buffer->len;
  505|     60|    hb_glyph_info_t *info = buffer->info;
  506|     60|    hb_glyph_position_t *pos = buffer->pos;
  507|     60|    unsigned int new_len = count + extra_glyphs_needed; // write head during CUT
  508|     60|    unsigned int j = new_len;
  509|    676|    for (unsigned int i = count; i; i--)
  ------------------
  |  Branch (509:34): [True: 616, False: 60]
  ------------------
  510|    616|    {
  511|    616|      if (!hb_in_range<uint8_t> (info[i - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING))
  ------------------
  |  |   36|    616|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|    616|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (511:11): [True: 504, False: 112]
  ------------------
  512|    504|      {
  513|    504|	if (step == CUT)
  ------------------
  |  Branch (513:6): [True: 252, False: 252]
  ------------------
  514|    252|	{
  515|    252|	  --j;
  516|    252|	  info[j] = info[i - 1];
  517|    252|	  pos[j] = pos[i - 1];
  518|    252|	}
  519|    504|	continue;
  520|    504|      }
  521|       |
  522|       |      /* Yay, justification! */
  523|       |
  524|    112|      hb_position_t w_total = 0; // Total to be filled
  525|    112|      hb_position_t w_fixed = 0; // Sum of fixed tiles
  526|    112|      hb_position_t w_repeating = 0; // Sum of repeating tiles
  527|    112|      int n_fixed = 0;
  528|    112|      int n_repeating = 0;
  529|       |
  530|    112|      unsigned int end = i;
  531|  12.2k|      while (i &&
  ------------------
  |  Branch (531:14): [True: 12.2k, False: 36]
  ------------------
  532|  12.2k|	     hb_in_range<uint8_t> (info[i - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING))
  ------------------
  |  |   36|  12.2k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  12.2k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (532:7): [True: 12.1k, False: 76]
  ------------------
  533|  12.1k|      {
  534|  12.1k|	i--;
  535|  12.1k|	hb_position_t width = font->get_glyph_h_advance (info[i].codepoint);
  536|  12.1k|	if (info[i].arabic_shaping_action() == STCH_FIXED)
  ------------------
  |  |   36|  12.1k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  12.1k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (536:6): [True: 5.96k, False: 6.18k]
  ------------------
  537|  5.96k|	{
  538|  5.96k|	  w_fixed += width;
  539|  5.96k|	  n_fixed++;
  540|  5.96k|	}
  541|  6.18k|	else
  542|  6.18k|	{
  543|  6.18k|	  w_repeating += width;
  544|  6.18k|	  n_repeating++;
  545|  6.18k|	}
  546|  12.1k|      }
  547|    112|      unsigned int start = i;
  548|    112|      unsigned int context = i;
  549|    282|      while (context &&
  ------------------
  |  Branch (549:14): [True: 224, False: 58]
  ------------------
  550|    282|	     !hb_in_range<uint8_t> (info[context - 1].arabic_shaping_action(), STCH_FIXED, STCH_REPEATING) &&
  ------------------
  |  |   36|    224|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|    224|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (550:7): [True: 188, False: 36]
  ------------------
  551|    282|	     (_hb_glyph_info_is_default_ignorable (&info[context - 1]) ||
  ------------------
  |  Branch (551:8): [True: 0, False: 188]
  ------------------
  552|    188|	      HB_ARABIC_GENERAL_CATEGORY_IS_WORD (_hb_glyph_info_get_general_category (&info[context - 1]))))
  ------------------
  |  |   43|    188|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|    188|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 188, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (43:2): [True: 170, False: 18]
  |  |  ------------------
  |  |   44|    188|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|    188|	  /*FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) |*/ \
  |  |   47|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|    188|	  /*FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) |*/ \
  |  |   50|    188|	  /*FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER) |*/ \
  |  |   51|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL) | \
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    188|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL)))
  |  |  ------------------
  |  |  |  |   73|    188|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    188|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  553|    170|      {
  554|    170|	context--;
  555|    170|	w_total += pos[context].x_advance;
  556|    170|      }
  557|    112|      i++; // Don't touch i again.
  558|       |
  559|    112|      DEBUG_MSG (ARABIC, nullptr, "%s stretch at (%u,%u,%u)",
  ------------------
  |  |  232|    224|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (232:109): [True: 56, False: 56]
  |  |  ------------------
  ------------------
  560|    112|		 step == MEASURE ? "measuring" : "cutting", context, start, end);
  561|    112|      DEBUG_MSG (ARABIC, nullptr, "rest of word:    count=%u width %d", start - context, w_total);
  ------------------
  |  |  232|    112|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  562|    112|      DEBUG_MSG (ARABIC, nullptr, "fixed tiles:     count=%d width=%d", n_fixed, w_fixed);
  ------------------
  |  |  232|    112|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  563|    112|      DEBUG_MSG (ARABIC, nullptr, "repeating tiles: count=%d width=%d", n_repeating, w_repeating);
  ------------------
  |  |  232|    112|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  564|       |
  565|       |      /* Number of additional times to repeat each repeating tile. */
  566|    112|      int n_copies = 0;
  567|       |
  568|    112|      hb_position_t w_remaining = w_total - w_fixed;
  569|    112|      if (sign * w_remaining > sign * w_repeating && sign * w_repeating > 0)
  ------------------
  |  Branch (569:11): [True: 18, False: 94]
  |  Branch (569:54): [True: 12, False: 6]
  ------------------
  570|     12|	n_copies = (sign * w_remaining) / (sign * w_repeating) - 1;
  571|       |
  572|       |      /* See if we can improve the fit by adding an extra repeat and squeezing them together a bit. */
  573|    112|      hb_position_t extra_repeat_overlap = 0;
  574|    112|      hb_position_t shortfall = sign * w_remaining - sign * w_repeating * (n_copies + 1);
  575|    112|      if (shortfall > 0 && n_repeating > 0)
  ------------------
  |  Branch (575:11): [True: 14, False: 98]
  |  Branch (575:28): [True: 8, False: 6]
  ------------------
  576|      8|      {
  577|      8|	++n_copies;
  578|      8|	hb_position_t excess = (n_copies + 1) * sign * w_repeating - sign * w_remaining;
  579|      8|	if (excess > 0)
  ------------------
  |  Branch (579:6): [True: 8, False: 0]
  ------------------
  580|      8|	  extra_repeat_overlap = excess / (n_copies * n_repeating);
  581|      8|      }
  582|       |
  583|    112|      if (step == MEASURE)
  ------------------
  |  Branch (583:11): [True: 56, False: 56]
  ------------------
  584|     56|      {
  585|     56|	extra_glyphs_needed += n_copies * n_repeating;
  586|     56|	DEBUG_MSG (ARABIC, nullptr, "will add extra %d copies of repeating tiles", n_copies);
  ------------------
  |  |  232|     56|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  587|     56|      }
  588|     56|      else
  589|     56|      {
  590|     56|	buffer->unsafe_to_break (context, end);
  591|     56|	hb_position_t x_offset = 0;
  592|  6.12k|	for (unsigned int k = end; k > start; k--)
  ------------------
  |  Branch (592:29): [True: 6.07k, False: 56]
  ------------------
  593|  6.07k|	{
  594|  6.07k|	  hb_position_t width = font->get_glyph_h_advance (info[k - 1].codepoint);
  595|       |
  596|  6.07k|	  unsigned int repeat = 1;
  597|  6.07k|	  if (info[k - 1].arabic_shaping_action() == STCH_REPEATING)
  ------------------
  |  |   36|  6.07k|#define arabic_shaping_action() ot_shaper_var_u8_auxiliary() /* arabic shaping action */
  |  |  ------------------
  |  |  |  |   39|  6.07k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (597:8): [True: 3.09k, False: 2.98k]
  ------------------
  598|  3.09k|	    repeat += n_copies;
  599|       |
  600|  6.07k|	  DEBUG_MSG (ARABIC, nullptr, "appending %u copies of glyph %u; j=%u",
  ------------------
  |  |  232|  6.07k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  601|  6.07k|		     repeat, info[k - 1].codepoint, j);
  602|  12.1k|	  for (unsigned int n = 0; n < repeat; n++)
  ------------------
  |  Branch (602:29): [True: 6.09k, False: 6.07k]
  ------------------
  603|  6.09k|	  {
  604|  6.09k|	    x_offset -= width;
  605|  6.09k|	    if (n > 0)
  ------------------
  |  Branch (605:10): [True: 19, False: 6.07k]
  ------------------
  606|     19|	      x_offset += extra_repeat_overlap;
  607|  6.09k|	    pos[k - 1].x_offset = x_offset;
  608|       |	    /* Append copy. */
  609|  6.09k|	    --j;
  610|  6.09k|	    info[j] = info[k - 1];
  611|  6.09k|	    pos[j] = pos[k - 1];
  612|  6.09k|	  }
  613|  6.07k|	}
  614|     56|      }
  615|    112|    }
  616|       |
  617|     60|    if (step == MEASURE)
  ------------------
  |  Branch (617:9): [True: 30, False: 30]
  ------------------
  618|     30|    {
  619|     30|      if (unlikely (!buffer->ensure (count + extra_glyphs_needed)))
  ------------------
  |  |  259|     30|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 30]
  |  |  ------------------
  ------------------
  620|      0|	break;
  621|     30|    }
  622|     30|    else
  623|     30|    {
  624|     30|      assert (j == 0);
  625|      0|      buffer->len = new_len;
  626|     30|    }
  627|     60|  }
  628|     30|}
hb-ot-shaper-arabic.cc:_ZL18setup_masks_arabicPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  411|  1.38k|{
  412|  1.38k|  const arabic_shape_plan_t *arabic_plan = (const arabic_shape_plan_t *) plan->data;
  413|  1.38k|  setup_masks_arabic_plan (arabic_plan, buffer, plan->props.script);
  414|  1.38k|}
hb-ot-shaper-arabic.cc:_ZL20reorder_marks_arabicPK18hb_ot_shape_plan_tP11hb_buffer_tjj:
  675|  1.04k|{
  676|  1.04k|  hb_glyph_info_t *info = buffer->info;
  677|       |
  678|  1.04k|  DEBUG_MSG (ARABIC, buffer, "Reordering marks from %u to %u", start, end);
  ------------------
  |  |  232|  1.04k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  679|       |
  680|  1.04k|  unsigned int i = start;
  681|  2.42k|  for (unsigned int cc = 220; cc <= 230; cc += 10)
  ------------------
  |  Branch (681:31): [True: 1.82k, False: 605]
  ------------------
  682|  1.82k|  {
  683|  1.82k|    DEBUG_MSG (ARABIC, buffer, "Looking for %u's starting at %u", cc, i);
  ------------------
  |  |  232|  1.82k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  684|  2.34k|    while (i < end && info_cc(info[i]) < cc)
  ------------------
  |  |  283|  1.90k|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (684:12): [True: 1.90k, False: 436]
  |  Branch (684:23): [True: 518, False: 1.38k]
  ------------------
  685|    518|      i++;
  686|  1.82k|    DEBUG_MSG (ARABIC, buffer, "Looking for %u's stopped at %u", cc, i);
  ------------------
  |  |  232|  1.82k|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  687|       |
  688|  1.82k|    if (i == end)
  ------------------
  |  Branch (688:9): [True: 436, False: 1.38k]
  ------------------
  689|    436|      break;
  690|       |
  691|  1.38k|    if (info_cc(info[i]) > cc)
  ------------------
  |  |  283|  1.38k|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (691:9): [True: 634, False: 752]
  ------------------
  692|    634|      continue;
  693|       |
  694|    752|    unsigned int j = i;
  695|    901|    while (j < end && info_cc(info[j]) == cc && info_is_mcm (info[j]))
  ------------------
  |  |  283|    814|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  |  Branch (695:12): [True: 814, False: 87]
  |  Branch (695:23): [True: 802, False: 12]
  |  Branch (695:49): [True: 149, False: 653]
  ------------------
  696|    149|      j++;
  697|       |
  698|    752|    if (i == j)
  ------------------
  |  Branch (698:9): [True: 651, False: 101]
  ------------------
  699|    651|      continue;
  700|       |
  701|    101|    DEBUG_MSG (ARABIC, buffer, "Found %u's from %u to %u", cc, i, j);
  ------------------
  |  |  232|    101|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  702|       |
  703|       |    /* Shift it! */
  704|    101|    DEBUG_MSG (ARABIC, buffer, "Shifting %u's: %u %u", cc, i, j);
  ------------------
  |  |  232|    101|#define DEBUG_MSG(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    false, 0, 0, __VA_ARGS__)
  ------------------
  705|    101|    hb_glyph_info_t temp[HB_OT_SHAPE_MAX_COMBINING_MARKS];
  706|    101|    assert (j - i <= ARRAY_LENGTH (temp));
  707|      0|    buffer->merge_clusters (start, j);
  708|    101|    memmove (temp, &info[i], (j - i) * sizeof (hb_glyph_info_t));
  709|    101|    memmove (&info[start + j - i], &info[start], (i - start) * sizeof (hb_glyph_info_t));
  710|    101|    memmove (&info[start], temp, (j - i) * sizeof (hb_glyph_info_t));
  711|       |
  712|       |    /* Renumber CC such that the reordered sequence is still sorted.
  713|       |     * 22 and 26 are chosen because they are smaller than all Arabic categories,
  714|       |     * and are folded back to 220/230 respectively during fallback mark positioning.
  715|       |     *
  716|       |     * We do this because the CGJ-handling logic in the normalizer relies on
  717|       |     * mark sequences having an increasing order even after this reordering.
  718|       |     * https://github.com/harfbuzz/harfbuzz/issues/554
  719|       |     * This, however, does break some obscure sequences, where the normalizer
  720|       |     * might compose a sequence that it should not.  For example, in the seequence
  721|       |     * ALEF, HAMZAH, MADDAH, we should NOT try to compose ALEF+MADDAH, but with this
  722|       |     * renumbering, we will.
  723|       |     */
  724|    101|    unsigned int new_start = start + j - i;
  725|    101|    unsigned int new_cc = cc == 220 ? HB_MODIFIED_COMBINING_CLASS_CCC22 : HB_MODIFIED_COMBINING_CLASS_CCC26;
  ------------------
  |  |  294|     52|#define HB_MODIFIED_COMBINING_CLASS_CCC22 25 /* meteg */
  ------------------
                  unsigned int new_cc = cc == 220 ? HB_MODIFIED_COMBINING_CLASS_CCC22 : HB_MODIFIED_COMBINING_CLASS_CCC26;
  ------------------
  |  |  298|    150|#define HB_MODIFIED_COMBINING_CLASS_CCC26 26 /* point varika */
  ------------------
  |  Branch (725:27): [True: 52, False: 49]
  ------------------
  726|    250|    while (start < new_start)
  ------------------
  |  Branch (726:12): [True: 149, False: 101]
  ------------------
  727|    149|    {
  728|    149|      _hb_glyph_info_set_modified_combining_class (&info[start], new_cc);
  729|    149|      start++;
  730|    149|    }
  731|       |
  732|    101|    i = j;
  733|    101|  }
  734|  1.04k|}
hb-ot-shaper-arabic.cc:_ZL11info_is_mcmRK15hb_glyph_info_t:
  662|    802|{
  663|    802|  hb_codepoint_t u = info.codepoint;
  664|  10.6k|  for (unsigned int i = 0; i < ARRAY_LENGTH (modifier_combining_marks); i++)
  ------------------
  |  Branch (664:28): [True: 9.97k, False: 653]
  ------------------
  665|  9.97k|    if (u == modifier_combining_marks[i])
  ------------------
  |  Branch (665:9): [True: 149, False: 9.82k]
  ------------------
  666|    149|      return true;
  667|    653|  return false;
  668|    802|}

hb-ot-shaper-hangul.cc:_ZL23collect_features_hangulP21hb_ot_shape_planner_t:
   59|    566|{
   60|    566|  hb_ot_map_builder_t *map = &plan->map;
   61|       |
   62|  2.26k|  for (unsigned int i = FIRST_HANGUL_FEATURE; i < HANGUL_FEATURE_COUNT; i++)
  ------------------
  |  Branch (62:47): [True: 1.69k, False: 566]
  ------------------
   63|  1.69k|    map->add_feature (hangul_features[i]);
   64|    566|}
hb-ot-shaper-hangul.cc:_ZL24override_features_hangulP21hb_ot_shape_planner_t:
   68|    566|{
   69|       |  /* Uniscribe does not apply 'calt' for Hangul, and certain fonts
   70|       |   * (Noto Sans CJK, Source Sans Han, etc) apply all of jamo lookups
   71|       |   * in calt, which is not desirable. */
   72|    566|  plan->map.disable_feature (HB_TAG('c','a','l','t'));
  ------------------
  |  |  179|    566|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
   73|    566|}
hb-ot-shaper-hangul.cc:_ZL18data_create_hangulPK18hb_ot_shape_plan_t:
   82|    566|{
   83|    566|  hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) hb_calloc (1, sizeof (hangul_shape_plan_t));
  ------------------
  |  |  234|    566|#define hb_calloc hb_calloc_impl
  ------------------
   84|    566|  if (unlikely (!hangul_plan))
  ------------------
  |  |  259|    566|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 561]
  |  |  ------------------
  ------------------
   85|      5|    return nullptr;
   86|       |
   87|  2.80k|  for (unsigned int i = 0; i < HANGUL_FEATURE_COUNT; i++)
  ------------------
  |  Branch (87:28): [True: 2.24k, False: 561]
  ------------------
   88|  2.24k|    hangul_plan->mask_array[i] = plan->map.get_1_mask (hangul_features[i]);
   89|       |
   90|    561|  return hangul_plan;
   91|    566|}
hb-ot-shaper-hangul.cc:_ZL19data_destroy_hangulPv:
   95|    561|{
   96|    561|  hb_free (data);
  ------------------
  |  |  236|    561|#define hb_free hb_free_impl
  ------------------
   97|    561|}
hb-ot-shaper-hangul.cc:_ZL22preprocess_text_hangulPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  136|    561|{
  137|    561|  HB_BUFFER_ALLOCATE_VAR (buffer, hangul_shaping_feature);
  ------------------
  |  |  669|    561|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    561|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    561|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  138|       |
  139|       |  /* Hangul syllables come in two shapes: LV, and LVT.  Of those:
  140|       |   *
  141|       |   *   - LV can be precomposed, or decomposed.  Lets call those
  142|       |   *     <LV> and <L,V>,
  143|       |   *   - LVT can be fully precomposed, partially precomposed, or
  144|       |   *     fully decomposed.  Ie. <LVT>, <LV,T>, or <L,V,T>.
  145|       |   *
  146|       |   * The composition / decomposition is mechanical.  However, not
  147|       |   * all <L,V> sequences compose, and not all <LV,T> sequences
  148|       |   * compose.
  149|       |   *
  150|       |   * Here are the specifics:
  151|       |   *
  152|       |   *   - <L>: U+1100..115F, U+A960..A97F
  153|       |   *   - <V>: U+1160..11A7, U+D7B0..D7C7
  154|       |   *   - <T>: U+11A8..11FF, U+D7CB..D7FB
  155|       |   *
  156|       |   *   - Only the <L,V> sequences for some of the U+11xx ranges combine.
  157|       |   *   - Only <LV,T> sequences for some of the Ts in U+11xx range combine.
  158|       |   *
  159|       |   * Here is what we want to accomplish in this shaper:
  160|       |   *
  161|       |   *   - If the whole syllable can be precomposed, do that,
  162|       |   *   - Otherwise, fully decompose and apply ljmo/vjmo/tjmo features.
  163|       |   *   - If a valid syllable is followed by a Hangul tone mark, reorder the tone
  164|       |   *     mark to precede the whole syllable - unless it is a zero-width glyph, in
  165|       |   *     which case we leave it untouched, assuming it's designed to overstrike.
  166|       |   *
  167|       |   * That is, of the different possible syllables:
  168|       |   *
  169|       |   *   <L>
  170|       |   *   <L,V>
  171|       |   *   <L,V,T>
  172|       |   *   <LV>
  173|       |   *   <LVT>
  174|       |   *   <LV, T>
  175|       |   *
  176|       |   * - <L> needs no work.
  177|       |   *
  178|       |   * - <LV> and <LVT> can stay the way they are if the font supports them, otherwise we
  179|       |   *   should fully decompose them if font supports.
  180|       |   *
  181|       |   * - <L,V> and <L,V,T> we should compose if the whole thing can be composed.
  182|       |   *
  183|       |   * - <LV,T> we should compose if the whole thing can be composed, otherwise we should
  184|       |   *   decompose.
  185|       |   */
  186|       |
  187|    561|  buffer->clear_output ();
  188|    561|  unsigned int start = 0, end = 0; /* Extent of most recently seen syllable;
  189|       |				    * valid only if start < end
  190|       |				    */
  191|    561|  unsigned int count = buffer->len;
  192|       |
  193|  9.36k|  for (buffer->idx = 0; buffer->idx < count && buffer->successful;)
  ------------------
  |  Branch (193:25): [True: 8.80k, False: 557]
  |  Branch (193:48): [True: 8.80k, False: 2]
  ------------------
  194|  8.80k|  {
  195|  8.80k|    hb_codepoint_t u = buffer->cur().codepoint;
  196|       |
  197|  8.80k|    if (isHangulTone (u))
  ------------------
  |  |  119|  8.80k|#define isHangulTone(u) (hb_in_range<hb_codepoint_t> ((u), 0x302Eu, 0x302Fu))
  |  |  ------------------
  |  |  |  Branch (119:25): [True: 138, False: 8.66k]
  |  |  ------------------
  ------------------
  198|    138|    {
  199|       |      /*
  200|       |       * We could cache the width of the tone marks and the existence of dotted-circle,
  201|       |       * but the use of the Hangul tone mark characters seems to be rare enough that
  202|       |       * I didn't bother for now.
  203|       |       */
  204|    138|      if (start < end && end == buffer->out_len)
  ------------------
  |  Branch (204:11): [True: 40, False: 98]
  |  Branch (204:26): [True: 40, False: 0]
  ------------------
  205|     40|      {
  206|       |	/* Tone mark follows a valid syllable; move it in front, unless it's zero width. */
  207|     40|	buffer->unsafe_to_break_from_outbuffer (start, buffer->idx);
  208|     40|	if (unlikely (!buffer->next_glyph ())) break;
  ------------------
  |  |  259|     40|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 39]
  |  |  ------------------
  ------------------
  209|     39|	if (!is_zero_width_char (font, u))
  ------------------
  |  Branch (209:6): [True: 36, False: 3]
  ------------------
  210|     36|	{
  211|     36|	  buffer->merge_out_clusters (start, end + 1);
  212|     36|	  hb_glyph_info_t *info = buffer->out_info;
  213|     36|	  hb_glyph_info_t tone = info[end];
  214|     36|	  memmove (&info[start + 1], &info[start], (end - start) * sizeof (hb_glyph_info_t));
  215|     36|	  info[start] = tone;
  216|     36|	}
  217|     39|      }
  218|     98|      else
  219|     98|      {
  220|       |	/* No valid syllable as base for tone mark; try to insert dotted circle. */
  221|     98|	if (!(buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE) &&
  ------------------
  |  Branch (221:6): [True: 98, False: 0]
  ------------------
  222|     98|	    font->has_glyph (0x25CCu))
  ------------------
  |  Branch (222:6): [True: 56, False: 42]
  ------------------
  223|     56|	{
  224|     56|	  hb_codepoint_t chars[2];
  225|     56|	  if (!is_zero_width_char (font, u))
  ------------------
  |  Branch (225:8): [True: 46, False: 10]
  ------------------
  226|     46|	  {
  227|     46|	    chars[0] = u;
  228|     46|	    chars[1] = 0x25CCu;
  229|     46|	  } else
  230|     10|	  {
  231|     10|	    chars[0] = 0x25CCu;
  232|     10|	    chars[1] = u;
  233|     10|	  }
  234|     56|	  (void) buffer->replace_glyphs (1, 2, chars);
  235|     56|	}
  236|     42|	else
  237|     42|	{
  238|       |	  /* No dotted circle available in the font; just leave tone mark untouched. */
  239|     42|	  (void) buffer->next_glyph ();
  240|     42|	}
  241|     98|      }
  242|    137|      start = end = buffer->out_len;
  243|    137|      continue;
  244|    138|    }
  245|       |
  246|  8.66k|    start = buffer->out_len; /* Remember current position as a potential syllable start;
  247|       |			      * will only be used if we set end to a later position.
  248|       |			      */
  249|       |
  250|  8.66k|    if (isL (u) && buffer->idx + 1 < count)
  ------------------
  |  |  115|  17.3k|#define isL(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1100u, 0x115Fu, 0xA960u, 0xA97Cu))
  |  |  ------------------
  |  |  |  Branch (115:16): [True: 264, False: 8.40k]
  |  |  ------------------
  ------------------
  |  Branch (250:20): [True: 261, False: 3]
  ------------------
  251|    261|    {
  252|    261|      hb_codepoint_t l = u;
  253|    261|      hb_codepoint_t v = buffer->cur(+1).codepoint;
  254|    261|      if (isV (v))
  ------------------
  |  |  116|    261|#define isV(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1160u, 0x11A7u, 0xD7B0u, 0xD7C6u))
  |  |  ------------------
  |  |  |  Branch (116:16): [True: 113, False: 148]
  |  |  ------------------
  ------------------
  255|    113|      {
  256|       |	/* Have <L,V> or <L,V,T>. */
  257|    113|	hb_codepoint_t t = 0;
  258|    113|	unsigned int tindex = 0;
  259|    113|	if (buffer->idx + 2 < count)
  ------------------
  |  Branch (259:6): [True: 111, False: 2]
  ------------------
  260|    111|	{
  261|    111|	  t = buffer->cur(+2).codepoint;
  262|    111|	  if (isT (t))
  ------------------
  |  |  117|    111|#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 27, False: 84]
  |  |  ------------------
  ------------------
  263|     27|	    tindex = t - TBase; /* Only used if isCombiningT (t); otherwise invalid. */
  ------------------
  |  |  102|     27|#define TBase 0x11A7u
  ------------------
  264|     84|	  else
  265|     84|	    t = 0; /* The next character was not a trailing jamo. */
  266|    111|	}
  267|    113|	buffer->unsafe_to_break (buffer->idx, buffer->idx + (t ? 3 : 2));
  ------------------
  |  Branch (267:55): [True: 27, False: 86]
  ------------------
  268|       |
  269|       |	/* We've got a syllable <L,V,T?>; see if it can potentially be composed. */
  270|    113|	if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
  ------------------
  |  |  110|    226|#define isCombiningL(u) (hb_in_range<hb_codepoint_t> ((u), LBase, LBase+LCount-1))
  |  |  ------------------
  |  |  |  |  100|    113|#define LBase 0x1100u
  |  |  ------------------
  |  |               #define isCombiningL(u) (hb_in_range<hb_codepoint_t> ((u), LBase, LBase+LCount-1))
  |  |  ------------------
  |  |  |  |  100|    113|#define LBase 0x1100u
  |  |  ------------------
  |  |               #define isCombiningL(u) (hb_in_range<hb_codepoint_t> ((u), LBase, LBase+LCount-1))
  |  |  ------------------
  |  |  |  |  103|    113|#define LCount 19u
  |  |  ------------------
  |  |  |  Branch (110:25): [True: 62, False: 51]
  |  |  ------------------
  ------------------
              	if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
  ------------------
  |  |  111|    175|#define isCombiningV(u) (hb_in_range<hb_codepoint_t> ((u), VBase, VBase+VCount-1))
  |  |  ------------------
  |  |  |  |  101|     62|#define VBase 0x1161u
  |  |  ------------------
  |  |               #define isCombiningV(u) (hb_in_range<hb_codepoint_t> ((u), VBase, VBase+VCount-1))
  |  |  ------------------
  |  |  |  |  101|     62|#define VBase 0x1161u
  |  |  ------------------
  |  |               #define isCombiningV(u) (hb_in_range<hb_codepoint_t> ((u), VBase, VBase+VCount-1))
  |  |  ------------------
  |  |  |  |  104|     62|#define VCount 21u
  |  |  ------------------
  |  |  |  Branch (111:25): [True: 30, False: 32]
  |  |  ------------------
  ------------------
              	if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
  ------------------
  |  |  112|      5|#define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  102|      5|#define TBase 0x11A7u
  |  |  ------------------
  |  |               #define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  102|      5|#define TBase 0x11A7u
  |  |  ------------------
  |  |               #define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  105|      5|#define TCount 28u
  |  |  ------------------
  |  |  |  Branch (112:25): [True: 1, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (270:47): [True: 25, False: 5]
  ------------------
  271|     26|	{
  272|       |	  /* Try to compose; if this succeeds, end is set to start+1. */
  273|     26|	  hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
  ------------------
  |  |  106|     26|#define SBase 0xAC00u
  ------------------
              	  hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
  ------------------
  |  |  100|     26|#define LBase 0x1100u
  ------------------
              	  hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
  ------------------
  |  |  107|     26|#define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  104|     26|#define VCount 21u
  |  |  ------------------
  |  |               #define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  105|     26|#define TCount 28u
  |  |  ------------------
  ------------------
              	  hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
  ------------------
  |  |  101|     26|#define VBase 0x1161u
  ------------------
              	  hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
  ------------------
  |  |  105|     26|#define TCount 28u
  ------------------
  274|     26|	  if (font->has_glyph (s))
  ------------------
  |  Branch (274:8): [True: 12, False: 14]
  ------------------
  275|     12|	  {
  276|     12|	    (void) buffer->replace_glyphs (t ? 3 : 2, 1, &s);
  ------------------
  |  Branch (276:37): [True: 0, False: 12]
  ------------------
  277|     12|	    end = start + 1;
  278|     12|	    continue;
  279|     12|	  }
  280|     26|	}
  281|       |
  282|       |	/* We didn't compose, either because it's an Old Hangul syllable without a
  283|       |	 * precomposed character in Unicode, or because the font didn't support the
  284|       |	 * necessary precomposed glyph.
  285|       |	 * Set jamo features on the individual glyphs, and advance past them.
  286|       |	 */
  287|    101|	buffer->cur().hangul_shaping_feature() = LJMO;
  ------------------
  |  |  122|    101|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|    101|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  288|    101|	(void) buffer->next_glyph ();
  289|    101|	buffer->cur().hangul_shaping_feature() = VJMO;
  ------------------
  |  |  122|    101|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|    101|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  290|    101|	(void) buffer->next_glyph ();
  291|    101|	if (t)
  ------------------
  |  Branch (291:6): [True: 27, False: 74]
  ------------------
  292|     27|	{
  293|     27|	  buffer->cur().hangul_shaping_feature() = TJMO;
  ------------------
  |  |  122|     27|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|     27|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  294|     27|	  (void) buffer->next_glyph ();
  295|     27|	  end = start + 3;
  296|     27|	}
  297|     74|	else
  298|     74|	  end = start + 2;
  299|    101|	if (unlikely (!buffer->successful))
  ------------------
  |  |  259|    101|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 101]
  |  |  ------------------
  ------------------
  300|      0|	  break;
  301|    101|	if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
  ------------------
  |  Branch (301:6): [True: 101, False: 0]
  ------------------
  302|    101|	  buffer->merge_out_clusters (start, end);
  303|    101|	continue;
  304|    101|      }
  305|    261|    }
  306|       |
  307|  8.40k|    else if (isCombinedS (u))
  ------------------
  |  |  113|  8.40k|#define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
  |  |  ------------------
  |  |  |  |  106|  8.40k|#define SBase 0xAC00u
  |  |  ------------------
  |  |               #define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
  |  |  ------------------
  |  |  |  |  106|  8.40k|#define SBase 0xAC00u
  |  |  ------------------
  |  |               #define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
  |  |  ------------------
  |  |  |  |  108|  8.40k|#define SCount (LCount * NCount)
  |  |  |  |  ------------------
  |  |  |  |  |  |  103|  8.40k|#define LCount 19u
  |  |  |  |  ------------------
  |  |  |  |               #define SCount (LCount * NCount)
  |  |  |  |  ------------------
  |  |  |  |  |  |  107|  8.40k|#define NCount (VCount * TCount)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  8.40k|#define VCount 21u
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define NCount (VCount * TCount)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  105|  8.40k|#define TCount 28u
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (113:24): [True: 633, False: 7.77k]
  |  |  ------------------
  ------------------
  308|    633|    {
  309|       |      /* Have <LV>, <LVT>, or <LV,T> */
  310|    633|      hb_codepoint_t s = u;
  311|    633|      bool has_glyph = font->has_glyph (s);
  312|    633|      unsigned int lindex = (s - SBase) / NCount;
  ------------------
  |  |  106|    633|#define SBase 0xAC00u
  ------------------
                    unsigned int lindex = (s - SBase) / NCount;
  ------------------
  |  |  107|    633|#define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  104|    633|#define VCount 21u
  |  |  ------------------
  |  |               #define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  105|    633|#define TCount 28u
  |  |  ------------------
  ------------------
  313|    633|      unsigned int nindex = (s - SBase) % NCount;
  ------------------
  |  |  106|    633|#define SBase 0xAC00u
  ------------------
                    unsigned int nindex = (s - SBase) % NCount;
  ------------------
  |  |  107|    633|#define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  104|    633|#define VCount 21u
  |  |  ------------------
  |  |               #define NCount (VCount * TCount)
  |  |  ------------------
  |  |  |  |  105|    633|#define TCount 28u
  |  |  ------------------
  ------------------
  314|    633|      unsigned int vindex = nindex / TCount;
  ------------------
  |  |  105|    633|#define TCount 28u
  ------------------
  315|    633|      unsigned int tindex = nindex % TCount;
  ------------------
  |  |  105|    633|#define TCount 28u
  ------------------
  316|       |
  317|    633|      if (!tindex &&
  ------------------
  |  Branch (317:11): [True: 161, False: 472]
  ------------------
  318|    633|	  buffer->idx + 1 < count &&
  ------------------
  |  Branch (318:4): [True: 156, False: 5]
  ------------------
  319|    633|	  isCombiningT (buffer->cur(+1).codepoint))
  ------------------
  |  |  112|    156|#define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  102|    156|#define TBase 0x11A7u
  |  |  ------------------
  |  |               #define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  102|    156|#define TBase 0x11A7u
  |  |  ------------------
  |  |               #define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
  |  |  ------------------
  |  |  |  |  105|    156|#define TCount 28u
  |  |  ------------------
  |  |  |  Branch (112:25): [True: 26, False: 130]
  |  |  ------------------
  ------------------
  320|     26|      {
  321|       |	/* <LV,T>, try to combine. */
  322|     26|	unsigned int new_tindex = buffer->cur(+1).codepoint - TBase;
  ------------------
  |  |  102|     26|#define TBase 0x11A7u
  ------------------
  323|     26|	hb_codepoint_t new_s = s + new_tindex;
  324|     26|	if (font->has_glyph (new_s))
  ------------------
  |  Branch (324:6): [True: 11, False: 15]
  ------------------
  325|     11|	{
  326|     11|	  (void) buffer->replace_glyphs (2, 1, &new_s);
  327|     11|	  end = start + 1;
  328|     11|	  continue;
  329|     11|	}
  330|     15|	else
  331|     15|	  buffer->unsafe_to_break (buffer->idx, buffer->idx + 2); /* Mark unsafe between LV and T. */
  332|     26|      }
  333|       |
  334|       |      /* Otherwise, decompose if font doesn't support <LV> or <LVT>,
  335|       |       * or if having non-combining <LV,T>.  Note that we already handled
  336|       |       * combining <LV,T> above. */
  337|    622|      if (!has_glyph ||
  ------------------
  |  Branch (337:11): [True: 537, False: 85]
  ------------------
  338|    622|	  (!tindex &&
  ------------------
  |  Branch (338:5): [True: 36, False: 49]
  ------------------
  339|     85|	   buffer->idx + 1 < count &&
  ------------------
  |  Branch (339:5): [True: 35, False: 1]
  ------------------
  340|     85|	   isT (buffer->cur(+1).codepoint)))
  ------------------
  |  |  117|     35|#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 15, False: 20]
  |  |  ------------------
  ------------------
  341|    552|      {
  342|    552|	hb_codepoint_t decomposed[3] = {LBase + lindex,
  ------------------
  |  |  100|    552|#define LBase 0x1100u
  ------------------
  343|    552|					VBase + vindex,
  ------------------
  |  |  101|    552|#define VBase 0x1161u
  ------------------
  344|    552|					TBase + tindex};
  ------------------
  |  |  102|    552|#define TBase 0x11A7u
  ------------------
  345|    552|	if (font->has_glyph (decomposed[0]) &&
  ------------------
  |  Branch (345:6): [True: 169, False: 383]
  ------------------
  346|    552|	    font->has_glyph (decomposed[1]) &&
  ------------------
  |  Branch (346:6): [True: 148, False: 21]
  ------------------
  347|    552|	    (!tindex || font->has_glyph (decomposed[2])))
  ------------------
  |  Branch (347:7): [True: 34, False: 114]
  |  Branch (347:18): [True: 95, False: 19]
  ------------------
  348|    129|	{
  349|    129|	  unsigned int s_len = tindex ? 3 : 2;
  ------------------
  |  Branch (349:25): [True: 95, False: 34]
  ------------------
  350|    129|	  (void) buffer->replace_glyphs (1, s_len, decomposed);
  351|       |
  352|       |	  /* If we decomposed an LV because of a non-combining T following,
  353|       |	   * we want to include this T in the syllable.
  354|       |	   */
  355|    129|	  if (has_glyph && !tindex)
  ------------------
  |  Branch (355:8): [True: 15, False: 114]
  |  Branch (355:21): [True: 15, False: 0]
  ------------------
  356|     15|	  {
  357|     15|	    (void) buffer->next_glyph ();
  358|     15|	    s_len++;
  359|     15|	  }
  360|    129|	  if (unlikely (!buffer->successful))
  ------------------
  |  |  259|    129|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 128]
  |  |  ------------------
  ------------------
  361|      1|	    break;
  362|       |
  363|       |	  /* We decomposed S: apply jamo features to the individual glyphs
  364|       |	   * that are now in buffer->out_info.
  365|       |	   */
  366|    128|	  hb_glyph_info_t *info = buffer->out_info;
  367|    128|	  end = start + s_len;
  368|       |
  369|    128|	  unsigned int i = start;
  370|    128|	  info[i++].hangul_shaping_feature() = LJMO;
  ------------------
  |  |  122|    128|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|    128|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  371|    128|	  info[i++].hangul_shaping_feature() = VJMO;
  ------------------
  |  |  122|    128|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|    128|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  372|    128|	  if (i < end)
  ------------------
  |  Branch (372:8): [True: 109, False: 19]
  ------------------
  373|    109|	    info[i++].hangul_shaping_feature() = TJMO;
  ------------------
  |  |  122|    109|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|    109|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  374|       |
  375|    128|	  if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
  ------------------
  |  Branch (375:8): [True: 128, False: 0]
  ------------------
  376|    128|	    buffer->merge_out_clusters (start, end);
  377|    128|	  continue;
  378|    129|	}
  379|    423|	else if ((!tindex && buffer->idx + 1 < count && isT (buffer->cur(+1).codepoint)))
  ------------------
  |  |  117|     92|#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
  |  |  ------------------
  |  |  |  Branch (117:16): [True: 16, False: 76]
  |  |  ------------------
  ------------------
  |  Branch (379:12): [True: 95, False: 328]
  |  Branch (379:23): [True: 92, False: 3]
  ------------------
  380|     16|	  buffer->unsafe_to_break (buffer->idx, buffer->idx + 2); /* Mark unsafe between LV and T. */
  381|    552|      }
  382|       |
  383|    493|      if (has_glyph)
  ------------------
  |  Branch (383:11): [True: 70, False: 423]
  ------------------
  384|     70|      {
  385|       |	/* We didn't decompose the S, so just advance past it and fall through. */
  386|     70|	end = start + 1;
  387|     70|      }
  388|    493|    }
  389|       |
  390|       |    /* Didn't find a recognizable syllable, so we leave end <= start;
  391|       |     * this will prevent tone-mark reordering happening.
  392|       |     */
  393|  8.41k|    (void) buffer->next_glyph ();
  394|  8.41k|  }
  395|    561|  buffer->sync ();
  396|    561|}
hb-ot-shaper-hangul.cc:_ZL18is_zero_width_charP9hb_font_tj:
  127|     95|{
  128|     95|  hb_codepoint_t glyph;
  129|     95|  return hb_font_get_glyph (font, unicode, 0, &glyph) && hb_font_get_glyph_h_advance (font, glyph) == 0;
  ------------------
  |  Branch (129:10): [True: 58, False: 37]
  |  Branch (129:58): [True: 13, False: 45]
  ------------------
  130|     95|}
hb-ot-shaper-hangul.cc:_ZL18setup_masks_hangulPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  402|    561|{
  403|    561|  const hangul_shape_plan_t *hangul_plan = (const hangul_shape_plan_t *) plan->data;
  404|       |
  405|    561|  if (likely (hangul_plan))
  ------------------
  |  |  258|    561|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 561, False: 0]
  |  |  ------------------
  ------------------
  406|    561|  {
  407|    561|    unsigned int count = buffer->len;
  408|    561|    hb_glyph_info_t *info = buffer->info;
  409|  9.72k|    for (unsigned int i = 0; i < count; i++, info++)
  ------------------
  |  Branch (409:30): [True: 9.16k, False: 561]
  ------------------
  410|  9.16k|      info->mask |= hangul_plan->mask_array[info->hangul_shaping_feature()];
  ------------------
  |  |  122|  9.16k|#define hangul_shaping_feature() ot_shaper_var_u8_auxiliary() /* hangul jamo shaping feature */
  |  |  ------------------
  |  |  |  |   39|  9.16k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  411|    561|  }
  412|       |
  413|    561|  HB_BUFFER_DEALLOCATE_VAR (buffer, hangul_shaping_feature);
  ------------------
  |  |  671|    561|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|    561|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    561|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  414|    561|}

hb-ot-shaper-hebrew.cc:_ZL14compose_hebrewPK31hb_ot_shape_normalize_context_tjjPj:
   39|  1.79k|{
   40|       |  /* Hebrew presentation-form shaping.
   41|       |   * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
   42|       |   * Hebrew presentation forms with dagesh, for characters U+05D0..05EA;
   43|       |   * Note that some letters do not have a dagesh presForm encoded.
   44|       |   */
   45|  1.79k|  static const hb_codepoint_t sDageshForms[0x05EAu - 0x05D0u + 1] = {
   46|  1.79k|    0xFB30u, /* ALEF */
   47|  1.79k|    0xFB31u, /* BET */
   48|  1.79k|    0xFB32u, /* GIMEL */
   49|  1.79k|    0xFB33u, /* DALET */
   50|  1.79k|    0xFB34u, /* HE */
   51|  1.79k|    0xFB35u, /* VAV */
   52|  1.79k|    0xFB36u, /* ZAYIN */
   53|  1.79k|    0x0000u, /* HET */
   54|  1.79k|    0xFB38u, /* TET */
   55|  1.79k|    0xFB39u, /* YOD */
   56|  1.79k|    0xFB3Au, /* FINAL KAF */
   57|  1.79k|    0xFB3Bu, /* KAF */
   58|  1.79k|    0xFB3Cu, /* LAMED */
   59|  1.79k|    0x0000u, /* FINAL MEM */
   60|  1.79k|    0xFB3Eu, /* MEM */
   61|  1.79k|    0x0000u, /* FINAL NUN */
   62|  1.79k|    0xFB40u, /* NUN */
   63|  1.79k|    0xFB41u, /* SAMEKH */
   64|  1.79k|    0x0000u, /* AYIN */
   65|  1.79k|    0xFB43u, /* FINAL PE */
   66|  1.79k|    0xFB44u, /* PE */
   67|  1.79k|    0x0000u, /* FINAL TSADI */
   68|  1.79k|    0xFB46u, /* TSADI */
   69|  1.79k|    0xFB47u, /* QOF */
   70|  1.79k|    0xFB48u, /* RESH */
   71|  1.79k|    0xFB49u, /* SHIN */
   72|  1.79k|    0xFB4Au /* TAV */
   73|  1.79k|  };
   74|       |
   75|  1.79k|  bool found = (bool) c->unicode->compose (a, b, ab);
   76|       |
   77|       |#ifdef HB_NO_OT_SHAPER_HEBREW_FALLBACK
   78|       |  return found;
   79|       |#endif
   80|       |
   81|  1.79k|  if (!found && !c->plan->has_gpos_mark)
  ------------------
  |  Branch (81:7): [True: 1.73k, False: 66]
  |  Branch (81:17): [True: 1.72k, False: 10]
  ------------------
   82|  1.72k|  {
   83|       |      /* Special-case Hebrew presentation forms that are excluded from
   84|       |       * standard normalization, but wanted for old fonts. */
   85|  1.72k|      switch (b) {
  ------------------
  |  Branch (85:15): [True: 516, False: 1.20k]
  ------------------
   86|     32|      case 0x05B4u: /* HIRIQ */
  ------------------
  |  Branch (86:7): [True: 32, False: 1.69k]
  ------------------
   87|     32|	  if (a == 0x05D9u) { /* YOD */
  ------------------
  |  Branch (87:8): [True: 10, False: 22]
  ------------------
   88|     10|	      *ab = 0xFB1Du;
   89|     10|	      found = true;
   90|     10|	  }
   91|     32|	  break;
   92|     59|      case 0x05B7u: /* PATAH */
  ------------------
  |  Branch (92:7): [True: 59, False: 1.66k]
  ------------------
   93|     59|	  if (a == 0x05F2u) { /* YIDDISH YOD YOD */
  ------------------
  |  Branch (93:8): [True: 10, False: 49]
  ------------------
   94|     10|	      *ab = 0xFB1Fu;
   95|     10|	      found = true;
   96|     49|	  } else if (a == 0x05D0u) { /* ALEF */
  ------------------
  |  Branch (96:15): [True: 10, False: 39]
  ------------------
   97|     10|	      *ab = 0xFB2Eu;
   98|     10|	      found = true;
   99|     10|	  }
  100|     59|	  break;
  101|     40|      case 0x05B8u: /* QAMATS */
  ------------------
  |  Branch (101:7): [True: 40, False: 1.68k]
  ------------------
  102|     40|	  if (a == 0x05D0u) { /* ALEF */
  ------------------
  |  Branch (102:8): [True: 10, False: 30]
  ------------------
  103|     10|	      *ab = 0xFB2Fu;
  104|     10|	      found = true;
  105|     10|	  }
  106|     40|	  break;
  107|     35|      case 0x05B9u: /* HOLAM */
  ------------------
  |  Branch (107:7): [True: 35, False: 1.68k]
  ------------------
  108|     35|	  if (a == 0x05D5u) { /* VAV */
  ------------------
  |  Branch (108:8): [True: 16, False: 19]
  ------------------
  109|     16|	      *ab = 0xFB4Bu;
  110|     16|	      found = true;
  111|     16|	  }
  112|     35|	  break;
  113|    780|      case 0x05BCu: /* DAGESH */
  ------------------
  |  Branch (113:7): [True: 780, False: 942]
  ------------------
  114|    780|	  if (a >= 0x05D0u && a <= 0x05EAu) {
  ------------------
  |  Branch (114:8): [True: 653, False: 127]
  |  Branch (114:24): [True: 17, False: 636]
  ------------------
  115|     17|	      *ab = sDageshForms[a - 0x05D0u];
  116|     17|	      found = (*ab != 0);
  117|    763|	  } else if (a == 0xFB2Au) { /* SHIN WITH SHIN DOT */
  ------------------
  |  Branch (117:15): [True: 138, False: 625]
  ------------------
  118|    138|	      *ab = 0xFB2Cu;
  119|    138|	      found = true;
  120|    625|	  } else if (a == 0xFB2Bu) { /* SHIN WITH SIN DOT */
  ------------------
  |  Branch (120:15): [True: 19, False: 606]
  ------------------
  121|     19|	      *ab = 0xFB2Du;
  122|     19|	      found = true;
  123|     19|	  }
  124|    780|	  break;
  125|    125|      case 0x05BFu: /* RAFE */
  ------------------
  |  Branch (125:7): [True: 125, False: 1.59k]
  ------------------
  126|    125|	  switch (a) {
  ------------------
  |  Branch (126:12): [True: 95, False: 30]
  ------------------
  127|     10|	  case 0x05D1u: /* BET */
  ------------------
  |  Branch (127:4): [True: 10, False: 115]
  ------------------
  128|     10|	      *ab = 0xFB4Cu;
  129|     10|	      found = true;
  130|     10|	      break;
  131|     14|	  case 0x05DBu: /* KAF */
  ------------------
  |  Branch (131:4): [True: 14, False: 111]
  ------------------
  132|     14|	      *ab = 0xFB4Du;
  133|     14|	      found = true;
  134|     14|	      break;
  135|      6|	  case 0x05E4u: /* PE */
  ------------------
  |  Branch (135:4): [True: 6, False: 119]
  ------------------
  136|      6|	      *ab = 0xFB4Eu;
  137|      6|	      found = true;
  138|      6|	      break;
  139|    125|	  }
  140|    125|	  break;
  141|    125|      case 0x05C1u: /* SHIN DOT */
  ------------------
  |  Branch (141:7): [True: 91, False: 1.63k]
  ------------------
  142|     91|	  if (a == 0x05E9u) { /* SHIN */
  ------------------
  |  Branch (142:8): [True: 30, False: 61]
  ------------------
  143|     30|	      *ab = 0xFB2Au;
  144|     30|	      found = true;
  145|     61|	  } else if (a == 0xFB49u) { /* SHIN WITH DAGESH */
  ------------------
  |  Branch (145:15): [True: 20, False: 41]
  ------------------
  146|     20|	      *ab = 0xFB2Cu;
  147|     20|	      found = true;
  148|     20|	  }
  149|     91|	  break;
  150|     44|      case 0x05C2u: /* SIN DOT */
  ------------------
  |  Branch (150:7): [True: 44, False: 1.67k]
  ------------------
  151|     44|	  if (a == 0x05E9u) { /* SHIN */
  ------------------
  |  Branch (151:8): [True: 11, False: 33]
  ------------------
  152|     11|	      *ab = 0xFB2Bu;
  153|     11|	      found = true;
  154|     33|	  } else if (a == 0xFB49u) { /* SHIN WITH DAGESH */
  ------------------
  |  Branch (154:15): [True: 12, False: 21]
  ------------------
  155|     12|	      *ab = 0xFB2Du;
  156|     12|	      found = true;
  157|     12|	  }
  158|     44|	  break;
  159|  1.72k|      }
  160|  1.72k|  }
  161|       |
  162|  1.79k|  return found;
  163|  1.79k|}
hb-ot-shaper-hebrew.cc:_ZL20reorder_marks_hebrewPK18hb_ot_shape_plan_tP11hb_buffer_tjj:
  170|  1.59k|{
  171|  1.59k|  hb_glyph_info_t *info = buffer->info;
  172|       |
  173|  1.72k|  for (unsigned i = start + 2; i < end; i++)
  ------------------
  |  Branch (173:32): [True: 136, False: 1.58k]
  ------------------
  174|    136|  {
  175|    136|    unsigned c0 = info_cc (info[i - 2]);
  ------------------
  |  |  283|    136|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  176|    136|    unsigned c1 = info_cc (info[i - 1]);
  ------------------
  |  |  283|    136|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  177|    136|    unsigned c2 = info_cc (info[i - 0]);
  ------------------
  |  |  283|    136|#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
  ------------------
  178|       |
  179|    136|    if ((c0 == HB_MODIFIED_COMBINING_CLASS_CCC17 || c0 == HB_MODIFIED_COMBINING_CLASS_CCC18) /* patach or qamats */ &&
  ------------------
  |  |  289|    272|#define HB_MODIFIED_COMBINING_CLASS_CCC17 20 /* patah */
  ------------------
                  if ((c0 == HB_MODIFIED_COMBINING_CLASS_CCC17 || c0 == HB_MODIFIED_COMBINING_CLASS_CCC18) /* patach or qamats */ &&
  ------------------
  |  |  290|    114|#define HB_MODIFIED_COMBINING_CLASS_CCC18 21 /* qamats & qamats qatan */
  ------------------
  |  Branch (179:10): [True: 22, False: 114]
  |  Branch (179:53): [True: 11, False: 103]
  ------------------
  180|    136|	(c1 == HB_MODIFIED_COMBINING_CLASS_CCC10 || c1 == HB_MODIFIED_COMBINING_CLASS_CCC14) /* sheva or hiriq */ &&
  ------------------
  |  |  282|     66|#define HB_MODIFIED_COMBINING_CLASS_CCC10 22 /* sheva */
  ------------------
              	(c1 == HB_MODIFIED_COMBINING_CLASS_CCC10 || c1 == HB_MODIFIED_COMBINING_CLASS_CCC14) /* sheva or hiriq */ &&
  ------------------
  |  |  286|     30|#define HB_MODIFIED_COMBINING_CLASS_CCC14 23 /* hiriq */
  ------------------
  |  Branch (180:3): [True: 3, False: 30]
  |  Branch (180:46): [True: 9, False: 21]
  ------------------
  181|    136|	(c2 == HB_MODIFIED_COMBINING_CLASS_CCC22 || c2 == HB_UNICODE_COMBINING_CLASS_BELOW) /* meteg or below */)
  ------------------
  |  |  294|     24|#define HB_MODIFIED_COMBINING_CLASS_CCC22 25 /* meteg */
  ------------------
  |  Branch (181:3): [True: 1, False: 11]
  |  Branch (181:46): [True: 6, False: 5]
  ------------------
  182|      7|    {
  183|      7|      buffer->merge_clusters (i - 1, i + 1);
  184|      7|      hb_swap (info[i - 1], info[i]);
  185|      7|      break;
  186|      7|    }
  187|    136|  }
  188|       |
  189|       |
  190|  1.59k|}

_Z20find_syllables_indicP11hb_buffer_t:
  458|  2.61k|{
  459|  2.61k|  unsigned int p, pe, eof, ts, te, act;
  460|  2.61k|  int cs;
  461|  2.61k|  hb_glyph_info_t *info = buffer->info;
  462|       |  
  463|  2.61k|#line 453 "hb-ot-shaper-indic-machine.hh"
  464|  2.61k|	{
  465|  2.61k|	cs = indic_syllable_machine_start;
  466|  2.61k|	ts = 0;
  467|  2.61k|	te = 0;
  468|  2.61k|	act = 0;
  469|  2.61k|	}
  470|       |
  471|  2.61k|#line 138 "hb-ot-shaper-indic-machine.rl"
  472|       |
  473|       |
  474|  2.61k|  p = 0;
  475|  2.61k|  pe = eof = buffer->len;
  476|       |
  477|  2.61k|  unsigned int syllable_serial = 1;
  478|       |  
  479|  2.61k|#line 465 "hb-ot-shaper-indic-machine.hh"
  480|  2.61k|	{
  481|  2.61k|	int _slen;
  482|  2.61k|	int _trans;
  483|  2.61k|	const unsigned char *_keys;
  484|  2.61k|	const unsigned char *_inds;
  485|  2.61k|	if ( p == pe )
  ------------------
  |  Branch (485:7): [True: 3, False: 2.61k]
  ------------------
  486|      3|		goto _test_eof;
  487|  14.1M|_resume:
  488|  14.1M|	switch ( _indic_syllable_machine_from_state_actions[cs] ) {
  ------------------
  |  Branch (488:11): [True: 11.6M, False: 2.47M]
  ------------------
  489|  2.47M|	case 10:
  ------------------
  |  Branch (489:2): [True: 2.47M, False: 11.6M]
  ------------------
  490|  2.47M|#line 1 "NONE"
  491|  2.47M|	{ts = p;}
  492|  2.47M|	break;
  493|  14.1M|#line 477 "hb-ot-shaper-indic-machine.hh"
  494|  14.1M|	}
  495|       |
  496|  14.1M|	_keys = _indic_syllable_machine_trans_keys + (cs<<1);
  497|  14.1M|	_inds = _indic_syllable_machine_indicies + _indic_syllable_machine_index_offsets[cs];
  498|       |
  499|  14.1M|	_slen = _indic_syllable_machine_key_spans[cs];
  500|  14.1M|	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].indic_category()) &&
  ------------------
  |  |   38|  14.1M|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  14.1M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (500:18): [True: 14.1M, False: 0]
  |  Branch (500:31): [True: 11.7M, False: 2.35M]
  ------------------
  501|  14.1M|		( info[p].indic_category()) <= _keys[1] ?
  ------------------
  |  |   38|  11.7M|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  11.7M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (501:3): [True: 11.7M, False: 16.7k]
  ------------------
  502|  11.7M|		( info[p].indic_category()) - _keys[0] : _slen ];
  ------------------
  |  |   38|  11.7M|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  11.7M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  503|       |
  504|  14.1M|_eof_trans:
  505|  14.1M|	cs = _indic_syllable_machine_trans_targs[_trans];
  506|       |
  507|  14.1M|	if ( _indic_syllable_machine_trans_actions[_trans] == 0 )
  ------------------
  |  Branch (507:7): [True: 11.0M, False: 3.06M]
  ------------------
  508|  11.0M|		goto _again;
  509|       |
  510|  3.06M|	switch ( _indic_syllable_machine_trans_actions[_trans] ) {
  ------------------
  |  Branch (510:11): [True: 0, False: 3.06M]
  ------------------
  511|   422k|	case 2:
  ------------------
  |  Branch (511:2): [True: 422k, False: 2.64M]
  ------------------
  512|   422k|#line 1 "NONE"
  513|   422k|	{te = p+1;}
  514|   422k|	break;
  515|  2.09M|	case 11:
  ------------------
  |  Branch (515:2): [True: 2.09M, False: 971k]
  ------------------
  516|  2.09M|#line 114 "hb-ot-shaper-indic-machine.rl"
  517|  2.09M|	{te = p+1;{ found_syllable (indic_non_indic_cluster); }}
  ------------------
  |  |  448|  2.09M|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  2.09M|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  2.09M|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  4.19M|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 2.09M, False: 2.09M]
  |  |  ------------------
  |  |  451|  2.09M|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  2.09M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  2.09M|    syllable_serial++; \
  |  |  453|  2.09M|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 139k, False: 1.95M]
  |  |  ------------------
  |  |  454|  2.09M|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  2.09M|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|  2.09M|	break;
  519|   154k|	case 13:
  ------------------
  |  Branch (519:2): [True: 154k, False: 2.91M]
  ------------------
  520|   154k|#line 109 "hb-ot-shaper-indic-machine.rl"
  521|   154k|	{te = p;p--;{ found_syllable (indic_consonant_syllable); }}
  ------------------
  |  |  448|   154k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|   154k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|   154k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|   354k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 200k, False: 154k]
  |  |  ------------------
  |  |  451|   200k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   200k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|   154k|    syllable_serial++; \
  |  |  453|   154k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 10.2k, False: 144k]
  |  |  ------------------
  |  |  454|   154k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|   154k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|   154k|	break;
  523|  76.2k|	case 14:
  ------------------
  |  Branch (523:2): [True: 76.2k, False: 2.99M]
  ------------------
  524|  76.2k|#line 110 "hb-ot-shaper-indic-machine.rl"
  525|  76.2k|	{te = p;p--;{ found_syllable (indic_vowel_syllable); }}
  ------------------
  |  |  448|  76.2k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  76.2k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  76.2k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|   193k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 116k, False: 76.2k]
  |  |  ------------------
  |  |  451|   116k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   116k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  76.2k|    syllable_serial++; \
  |  |  453|  76.2k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 5.02k, False: 71.1k]
  |  |  ------------------
  |  |  454|  76.2k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  76.2k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|  76.2k|	break;
  527|  56.7k|	case 17:
  ------------------
  |  Branch (527:2): [True: 56.7k, False: 3.01M]
  ------------------
  528|  56.7k|#line 111 "hb-ot-shaper-indic-machine.rl"
  529|  56.7k|	{te = p;p--;{ found_syllable (indic_standalone_cluster); }}
  ------------------
  |  |  448|  56.7k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  56.7k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  56.7k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|   153k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 96.8k, False: 56.7k]
  |  |  ------------------
  |  |  451|  96.8k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  96.8k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  56.7k|    syllable_serial++; \
  |  |  453|  56.7k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 3.76k, False: 52.9k]
  |  |  ------------------
  |  |  454|  56.7k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  56.7k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  530|  56.7k|	break;
  531|  3.83k|	case 19:
  ------------------
  |  Branch (531:2): [True: 3.83k, False: 3.06M]
  ------------------
  532|  3.83k|#line 112 "hb-ot-shaper-indic-machine.rl"
  533|  3.83k|	{te = p;p--;{ found_syllable (indic_symbol_cluster); }}
  ------------------
  |  |  448|  3.83k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  3.83k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  3.83k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  8.29k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 4.45k, False: 3.83k]
  |  |  ------------------
  |  |  451|  4.45k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  4.45k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  3.83k|    syllable_serial++; \
  |  |  453|  3.83k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 259, False: 3.57k]
  |  |  ------------------
  |  |  454|  3.83k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  3.83k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  534|  3.83k|	break;
  535|  42.4k|	case 15:
  ------------------
  |  Branch (535:2): [True: 42.4k, False: 3.02M]
  ------------------
  536|  42.4k|#line 113 "hb-ot-shaper-indic-machine.rl"
  537|  42.4k|	{te = p;p--;{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  448|  42.4k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  42.4k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  42.4k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|   245k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 202k, False: 42.4k]
  |  |  ------------------
  |  |  451|   202k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   202k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  42.4k|    syllable_serial++; \
  |  |  453|  42.4k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 2.70k, False: 39.7k]
  |  |  ------------------
  |  |  454|  42.4k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  42.4k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|  42.4k|	break;
  539|  7.97k|	case 16:
  ------------------
  |  Branch (539:2): [True: 7.97k, False: 3.06M]
  ------------------
  540|  7.97k|#line 114 "hb-ot-shaper-indic-machine.rl"
  541|  7.97k|	{te = p;p--;{ found_syllable (indic_non_indic_cluster); }}
  ------------------
  |  |  448|  7.97k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  7.97k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  7.97k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  15.9k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 7.97k, False: 7.97k]
  |  |  ------------------
  |  |  451|  7.97k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  7.97k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  7.97k|    syllable_serial++; \
  |  |  453|  7.97k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 530, False: 7.44k]
  |  |  ------------------
  |  |  454|  7.97k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  7.97k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  542|  7.97k|	break;
  543|     44|	case 1:
  ------------------
  |  Branch (543:2): [True: 44, False: 3.06M]
  ------------------
  544|     44|#line 109 "hb-ot-shaper-indic-machine.rl"
  545|     44|	{{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }}
  ------------------
  |  |  448|     44|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     44|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     44|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  1.78k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 1.74k, False: 44]
  |  |  ------------------
  |  |  451|  1.74k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  1.74k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     44|    syllable_serial++; \
  |  |  453|     44|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 4, False: 40]
  |  |  ------------------
  |  |  454|     44|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     44|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|     44|	break;
  547|     38|	case 3:
  ------------------
  |  Branch (547:2): [True: 38, False: 3.06M]
  ------------------
  548|     38|#line 110 "hb-ot-shaper-indic-machine.rl"
  549|     38|	{{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }}
  ------------------
  |  |  448|     38|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     38|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     38|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|    577|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 539, False: 38]
  |  |  ------------------
  |  |  451|    539|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    539|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     38|    syllable_serial++; \
  |  |  453|     38|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 4, False: 34]
  |  |  ------------------
  |  |  454|     38|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     38|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|     38|	break;
  551|     62|	case 7:
  ------------------
  |  Branch (551:2): [True: 62, False: 3.06M]
  ------------------
  552|     62|#line 111 "hb-ot-shaper-indic-machine.rl"
  553|     62|	{{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }}
  ------------------
  |  |  448|     62|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     62|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     62|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  11.8k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 11.7k, False: 62]
  |  |  ------------------
  |  |  451|  11.7k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  11.7k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     62|    syllable_serial++; \
  |  |  453|     62|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 6, False: 56]
  |  |  ------------------
  |  |  454|     62|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     62|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|     62|	break;
  555|     15|	case 8:
  ------------------
  |  Branch (555:2): [True: 15, False: 3.06M]
  ------------------
  556|     15|#line 112 "hb-ot-shaper-indic-machine.rl"
  557|     15|	{{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }}
  ------------------
  |  |  448|     15|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     15|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     15|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|     33|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 18, False: 15]
  |  |  ------------------
  |  |  451|     18|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|     18|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     15|    syllable_serial++; \
  |  |  453|     15|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 1, False: 14]
  |  |  ------------------
  |  |  454|     15|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     15|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|     15|	break;
  559|     80|	case 4:
  ------------------
  |  Branch (559:2): [True: 80, False: 3.06M]
  ------------------
  560|     80|#line 113 "hb-ot-shaper-indic-machine.rl"
  561|     80|	{{p = ((te))-1;}{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  448|     80|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     80|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     80|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  1.34k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 1.26k, False: 80]
  |  |  ------------------
  |  |  451|  1.26k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  1.26k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     80|    syllable_serial++; \
  |  |  453|     80|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 3, False: 77]
  |  |  ------------------
  |  |  454|     80|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     80|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|     80|	break;
  563|  32.5k|	case 6:
  ------------------
  |  Branch (563:2): [True: 32.5k, False: 3.03M]
  ------------------
  564|  32.5k|#line 1 "NONE"
  565|  32.5k|	{	switch( act ) {
  ------------------
  |  Branch (565:12): [True: 0, False: 32.5k]
  ------------------
  566|      1|	case 1:
  ------------------
  |  Branch (566:2): [True: 1, False: 32.5k]
  ------------------
  567|      1|	{{p = ((te))-1;} found_syllable (indic_consonant_syllable); }
  ------------------
  |  |  448|      1|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|      1|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|      1|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|      4|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 3, False: 1]
  |  |  ------------------
  |  |  451|      3|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|      3|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|      1|    syllable_serial++; \
  |  |  453|      1|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 0, False: 1]
  |  |  ------------------
  |  |  454|      1|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|      1|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      1|	break;
  569|     42|	case 5:
  ------------------
  |  Branch (569:2): [True: 42, False: 32.5k]
  ------------------
  570|     42|	{{p = ((te))-1;} found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
  ------------------
  |  |  448|     42|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     42|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|     42|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  5.81k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 5.77k, False: 42]
  |  |  ------------------
  |  |  451|  5.77k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  5.77k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|     42|    syllable_serial++; \
  |  |  453|     42|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 2, False: 40]
  |  |  ------------------
  |  |  454|     42|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     42|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|     42|	break;
  572|  32.5k|	case 6:
  ------------------
  |  Branch (572:2): [True: 32.5k, False: 43]
  ------------------
  573|  32.5k|	{{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
  ------------------
  |  |  448|  32.5k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  32.5k|#define HB_STMT_START do
  |  |  ------------------
  |  |  449|  32.5k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (449:9): [Folded - Ignored]
  |  |  ------------------
  |  |  450|  65.0k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (450:31): [True: 32.5k, False: 32.5k]
  |  |  ------------------
  |  |  451|  32.5k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  32.5k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  452|  32.5k|    syllable_serial++; \
  |  |  453|  32.5k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (453:9): [True: 2.15k, False: 30.3k]
  |  |  ------------------
  |  |  454|  32.5k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  32.5k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|  32.5k|	break;
  575|  32.5k|	}
  576|  32.5k|	}
  577|  32.5k|	break;
  578|  32.5k|	case 18:
  ------------------
  |  Branch (578:2): [True: 10, False: 3.06M]
  ------------------
  579|     10|#line 1 "NONE"
  580|     10|	{te = p+1;}
  581|     10|#line 109 "hb-ot-shaper-indic-machine.rl"
  582|     10|	{act = 1;}
  583|     10|	break;
  584|   142k|	case 5:
  ------------------
  |  Branch (584:2): [True: 142k, False: 2.92M]
  ------------------
  585|   142k|#line 1 "NONE"
  586|   142k|	{te = p+1;}
  587|   142k|#line 113 "hb-ot-shaper-indic-machine.rl"
  588|   142k|	{act = 5;}
  589|   142k|	break;
  590|  33.2k|	case 12:
  ------------------
  |  Branch (590:2): [True: 33.2k, False: 3.03M]
  ------------------
  591|  33.2k|#line 1 "NONE"
  592|  33.2k|	{te = p+1;}
  593|  33.2k|#line 114 "hb-ot-shaper-indic-machine.rl"
  594|  33.2k|	{act = 6;}
  595|  33.2k|	break;
  596|  3.06M|#line 559 "hb-ot-shaper-indic-machine.hh"
  597|  3.06M|	}
  598|       |
  599|  14.1M|_again:
  600|  14.1M|	switch ( _indic_syllable_machine_to_state_actions[cs] ) {
  ------------------
  |  Branch (600:11): [True: 11.6M, False: 2.47M]
  ------------------
  601|  2.47M|	case 9:
  ------------------
  |  Branch (601:2): [True: 2.47M, False: 11.6M]
  ------------------
  602|  2.47M|#line 1 "NONE"
  603|  2.47M|	{ts = 0;}
  604|  2.47M|	break;
  605|  14.1M|#line 566 "hb-ot-shaper-indic-machine.hh"
  606|  14.1M|	}
  607|       |
  608|  14.1M|	if ( ++p != pe )
  ------------------
  |  Branch (608:7): [True: 14.1M, False: 4.53k]
  ------------------
  609|  14.1M|		goto _resume;
  610|  4.53k|	_test_eof: {}
  611|  4.53k|	if ( p == eof )
  ------------------
  |  Branch (611:7): [True: 4.53k, False: 0]
  ------------------
  612|  4.53k|	{
  613|  4.53k|	if ( _indic_syllable_machine_eof_trans[cs] > 0 ) {
  ------------------
  |  Branch (613:7): [True: 1.92k, False: 2.61k]
  ------------------
  614|  1.92k|		_trans = _indic_syllable_machine_eof_trans[cs] - 1;
  615|  1.92k|		goto _eof_trans;
  616|  1.92k|	}
  617|  4.53k|	}
  618|       |
  619|  4.53k|	}
  620|       |
  621|  4.53k|#line 146 "hb-ot-shaper-indic-machine.rl"
  622|       |
  623|  4.53k|}

_Z23hb_indic_get_categoriesj:
  465|  54.6k|{
  466|  54.6k|  switch (u >> 12)
  467|  54.6k|  {
  468|  28.8k|    case 0x0u:
  ------------------
  |  Branch (468:5): [True: 28.8k, False: 25.8k]
  ------------------
  469|  28.8k|      if (unlikely (u == 0x00A0u)) return _(GB,C);
  ------------------
  |  |  259|  28.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 28.8k]
  |  |  ------------------
  ------------------
                    if (unlikely (u == 0x00A0u)) return _(GB,C);
  ------------------
  |  |  128|     44|#define _(S,M) INDIC_COMBINE_CATEGORIES (_OT_##S, _POS_##M)
  |  |  ------------------
  |  |  |  |  126|     44|#define INDIC_COMBINE_CATEGORIES(S,M) ((S) | ((M) << 8))
  |  |  ------------------
  ------------------
  470|  28.8k|      if (hb_in_range<hb_codepoint_t> (u, 0x0028u, 0x003Fu)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
  ------------------
  |  |  134|    155|#define indic_offset_0x0028u 0
  ------------------
  |  Branch (470:11): [True: 155, False: 28.6k]
  ------------------
  471|  28.6k|      if (hb_in_range<hb_codepoint_t> (u, 0x00B0u, 0x00D7u)) return indic_table[u - 0x00B0u + indic_offset_0x00b0u];
  ------------------
  |  |  143|     70|#define indic_offset_0x00b0u 24
  ------------------
  |  Branch (471:11): [True: 70, False: 28.5k]
  ------------------
  472|  28.5k|      if (hb_in_range<hb_codepoint_t> (u, 0x0900u, 0x0D7Fu)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
  ------------------
  |  |  154|  8.69k|#define indic_offset_0x0900u 64
  ------------------
  |  Branch (472:11): [True: 8.69k, False: 19.8k]
  ------------------
  473|  19.8k|      break;
  474|       |
  475|  19.8k|    case 0x1u:
  ------------------
  |  Branch (475:5): [True: 2.30k, False: 52.3k]
  ------------------
  476|  2.30k|      if (hb_in_range<hb_codepoint_t> (u, 0x1000u, 0x109Fu)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
  ------------------
  |  |  328|  1.25k|#define indic_offset_0x1000u 1216
  ------------------
  |  Branch (476:11): [True: 1.25k, False: 1.04k]
  ------------------
  477|  1.04k|      if (hb_in_range<hb_codepoint_t> (u, 0x1780u, 0x17EFu)) return indic_table[u - 0x1780u + indic_offset_0x1780u];
  ------------------
  |  |  354|    634|#define indic_offset_0x1780u 1376
  ------------------
  |  Branch (477:11): [True: 634, False: 413]
  ------------------
  478|    413|      if (hb_in_range<hb_codepoint_t> (u, 0x1CD0u, 0x1CFFu)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
  ------------------
  |  |  374|     80|#define indic_offset_0x1cd0u 1488
  ------------------
  |  Branch (478:11): [True: 80, False: 333]
  ------------------
  479|    333|      break;
  480|       |
  481|  3.06k|    case 0x2u:
  ------------------
  |  Branch (481:5): [True: 3.06k, False: 51.6k]
  ------------------
  482|  3.06k|      if (unlikely (u == 0x25CCu)) return _(DC,C);
  ------------------
  |  |  259|  3.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 493, False: 2.56k]
  |  |  ------------------
  ------------------
                    if (unlikely (u == 0x25CCu)) return _(DC,C);
  ------------------
  |  |  128|    493|#define _(S,M) INDIC_COMBINE_CATEGORIES (_OT_##S, _POS_##M)
  |  |  ------------------
  |  |  |  |  126|    493|#define INDIC_COMBINE_CATEGORIES(S,M) ((S) | ((M) << 8))
  |  |  ------------------
  ------------------
  483|  2.56k|      if (hb_in_range<hb_codepoint_t> (u, 0x2008u, 0x2027u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
  ------------------
  |  |  386|  2.19k|#define indic_offset_0x2008u 1536
  ------------------
  |  Branch (483:11): [True: 2.19k, False: 376]
  ------------------
  484|    376|      if (hb_in_range<hb_codepoint_t> (u, 0x2070u, 0x2087u)) return indic_table[u - 0x2070u + indic_offset_0x2070u];
  ------------------
  |  |  396|     24|#define indic_offset_0x2070u 1568
  ------------------
  |  Branch (484:11): [True: 24, False: 352]
  ------------------
  485|    352|      if (hb_in_range<hb_codepoint_t> (u, 0x25F8u, 0x25FFu)) return indic_table[u - 0x25F8u + indic_offset_0x25f8u];
  ------------------
  |  |  405|     22|#define indic_offset_0x25f8u 1592
  ------------------
  |  Branch (485:11): [True: 22, False: 330]
  ------------------
  486|    330|      break;
  487|       |
  488|    330|    case 0xAu:
  ------------------
  |  Branch (488:5): [True: 107, False: 54.5k]
  ------------------
  489|    107|      if (hb_in_range<hb_codepoint_t> (u, 0xA8E0u, 0xA8FFu)) return indic_table[u - 0xA8E0u + indic_offset_0xa8e0u];
  ------------------
  |  |  412|     15|#define indic_offset_0xa8e0u 1600
  ------------------
  |  Branch (489:11): [True: 15, False: 92]
  ------------------
  490|     92|      if (hb_in_range<hb_codepoint_t> (u, 0xA9E0u, 0xA9FFu)) return indic_table[u - 0xA9E0u + indic_offset_0xa9e0u];
  ------------------
  |  |  422|     23|#define indic_offset_0xa9e0u 1632
  ------------------
  |  Branch (490:11): [True: 23, False: 69]
  ------------------
  491|     69|      if (hb_in_range<hb_codepoint_t> (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u];
  ------------------
  |  |  432|     14|#define indic_offset_0xaa60u 1664
  ------------------
  |  Branch (491:11): [True: 14, False: 55]
  ------------------
  492|     55|      break;
  493|       |
  494|  17.4k|    case 0xFu:
  ------------------
  |  Branch (494:5): [True: 17.4k, False: 37.1k]
  ------------------
  495|  17.4k|      if (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)) return indic_table[u - 0xFE00u + indic_offset_0xfe00u];
  ------------------
  |  |  442|    264|#define indic_offset_0xfe00u 1696
  ------------------
  |  Branch (495:11): [True: 264, False: 17.2k]
  ------------------
  496|  17.2k|      break;
  497|       |
  498|  17.2k|    case 0x11u:
  ------------------
  |  Branch (498:5): [True: 115, False: 54.5k]
  ------------------
  499|    115|      if (hb_in_range<hb_codepoint_t> (u, 0x11300u, 0x11307u)) return indic_table[u - 0x11300u + indic_offset_0x11300u];
  ------------------
  |  |  450|     19|#define indic_offset_0x11300u 1712
  ------------------
  |  Branch (499:11): [True: 19, False: 96]
  ------------------
  500|     96|      if (hb_in_range<hb_codepoint_t> (u, 0x11338u, 0x1133Fu)) return indic_table[u - 0x11338u + indic_offset_0x11338u];
  ------------------
  |  |  457|     11|#define indic_offset_0x11338u 1720
  ------------------
  |  Branch (500:11): [True: 11, False: 85]
  ------------------
  501|     85|      break;
  502|       |
  503|  2.73k|    default:
  ------------------
  |  Branch (503:5): [True: 2.73k, False: 51.9k]
  ------------------
  504|  2.73k|      break;
  505|  54.6k|  }
  506|  40.6k|  return _(X,X);
  ------------------
  |  |  128|  40.6k|#define _(S,M) INDIC_COMBINE_CATEGORIES (_OT_##S, _POS_##M)
  |  |  ------------------
  |  |  |  |  126|  40.6k|#define INDIC_COMBINE_CATEGORIES(S,M) ((S) | ((M) << 8))
  |  |  ------------------
  ------------------
  507|  54.6k|}

hb-ot-shaper-indic.cc:_ZL22collect_features_indicP21hb_ot_shape_planner_t:
  241|  2.63k|{
  242|  2.63k|  hb_ot_map_builder_t *map = &plan->map;
  243|       |
  244|       |  /* Do this before any lookups have been applied. */
  245|  2.63k|  map->add_gsub_pause (setup_syllables_indic);
  246|       |
  247|  2.63k|  map->enable_feature (HB_TAG('l','o','c','l'), F_PER_SYLLABLE);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  248|       |  /* The Indic specs do not require ccmp, but we apply it here since if
  249|       |   * there is a use of it, it's typically at the beginning. */
  250|  2.63k|  map->enable_feature (HB_TAG('c','c','m','p'), F_PER_SYLLABLE);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  251|       |
  252|       |
  253|  2.63k|  unsigned int i = 0;
  254|  2.63k|  map->add_gsub_pause (initial_reordering_indic);
  255|       |
  256|  31.6k|  for (; i < INDIC_BASIC_FEATURES; i++) {
  ------------------
  |  Branch (256:10): [True: 29.0k, False: 2.63k]
  ------------------
  257|  29.0k|    map->add_feature (indic_features[i]);
  258|  29.0k|    map->add_gsub_pause (nullptr);
  259|  29.0k|  }
  260|       |
  261|  2.63k|  map->add_gsub_pause (final_reordering_indic);
  262|       |
  263|  18.4k|  for (; i < INDIC_NUM_FEATURES; i++)
  ------------------
  |  Branch (263:10): [True: 15.8k, False: 2.63k]
  ------------------
  264|  15.8k|    map->add_feature (indic_features[i]);
  265|  2.63k|}
hb-ot-shaper-indic.cc:_ZL21setup_syllables_indicPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  420|  2.61k|{
  421|  2.61k|  HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
  ------------------
  |  |  669|  2.61k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  2.61k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.61k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  422|  2.61k|  find_syllables_indic (buffer);
  423|  2.61k|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  2.61k|  for (unsigned int \
  |  |  153|  2.61k|       _count = buffer->len, \
  |  |  154|  2.61k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 2.61k, False: 3]
  |  |  ------------------
  |  |  155|  2.47M|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 2.47M, False: 2.61k]
  |  |  ------------------
  |  |  156|  2.47M|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  424|  2.47M|    buffer->unsafe_to_break (start, end);
  425|  2.61k|  return false;
  426|  2.61k|}
hb-ot-shaper-indic.cc:_ZL24initial_reordering_indicPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  990|  2.61k|{
  991|  2.61k|  bool ret = false;
  992|  2.61k|  if (!buffer->message (font, "start reordering indic initial"))
  ------------------
  |  Branch (992:7): [True: 0, False: 2.61k]
  ------------------
  993|      0|    return ret;
  994|       |
  995|  2.61k|  update_consonant_positions_indic (plan, font, buffer);
  996|  2.61k|  if (hb_syllabic_insert_dotted_circles (font, buffer,
  ------------------
  |  Branch (996:7): [True: 102, False: 2.51k]
  ------------------
  997|  2.61k|					 indic_broken_cluster,
  998|  2.61k|					 I_Cat(DOTTEDCIRCLE),
  ------------------
  |  |   44|  2.61k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  999|  2.61k|					 I_Cat(Repha),
  ------------------
  |  |   44|  2.61k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
 1000|  2.61k|					 POS_END))
 1001|    102|    ret = true;
 1002|       |
 1003|  2.61k|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  2.61k|  for (unsigned int \
  |  |  153|  2.61k|       _count = buffer->len, \
  |  |  154|  2.61k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 2.61k, False: 3]
  |  |  ------------------
  |  |  155|  2.47M|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 2.46M, False: 2.61k]
  |  |  ------------------
  |  |  156|  2.46M|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
 1004|  2.46M|    initial_reordering_syllable_indic (plan, font->face, buffer, start, end);
 1005|       |
 1006|  2.61k|  (void) buffer->message (font, "end reordering indic initial");
 1007|       |
 1008|  2.61k|  return ret;
 1009|  2.61k|}
hb-ot-shaper-indic.cc:_ZL32update_consonant_positions_indicPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  443|  2.61k|{
  444|  2.61k|  const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
  445|       |
  446|  2.61k|  hb_codepoint_t virama;
  447|  2.61k|  if (indic_plan->load_virama_glyph (font, &virama))
  ------------------
  |  Branch (447:7): [True: 178, False: 2.43k]
  ------------------
  448|    178|  {
  449|    178|    hb_face_t *face = font->face;
  450|    178|    unsigned int count = buffer->len;
  451|    178|    hb_glyph_info_t *info = buffer->info;
  452|   169k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (452:30): [True: 169k, False: 178]
  ------------------
  453|   169k|      if (info[i].indic_position() == POS_BASE_C)
  ------------------
  |  |   39|   169k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   169k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (453:11): [True: 52.3k, False: 117k]
  ------------------
  454|  52.3k|      {
  455|  52.3k|	hb_codepoint_t consonant = info[i].codepoint;
  456|  52.3k|	info[i].indic_position() = consonant_position_from_face (indic_plan, consonant, virama, face);
  ------------------
  |  |   39|  52.3k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  52.3k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  457|  52.3k|      }
  458|    178|  }
  459|  2.61k|}
_ZNK18indic_shape_plan_t17load_virama_glyphEP9hb_font_tPj:
  278|  2.61k|  {
  279|  2.61k|    hb_codepoint_t glyph = virama_glyph;
  280|  2.61k|    if (unlikely (glyph == (hb_codepoint_t) -1))
  ------------------
  |  |  259|  2.61k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.61k, False: 0]
  |  |  ------------------
  ------------------
  281|  2.61k|    {
  282|  2.61k|      if (!config->virama || !font->get_nominal_glyph (config->virama, &glyph))
  ------------------
  |  Branch (282:11): [True: 0, False: 2.61k]
  |  Branch (282:30): [True: 2.43k, False: 178]
  ------------------
  283|  2.43k|	glyph = 0;
  284|       |      /* Technically speaking, the spec says we should apply 'locl' to virama too.
  285|       |       * Maybe one day... */
  286|       |
  287|       |      /* Our get_nominal_glyph() function needs a font, so we can't get the virama glyph
  288|       |       * during shape planning...  Instead, overwrite it here. */
  289|  2.61k|      virama_glyph = (int) glyph;
  290|  2.61k|    }
  291|       |
  292|  2.61k|    *pglyph = glyph;
  293|  2.61k|    return glyph != 0;
  294|  2.61k|  }
hb-ot-shaper-indic.cc:_ZL28consonant_position_from_facePK18indic_shape_plan_tjjP9hb_face_t:
  369|  52.3k|{
  370|       |  /* For old-spec, the order of glyphs is Consonant,Virama,
  371|       |   * whereas for new-spec, it's Virama,Consonant.  However,
  372|       |   * some broken fonts (like Free Sans) simply copied lookups
  373|       |   * from old-spec to new-spec without modification.
  374|       |   * And oddly enough, Uniscribe seems to respect those lookups.
  375|       |   * Eg. in the sequence U+0924,U+094D,U+0930, Uniscribe finds
  376|       |   * base at 0.  The font however, only has lookups matching
  377|       |   * 930,94D in 'blwf', not the expected 94D,930 (with new-spec
  378|       |   * table).  As such, we simply match both sequences.  Seems
  379|       |   * to work.
  380|       |   *
  381|       |   * Vatu is done as well, for:
  382|       |   * https://github.com/harfbuzz/harfbuzz/issues/1587
  383|       |   */
  384|  52.3k|  hb_codepoint_t glyphs[3] = {virama, consonant, virama};
  385|  52.3k|  if (indic_plan->blwf.would_substitute (glyphs  , 2, face) ||
  ------------------
  |  Branch (385:7): [True: 0, False: 52.3k]
  ------------------
  386|  52.3k|      indic_plan->blwf.would_substitute (glyphs+1, 2, face) ||
  ------------------
  |  Branch (386:7): [True: 0, False: 52.3k]
  ------------------
  387|  52.3k|      indic_plan->vatu.would_substitute (glyphs  , 2, face) ||
  ------------------
  |  Branch (387:7): [True: 0, False: 52.3k]
  ------------------
  388|  52.3k|      indic_plan->vatu.would_substitute (glyphs+1, 2, face))
  ------------------
  |  Branch (388:7): [True: 0, False: 52.3k]
  ------------------
  389|      0|    return POS_BELOW_C;
  390|  52.3k|  if (indic_plan->pstf.would_substitute (glyphs  , 2, face) ||
  ------------------
  |  Branch (390:7): [True: 1.08k, False: 51.2k]
  ------------------
  391|  52.3k|      indic_plan->pstf.would_substitute (glyphs+1, 2, face))
  ------------------
  |  Branch (391:7): [True: 4.27k, False: 47.0k]
  ------------------
  392|  5.35k|    return POS_POST_C;
  393|  47.0k|  if (indic_plan->pref.would_substitute (glyphs  , 2, face) ||
  ------------------
  |  Branch (393:7): [True: 30.6k, False: 16.3k]
  ------------------
  394|  47.0k|      indic_plan->pref.would_substitute (glyphs+1, 2, face))
  ------------------
  |  Branch (394:7): [True: 3.90k, False: 12.4k]
  ------------------
  395|  34.5k|    return POS_POST_C;
  396|  12.4k|  return POS_BASE_C;
  397|  47.0k|}
_ZNK35hb_indic_would_substitute_feature_t16would_substituteEPKjjP9hb_face_t:
  102|   470k|  {
  103|   470k|    for (const auto &lookup : lookups)
  ------------------
  |  Branch (103:29): [True: 1.72M, False: 429k]
  ------------------
  104|  1.72M|      if (hb_ot_layout_lookup_would_substitute (face, lookup.index, glyphs, glyphs_count, zero_context))
  ------------------
  |  Branch (104:11): [True: 40.7k, False: 1.68M]
  ------------------
  105|  40.7k|	return true;
  106|   429k|    return false;
  107|   470k|  }
hb-ot-shaper-indic.cc:_ZL33initial_reordering_syllable_indicPK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  966|  2.46M|{
  967|  2.46M|  indic_syllable_type_t syllable_type = (indic_syllable_type_t) (buffer->info[start].syllable() & 0x0F);
  ------------------
  |  |  147|  2.46M|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  968|  2.46M|  switch (syllable_type)
  ------------------
  |  Branch (968:11): [True: 0, False: 2.46M]
  ------------------
  969|  2.46M|  {
  970|  76.2k|    case indic_vowel_syllable: /* We made the vowels look like consonants.  So let's call the consonant logic! */
  ------------------
  |  Branch (970:5): [True: 76.2k, False: 2.39M]
  ------------------
  971|   230k|    case indic_consonant_syllable:
  ------------------
  |  Branch (971:5): [True: 153k, False: 2.31M]
  ------------------
  972|   230k|     initial_reordering_consonant_syllable (plan, face, buffer, start, end);
  973|   230k|     break;
  974|       |
  975|  42.2k|    case indic_broken_cluster: /* We already inserted dotted-circles, so just call the standalone_cluster. */
  ------------------
  |  Branch (975:5): [True: 42.2k, False: 2.42M]
  ------------------
  976|  98.9k|    case indic_standalone_cluster:
  ------------------
  |  Branch (976:5): [True: 56.7k, False: 2.41M]
  ------------------
  977|  98.9k|     initial_reordering_standalone_cluster (plan, face, buffer, start, end);
  978|  98.9k|     break;
  979|       |
  980|  3.85k|    case indic_symbol_cluster:
  ------------------
  |  Branch (980:5): [True: 3.85k, False: 2.46M]
  ------------------
  981|  2.13M|    case indic_non_indic_cluster:
  ------------------
  |  Branch (981:5): [True: 2.13M, False: 332k]
  ------------------
  982|  2.13M|      break;
  983|  2.46M|  }
  984|  2.46M|}
hb-ot-shaper-indic.cc:_ZL37initial_reordering_consonant_syllablePK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  470|   329k|{
  471|   329k|  const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
  472|   329k|  hb_glyph_info_t *info = buffer->info;
  473|       |
  474|       |  /* https://github.com/harfbuzz/harfbuzz/issues/435#issuecomment-335560167
  475|       |   * // For compatibility with legacy usage in Kannada,
  476|       |   * // Ra+h+ZWJ must behave like Ra+ZWJ+h...
  477|       |   */
  478|   329k|  if (buffer->props.script == HB_SCRIPT_KANNADA &&
  ------------------
  |  Branch (478:7): [True: 17.5k, False: 311k]
  ------------------
  479|   329k|      start + 3 <= end &&
  ------------------
  |  Branch (479:7): [True: 5.34k, False: 12.2k]
  ------------------
  480|   329k|      is_one_of (info[start  ], FLAG (I_Cat(Ra))) &&
  ------------------
  |  |   73|  5.34k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  5.34k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (480:7): [True: 1.03k, False: 4.31k]
  ------------------
  481|   329k|      is_one_of (info[start+1], FLAG (I_Cat(H))) &&
  ------------------
  |  |   73|  1.03k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  1.03k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (481:7): [True: 53, False: 979]
  ------------------
  482|   329k|      is_one_of (info[start+2], FLAG (I_Cat(ZWJ))))
  ------------------
  |  |   73|     53|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     53|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (482:7): [True: 3, False: 50]
  ------------------
  483|      3|  {
  484|      3|    buffer->merge_clusters (start+1, start+3);
  485|      3|    hb_swap (info[start+1], info[start+2]);
  486|      3|  }
  487|       |
  488|       |  /* 1. Find base consonant:
  489|       |   *
  490|       |   * The shaping engine finds the base consonant of the syllable, using the
  491|       |   * following algorithm: starting from the end of the syllable, move backwards
  492|       |   * until a consonant is found that does not have a below-base or post-base
  493|       |   * form (post-base forms have to follow below-base forms), or that is not a
  494|       |   * pre-base-reordering Ra, or arrive at the first consonant. The consonant
  495|       |   * stopped at will be the base.
  496|       |   *
  497|       |   *   o If the syllable starts with Ra + Halant (in a script that has Reph)
  498|       |   *     and has more than one consonant, Ra is excluded from candidates for
  499|       |   *     base consonants.
  500|       |   */
  501|       |
  502|   329k|  unsigned int base = end;
  503|   329k|  bool has_reph = false;
  504|       |
  505|   329k|  {
  506|       |    /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
  507|       |     *    and has more than one consonant, Ra is excluded from candidates for
  508|       |     *    base consonants. */
  509|   329k|    unsigned int limit = start;
  510|   329k|    if (indic_plan->mask_array[INDIC_RPHF] &&
  ------------------
  |  Branch (510:9): [True: 2.63k, False: 326k]
  ------------------
  511|   329k|	start + 3 <= end &&
  ------------------
  |  Branch (511:2): [True: 751, False: 1.88k]
  ------------------
  512|   329k|	(
  513|    751|	 (indic_plan->config->reph_mode == REPH_MODE_IMPLICIT && !is_joiner (info[start + 2])) ||
  ------------------
  |  Branch (513:4): [True: 261, False: 490]
  |  Branch (513:59): [True: 243, False: 18]
  ------------------
  514|    751|	 (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT && info[start + 2].indic_category() == I_Cat(ZWJ))
  ------------------
  |  |   38|    415|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|    415|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	 (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT && info[start + 2].indic_category() == I_Cat(ZWJ))
  ------------------
  |  |   44|    415|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (514:4): [True: 415, False: 93]
  |  Branch (514:59): [True: 401, False: 14]
  ------------------
  515|    751|	))
  516|    644|    {
  517|       |      /* See if it matches the 'rphf' feature. */
  518|    644|      hb_codepoint_t glyphs[3] = {info[start].codepoint,
  519|    644|				  info[start + 1].codepoint,
  520|    644|				  indic_plan->config->reph_mode == REPH_MODE_EXPLICIT ?
  ------------------
  |  Branch (520:7): [True: 401, False: 243]
  ------------------
  521|    401|				    info[start + 2].codepoint : 0};
  522|    644|      if (indic_plan->rphf.would_substitute (glyphs, 2, face) ||
  ------------------
  |  Branch (522:11): [True: 98, False: 546]
  ------------------
  523|    644|	  (indic_plan->config->reph_mode == REPH_MODE_EXPLICIT &&
  ------------------
  |  Branch (523:5): [True: 355, False: 191]
  ------------------
  524|    546|	   indic_plan->rphf.would_substitute (glyphs, 3, face)))
  ------------------
  |  Branch (524:5): [True: 75, False: 280]
  ------------------
  525|    173|      {
  526|    173|	limit += 2;
  527|    307|	while (limit < end && is_joiner (info[limit]))
  ------------------
  |  Branch (527:9): [True: 200, False: 107]
  |  Branch (527:24): [True: 134, False: 66]
  ------------------
  528|    134|	  limit++;
  529|    173|	base = start;
  530|    173|	has_reph = true;
  531|    173|      }
  532|   328k|    } else if (indic_plan->config->reph_mode == REPH_MODE_LOG_REPHA && info[start].indic_category() == I_Cat(Repha))
  ------------------
  |  |   38|  73.7k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  73.7k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                  } else if (indic_plan->config->reph_mode == REPH_MODE_LOG_REPHA && info[start].indic_category() == I_Cat(Repha))
  ------------------
  |  |   44|  73.7k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (532:16): [True: 73.7k, False: 254k]
  |  Branch (532:72): [True: 1.91k, False: 71.8k]
  ------------------
  533|  1.91k|    {
  534|  1.91k|	limit += 1;
  535|  2.39k|	while (limit < end && is_joiner (info[limit]))
  ------------------
  |  Branch (535:9): [True: 1.07k, False: 1.32k]
  |  Branch (535:24): [True: 483, False: 591]
  ------------------
  536|    483|	  limit++;
  537|  1.91k|	base = start;
  538|  1.91k|	has_reph = true;
  539|  1.91k|    }
  540|       |
  541|   329k|    {
  542|       |      /* -> starting from the end of the syllable, move backwards */
  543|   329k|      unsigned int i = end;
  544|   329k|      bool seen_below = false;
  545|   695k|      do {
  546|   695k|	i--;
  547|       |	/* -> until a consonant is found */
  548|   695k|	if (is_consonant (info[i]))
  ------------------
  |  Branch (548:6): [True: 285k, False: 410k]
  ------------------
  549|   285k|	{
  550|       |	  /* -> that does not have a below-base or post-base form
  551|       |	   * (post-base forms have to follow below-base forms), */
  552|   285k|	  if (info[i].indic_position() != POS_BELOW_C &&
  ------------------
  |  |   39|   285k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   285k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (552:8): [True: 285k, False: 0]
  ------------------
  553|   285k|	      (info[i].indic_position() != POS_POST_C || seen_below))
  ------------------
  |  |   39|   285k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   285k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (553:9): [True: 245k, False: 39.8k]
  |  Branch (553:51): [True: 0, False: 39.8k]
  ------------------
  554|   245k|	  {
  555|   245k|	    base = i;
  556|   245k|	    break;
  557|   245k|	  }
  558|  39.8k|	  if (info[i].indic_position() == POS_BELOW_C)
  ------------------
  |  |   39|  39.8k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  39.8k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (558:8): [True: 0, False: 39.8k]
  ------------------
  559|      0|	    seen_below = true;
  560|       |
  561|       |	  /* -> or that is not a pre-base-reordering Ra,
  562|       |	   *
  563|       |	   * IMPLEMENTATION NOTES:
  564|       |	   *
  565|       |	   * Our pre-base-reordering Ra's are marked POS_POST_C, so will be skipped
  566|       |	   * by the logic above already.
  567|       |	   */
  568|       |
  569|       |	  /* -> or arrive at the first consonant. The consonant stopped at will
  570|       |	   * be the base. */
  571|  39.8k|	  base = i;
  572|  39.8k|	}
  573|   410k|	else
  574|   410k|	{
  575|       |	  /* A ZWJ after a Halant stops the base search, and requests an explicit
  576|       |	   * half form.
  577|       |	   * A ZWJ before a Halant, requests a subjoined form instead, and hence
  578|       |	   * search continues.  This is particularly important for Bengali
  579|       |	   * sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya. */
  580|   410k|	  if (start < i &&
  ------------------
  |  Branch (580:8): [True: 367k, False: 43.1k]
  ------------------
  581|   410k|	      info[i].indic_category() == I_Cat(ZWJ) &&
  ------------------
  |  |   38|   367k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|   367k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	      info[i].indic_category() == I_Cat(ZWJ) &&
  ------------------
  |  |   44|   367k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (581:8): [True: 11.4k, False: 355k]
  ------------------
  582|   410k|	      info[i - 1].indic_category() == I_Cat(H))
  ------------------
  |  |   38|  11.4k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  11.4k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	      info[i - 1].indic_category() == I_Cat(H))
  ------------------
  |  |   44|  11.4k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (582:8): [True: 553, False: 10.9k]
  ------------------
  583|    553|	    break;
  584|   410k|	}
  585|   695k|      } while (i > limit);
  ------------------
  |  Branch (585:16): [True: 366k, False: 83.4k]
  ------------------
  586|   329k|    }
  587|       |
  588|       |    /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
  589|       |     *    and has more than one consonant, Ra is excluded from candidates for
  590|       |     *    base consonants.
  591|       |     *
  592|       |     *  Only do this for unforced Reph. (ie. not for Ra,H,ZWJ. */
  593|   329k|    if (has_reph && base == start && limit - base <= 2) {
  ------------------
  |  Branch (593:9): [True: 2.08k, False: 327k]
  |  Branch (593:21): [True: 1.82k, False: 262]
  |  Branch (593:38): [True: 1.68k, False: 138]
  ------------------
  594|       |      /* Have no other consonant, so Reph is not formed and Ra becomes base. */
  595|  1.68k|      has_reph = false;
  596|  1.68k|    }
  597|   329k|  }
  598|       |
  599|       |
  600|       |  /* 2. Decompose and reorder Matras:
  601|       |   *
  602|       |   * Each matra and any syllable modifier sign in the syllable are moved to the
  603|       |   * appropriate position relative to the consonant(s) in the syllable. The
  604|       |   * shaping engine decomposes two- or three-part matras into their constituent
  605|       |   * parts before any repositioning. Matra characters are classified by which
  606|       |   * consonant in a conjunct they have affinity for and are reordered to the
  607|       |   * following positions:
  608|       |   *
  609|       |   *   o Before first half form in the syllable
  610|       |   *   o After subjoined consonants
  611|       |   *   o After post-form consonant
  612|       |   *   o After main consonant (for above marks)
  613|       |   *
  614|       |   * IMPLEMENTATION NOTES:
  615|       |   *
  616|       |   * The normalize() routine has already decomposed matras for us, so we don't
  617|       |   * need to worry about that.
  618|       |   */
  619|       |
  620|       |
  621|       |  /* 3.  Reorder marks to canonical order:
  622|       |   *
  623|       |   * Adjacent nukta and halant or nukta and vedic sign are always repositioned
  624|       |   * if necessary, so that the nukta is first.
  625|       |   *
  626|       |   * IMPLEMENTATION NOTES:
  627|       |   *
  628|       |   * We don't need to do this: the normalize() routine already did this for us.
  629|       |   */
  630|       |
  631|       |
  632|       |  /* Reorder characters */
  633|       |
  634|   615k|  for (unsigned int i = start; i < base; i++)
  ------------------
  |  Branch (634:32): [True: 286k, False: 329k]
  ------------------
  635|   286k|    info[i].indic_position() = hb_min (POS_PRE_C, (indic_position_t) info[i].indic_position());
  ------------------
  |  |   39|   286k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   286k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
                  info[i].indic_position() = hb_min (POS_PRE_C, (indic_position_t) info[i].indic_position());
  ------------------
  |  |   39|   286k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   286k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  636|       |
  637|   329k|  if (base < end)
  ------------------
  |  Branch (637:7): [True: 286k, False: 42.2k]
  ------------------
  638|   286k|    info[base].indic_position() = POS_BASE_C;
  ------------------
  |  |   39|   286k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   286k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  639|       |
  640|       |  /* Handle beginning Ra */
  641|   329k|  if (has_reph)
  ------------------
  |  Branch (641:7): [True: 400, False: 328k]
  ------------------
  642|    400|    info[start].indic_position() = POS_RA_TO_BECOME_REPH;
  ------------------
  |  |   39|    400|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    400|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  643|       |
  644|       |  /* For old-style Indic script tags, move the first post-base Halant after
  645|       |   * last consonant.
  646|       |   *
  647|       |   * Reports suggest that in some scripts Uniscribe does this only if there
  648|       |   * is *not* a Halant after last consonant already.  We know that is the
  649|       |   * case for Kannada, while it reorders unconditionally in other scripts,
  650|       |   * eg. Malayalam, Bengali, and Devanagari.  We don't currently know about
  651|       |   * other scripts, so we block Kannada.
  652|       |   *
  653|       |   * Kannada test case:
  654|       |   * U+0C9A,U+0CCD,U+0C9A,U+0CCD
  655|       |   * With some versions of Lohit Kannada.
  656|       |   * https://bugs.freedesktop.org/show_bug.cgi?id=59118
  657|       |   *
  658|       |   * Malayalam test case:
  659|       |   * U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
  660|       |   * With lohit-ttf-20121122/Lohit-Malayalam.ttf
  661|       |   *
  662|       |   * Bengali test case:
  663|       |   * U+0998,U+09CD,U+09AF,U+09CD
  664|       |   * With Windows XP vrinda.ttf
  665|       |   * https://github.com/harfbuzz/harfbuzz/issues/1073
  666|       |   *
  667|       |   * Devanagari test case:
  668|       |   * U+091F,U+094D,U+0930,U+094D
  669|       |   * With chandas.ttf
  670|       |   * https://github.com/harfbuzz/harfbuzz/issues/1071
  671|       |   */
  672|   329k|  if (indic_plan->is_old_spec)
  ------------------
  |  Branch (672:7): [True: 279k, False: 49.4k]
  ------------------
  673|   279k|  {
  674|   279k|    bool disallow_double_halants = buffer->props.script == HB_SCRIPT_KANNADA;
  675|   425k|    for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (675:37): [True: 146k, False: 279k]
  ------------------
  676|   146k|      if (info[i].indic_category() == I_Cat(H))
  ------------------
  |  |   38|   146k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|   146k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i].indic_category() == I_Cat(H))
  ------------------
  |  |   44|   146k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (676:11): [True: 594, False: 146k]
  ------------------
  677|    594|      {
  678|    594|	unsigned int j;
  679|  4.75k|	for (j = end - 1; j > i; j--)
  ------------------
  |  Branch (679:20): [True: 4.21k, False: 542]
  ------------------
  680|  4.21k|	  if (is_consonant (info[j]) ||
  ------------------
  |  Branch (680:8): [True: 9, False: 4.20k]
  ------------------
  681|  4.21k|	      (disallow_double_halants && info[j].indic_category() == I_Cat(H)))
  ------------------
  |  |   38|    202|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|    202|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	      (disallow_double_halants && info[j].indic_category() == I_Cat(H)))
  ------------------
  |  |   44|    202|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (681:9): [True: 202, False: 4.00k]
  |  Branch (681:36): [True: 43, False: 159]
  ------------------
  682|     52|	    break;
  683|    594|	if (info[j].indic_category() != I_Cat(H) && j > i) {
  ------------------
  |  |   38|    594|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|    594|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	if (info[j].indic_category() != I_Cat(H) && j > i) {
  ------------------
  |  |   44|    594|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (683:6): [True: 9, False: 585]
  |  Branch (683:46): [True: 9, False: 0]
  ------------------
  684|       |	  /* Move Halant to after last consonant. */
  685|      9|	  hb_glyph_info_t t = info[i];
  686|      9|	  memmove (&info[i], &info[i + 1], (j - i) * sizeof (info[0]));
  687|      9|	  info[j] = t;
  688|      9|	}
  689|    594|	break;
  690|    594|      }
  691|   279k|  }
  692|       |
  693|       |  /* Attach misc marks to previous char to move with them. */
  694|   329k|  {
  695|   329k|    indic_position_t last_pos = POS_START;
  696|  1.06M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (696:34): [True: 737k, False: 329k]
  ------------------
  697|   737k|    {
  698|   737k|      if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   74|   737k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 737k, False: 0]
  |  |  ------------------
  ------------------
                    if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   76|   737k|#define JOINER_FLAGS (FLAG (I_Cat(ZWJ)) | FLAG (I_Cat(ZWNJ)))
  |  |  ------------------
  |  |  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JOINER_FLAGS (FLAG (I_Cat(ZWJ)) | FLAG (I_Cat(ZWNJ)))
  |  |  ------------------
  |  |  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                    if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
                    if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
                    if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
                    if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (I_Cat(N)) | FLAG (I_Cat(RS)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|   737k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   737k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (698:11): [True: 68.4k, False: 668k]
  ------------------
  699|  68.4k|      {
  700|  68.4k|	info[i].indic_position() = last_pos;
  ------------------
  |  |   39|  68.4k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  68.4k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  701|  68.4k|	if (unlikely (info[i].indic_category() == I_Cat(H) &&
  ------------------
  |  |  259|   119k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 624, False: 67.7k]
  |  |  |  Branch (259:47): [True: 50.9k, False: 17.4k]
  |  |  |  Branch (259:47): [True: 624, False: 50.3k]
  |  |  ------------------
  ------------------
  702|  68.4k|		      info[i].indic_position() == POS_PRE_M))
  703|    624|	{
  704|       |	  /*
  705|       |	   * Uniscribe doesn't move the Halant with Left Matra.
  706|       |	   * TEST: U+092B,U+093F,U+094D
  707|       |	   * We follow.
  708|       |	   */
  709|  55.3k|	  for (unsigned int j = i; j > start; j--)
  ------------------
  |  Branch (709:29): [True: 55.0k, False: 324]
  ------------------
  710|  55.0k|	    if (info[j - 1].indic_position() != POS_PRE_M) {
  ------------------
  |  |   39|  55.0k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  55.0k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (710:10): [True: 300, False: 54.7k]
  ------------------
  711|    300|	      info[i].indic_position() = info[j - 1].indic_position();
  ------------------
  |  |   39|    300|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    300|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
              	      info[i].indic_position() = info[j - 1].indic_position();
  ------------------
  |  |   39|    300|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    300|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  712|    300|	      break;
  713|    300|	    }
  714|    624|	}
  715|   668k|      } else if (info[i].indic_position() != POS_SMVD) {
  ------------------
  |  |   39|   668k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   668k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (715:18): [True: 651k, False: 17.4k]
  ------------------
  716|   651k|	if (info[i].indic_category() == I_Cat(MPst) &&
  ------------------
  |  |   38|   651k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|   651k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	if (info[i].indic_category() == I_Cat(MPst) &&
  ------------------
  |  |   44|   651k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (716:6): [True: 4.62k, False: 646k]
  ------------------
  717|   651k|	    i > start && info[i - 1].indic_category() == I_Cat(SM))
  ------------------
  |  |   38|  4.59k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  4.59k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	    i > start && info[i - 1].indic_category() == I_Cat(SM))
  ------------------
  |  |   44|  4.59k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (717:6): [True: 4.59k, False: 26]
  |  Branch (717:19): [True: 11, False: 4.58k]
  ------------------
  718|     11|	  info[i - 1].indic_position() = info[i].indic_position();
  ------------------
  |  |   39|     11|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|     11|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
              	  info[i - 1].indic_position() = info[i].indic_position();
  ------------------
  |  |   39|     11|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|     11|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  719|   651k|	last_pos = (indic_position_t) info[i].indic_position();
  ------------------
  |  |   39|   651k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   651k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  720|   651k|      }
  721|   737k|    }
  722|   329k|  }
  723|       |  /* For post-base consonants let them own anything before them
  724|       |   * since the last consonant or matra. */
  725|   329k|  {
  726|   329k|    unsigned int last = base;
  727|   492k|    for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (727:37): [True: 163k, False: 329k]
  ------------------
  728|   163k|      if (is_consonant (info[i]))
  ------------------
  |  Branch (728:11): [True: 907, False: 162k]
  ------------------
  729|    907|      {
  730|  2.04k|	for (unsigned int j = last + 1; j < i; j++)
  ------------------
  |  Branch (730:34): [True: 1.13k, False: 907]
  ------------------
  731|  1.13k|	  if (info[j].indic_position() < POS_SMVD)
  ------------------
  |  |   39|  1.13k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  1.13k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (731:8): [True: 579, False: 560]
  ------------------
  732|    907|	    info[j].indic_position() = info[i].indic_position();
  ------------------
  |  |   39|    579|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    579|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
              	    info[j].indic_position() = info[i].indic_position();
  ------------------
  |  |   39|    579|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    579|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  733|    907|	last = i;
  734|   162k|      } else if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   74|   162k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 162k, False: 0]
  |  |  ------------------
  ------------------
                    } else if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|   162k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   162k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
                    } else if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|   162k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|   162k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (734:18): [True: 132k, False: 30.2k]
  ------------------
  735|   132k|	last = i;
  736|   329k|  }
  737|       |
  738|       |
  739|   329k|  {
  740|       |    /* Use syllable() for sort accounting temporarily. */
  741|   329k|    unsigned int syllable = info[start].syllable();
  ------------------
  |  |  147|   329k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  742|  1.06M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (742:34): [True: 737k, False: 329k]
  ------------------
  743|   737k|      info[i].syllable() = i - start;
  ------------------
  |  |  147|   737k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  744|       |
  745|       |    /* Sit tight, rock 'n roll! */
  746|   329k|    hb_stable_sort (info + start, end - start, compare_indic_order);
  747|       |
  748|       |    /* Find base again; also flip left-matra sequence. */
  749|   329k|    unsigned first_left_matra = end;
  750|   329k|    unsigned last_left_matra = end;
  751|   329k|    base = end;
  752|   621k|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (752:34): [True: 578k, False: 42.4k]
  ------------------
  753|   578k|    {
  754|   578k|      if (info[i].indic_position() == POS_BASE_C)
  ------------------
  |  |   39|   578k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   578k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (754:11): [True: 286k, False: 292k]
  ------------------
  755|   286k|      {
  756|   286k|	base = i;
  757|   286k|	break;
  758|   286k|      }
  759|   292k|      else if (info[i].indic_position() == POS_PRE_M)
  ------------------
  |  |   39|   292k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   292k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (759:16): [True: 12.7k, False: 279k]
  ------------------
  760|  12.7k|      {
  761|  12.7k|        if (first_left_matra == end)
  ------------------
  |  Branch (761:13): [True: 312, False: 12.4k]
  ------------------
  762|    312|	  first_left_matra = i;
  763|  12.7k|	last_left_matra = i;
  764|  12.7k|      }
  765|   578k|    }
  766|       |    /* https://github.com/harfbuzz/harfbuzz/issues/3863 */
  767|   329k|    if (first_left_matra < last_left_matra)
  ------------------
  |  Branch (767:9): [True: 159, False: 328k]
  ------------------
  768|    159|    {
  769|       |      /* No need to merge clusters, handled later. */
  770|    159|      buffer->reverse_range (first_left_matra, last_left_matra + 1);
  771|       |      /* Reverse back nuktas, etc. */
  772|    159|      unsigned i = first_left_matra;
  773|  12.7k|      for (unsigned j = i; j <= last_left_matra; j++)
  ------------------
  |  Branch (773:28): [True: 12.6k, False: 159]
  ------------------
  774|  12.6k|	if (FLAG_UNSAFE (info[j].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   74|  12.6k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 12.6k, False: 0]
  |  |  ------------------
  ------------------
              	if (FLAG_UNSAFE (info[j].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|  12.6k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  12.6k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	if (FLAG_UNSAFE (info[j].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|  12.6k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  12.6k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (774:6): [True: 11.9k, False: 701]
  ------------------
  775|  11.9k|	{
  776|  11.9k|	  buffer->reverse_range (i, j + 1);
  777|  11.9k|	  i = j + 1;
  778|  11.9k|	}
  779|    159|    }
  780|       |
  781|       |    /* Things are out-of-control for post base positions, they may shuffle
  782|       |     * around like crazy.  In old-spec mode, we move halants around, so in
  783|       |     * that case merge all clusters after base.  Otherwise, check the sort
  784|       |     * order and merge as needed.
  785|       |     * For pre-base stuff, we handle cluster issues in final reordering.
  786|       |     *
  787|       |     * We could use buffer->sort() for this, if there was no special
  788|       |     * reordering of pre-base stuff happening later...
  789|       |     * We don't want to merge_clusters all of that, which buffer->sort()
  790|       |     * would.  Here's a concrete example:
  791|       |     *
  792|       |     * Assume there's a pre-base consonant and explicit Halant before base,
  793|       |     * followed by a prebase-reordering (left) Matra:
  794|       |     *
  795|       |     *   C,H,ZWNJ,B,M
  796|       |     *
  797|       |     * At this point in reordering we would have:
  798|       |     *
  799|       |     *   M,C,H,ZWNJ,B
  800|       |     *
  801|       |     * whereas in final reordering we will bring the Matra closer to Base:
  802|       |     *
  803|       |     *   C,H,ZWNJ,M,B
  804|       |     *
  805|       |     * That's why we don't want to merge-clusters anything before the Base
  806|       |     * at this point.  But if something moved from after Base to before it,
  807|       |     * we should merge clusters from base to them.  In final-reordering, we
  808|       |     * only move things around before base, and merge-clusters up to base.
  809|       |     * These two merge-clusters from the two sides of base will interlock
  810|       |     * to merge things correctly.  See:
  811|       |     * https://github.com/harfbuzz/harfbuzz/issues/2272
  812|       |     */
  813|   329k|    if (indic_plan->is_old_spec || end - start > 127)
  ------------------
  |  Branch (813:9): [True: 279k, False: 49.4k]
  |  Branch (813:36): [True: 7, False: 49.4k]
  ------------------
  814|   279k|      buffer->merge_clusters (base, end);
  815|  49.4k|    else
  816|  49.4k|    {
  817|       |      /* Note!  syllable() is a one-byte field. */
  818|   108k|      for (unsigned int i = base; i < end; i++)
  ------------------
  |  Branch (818:35): [True: 59.1k, False: 49.4k]
  ------------------
  819|  59.1k|	if (info[i].syllable() != 255)
  ------------------
  |  |  147|  59.1k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (819:6): [True: 59.0k, False: 88]
  ------------------
  820|  59.0k|	{
  821|  59.0k|	  unsigned int min = i;
  822|  59.0k|	  unsigned int max = i;
  823|  59.0k|	  unsigned int j = start + info[i].syllable();
  ------------------
  |  |  147|  59.0k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  824|  59.3k|	  while (j != i)
  ------------------
  |  Branch (824:11): [True: 260, False: 59.0k]
  ------------------
  825|    260|	  {
  826|    260|	    min = hb_min (min, j);
  827|    260|	    max = hb_max (max, j);
  828|    260|	    unsigned int next = start + info[j].syllable();
  ------------------
  |  |  147|    260|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  829|    260|	    info[j].syllable() = 255; /* So we don't process j later again. */
  ------------------
  |  |  147|    260|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  830|    260|	    j = next;
  831|    260|	  }
  832|  59.0k|	  buffer->merge_clusters (hb_max (base, min), max + 1);
  833|  59.0k|	}
  834|  49.4k|    }
  835|       |
  836|       |    /* Put syllable back in. */
  837|  1.06M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (837:34): [True: 737k, False: 329k]
  ------------------
  838|   737k|      info[i].syllable() = syllable;
  ------------------
  |  |  147|   737k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  839|   329k|  }
  840|       |
  841|       |  /* Setup masks now */
  842|       |
  843|   329k|  {
  844|   329k|    hb_mask_t mask;
  845|       |
  846|       |    /* Reph */
  847|   330k|    for (unsigned int i = start; i < end && info[i].indic_position() == POS_RA_TO_BECOME_REPH; i++)
  ------------------
  |  |   39|   330k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   330k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (847:34): [True: 330k, False: 83]
  |  Branch (847:45): [True: 1.07k, False: 329k]
  ------------------
  848|  1.07k|      info[i].mask |= indic_plan->mask_array[INDIC_RPHF];
  849|       |
  850|       |    /* Pre-base */
  851|   329k|    mask = indic_plan->mask_array[INDIC_HALF];
  852|   329k|    if (!indic_plan->is_old_spec &&
  ------------------
  |  Branch (852:9): [True: 49.4k, False: 279k]
  ------------------
  853|   329k|	indic_plan->config->blwf_mode == BLWF_MODE_PRE_AND_POST)
  ------------------
  |  Branch (853:2): [True: 49.4k, False: 10]
  ------------------
  854|  49.4k|      mask |= indic_plan->mask_array[INDIC_BLWF];
  855|   621k|    for (unsigned int i = start; i < base; i++)
  ------------------
  |  Branch (855:34): [True: 292k, False: 329k]
  ------------------
  856|   292k|      info[i].mask  |= mask;
  857|       |    /* Base */
  858|   329k|    mask = 0;
  859|   329k|    if (base < end)
  ------------------
  |  Branch (859:9): [True: 286k, False: 42.4k]
  ------------------
  860|   286k|      info[base].mask |= mask;
  861|       |    /* Post-base */
  862|   329k|    mask = indic_plan->mask_array[INDIC_BLWF] |
  863|   329k|	   indic_plan->mask_array[INDIC_ABVF] |
  864|   329k|	   indic_plan->mask_array[INDIC_PSTF];
  865|   487k|    for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (865:37): [True: 158k, False: 329k]
  ------------------
  866|   158k|      info[i].mask  |= mask;
  867|   329k|  }
  868|       |
  869|   329k|  if (indic_plan->is_old_spec &&
  ------------------
  |  Branch (869:7): [True: 279k, False: 49.4k]
  ------------------
  870|   329k|      buffer->props.script == HB_SCRIPT_DEVANAGARI)
  ------------------
  |  Branch (870:7): [True: 46.1k, False: 233k]
  ------------------
  871|  46.1k|  {
  872|       |    /* Old-spec eye-lash Ra needs special handling.  From the
  873|       |     * spec:
  874|       |     *
  875|       |     * "The feature 'below-base form' is applied to consonants
  876|       |     * having below-base forms and following the base consonant.
  877|       |     * The exception is vattu, which may appear below half forms
  878|       |     * as well as below the base glyph. The feature 'below-base
  879|       |     * form' will be applied to all such occurrences of Ra as well."
  880|       |     *
  881|       |     * Test case: U+0924,U+094D,U+0930,U+094d,U+0915
  882|       |     * with Sanskrit 2003 font.
  883|       |     *
  884|       |     * However, note that Ra,Halant,ZWJ is the correct way to
  885|       |     * request eyelash form of Ra, so we wouldbn't inhibit it
  886|       |     * in that sequence.
  887|       |     *
  888|       |     * Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915
  889|       |     */
  890|  69.8k|    for (unsigned int i = start; i + 1 < base; i++)
  ------------------
  |  Branch (890:34): [True: 23.7k, False: 46.1k]
  ------------------
  891|  23.7k|      if (info[i  ].indic_category() == I_Cat(Ra) &&
  ------------------
  |  |   38|  23.7k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  23.7k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i  ].indic_category() == I_Cat(Ra) &&
  ------------------
  |  |   44|  23.7k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (891:11): [True: 319, False: 23.4k]
  ------------------
  892|  23.7k|	  info[i+1].indic_category() == I_Cat(H)  &&
  ------------------
  |  |   38|    319|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|    319|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	  info[i+1].indic_category() == I_Cat(H)  &&
  ------------------
  |  |   44|    319|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (892:4): [True: 56, False: 263]
  ------------------
  893|  23.7k|	  (i + 2 == base ||
  ------------------
  |  Branch (893:5): [True: 45, False: 11]
  ------------------
  894|     56|	   info[i+2].indic_category() != I_Cat(ZWJ)))
  ------------------
  |  |   38|     11|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|     11|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	   info[i+2].indic_category() != I_Cat(ZWJ)))
  ------------------
  |  |   44|     11|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (894:5): [True: 10, False: 1]
  ------------------
  895|     55|      {
  896|     55|	info[i  ].mask |= indic_plan->mask_array[INDIC_BLWF];
  897|     55|	info[i+1].mask |= indic_plan->mask_array[INDIC_BLWF];
  898|     55|      }
  899|  46.1k|  }
  900|       |
  901|   329k|  unsigned int pref_len = 2;
  902|   329k|  if (indic_plan->mask_array[INDIC_PREF] && base + pref_len < end)
  ------------------
  |  Branch (902:7): [True: 282k, False: 46.9k]
  |  Branch (902:45): [True: 5.39k, False: 276k]
  ------------------
  903|  5.39k|  {
  904|       |    /* Find a Halant,Ra sequence and mark it for pre-base-reordering processing. */
  905|  97.6k|    for (unsigned int i = base + 1; i + pref_len - 1 < end; i++) {
  ------------------
  |  Branch (905:37): [True: 92.9k, False: 4.67k]
  ------------------
  906|  92.9k|      hb_codepoint_t glyphs[2];
  907|   278k|      for (unsigned int j = 0; j < pref_len; j++)
  ------------------
  |  Branch (907:32): [True: 185k, False: 92.9k]
  ------------------
  908|   185k|	glyphs[j] = info[i + j].codepoint;
  909|  92.9k|      if (indic_plan->pref.would_substitute (glyphs, pref_len, face))
  ------------------
  |  Branch (909:11): [True: 723, False: 92.2k]
  ------------------
  910|    723|      {
  911|  2.16k|	for (unsigned int j = 0; j < pref_len; j++)
  ------------------
  |  Branch (911:27): [True: 1.44k, False: 723]
  ------------------
  912|  1.44k|	  info[i++].mask |= indic_plan->mask_array[INDIC_PREF];
  913|    723|	break;
  914|    723|      }
  915|  92.9k|    }
  916|  5.39k|  }
  917|       |
  918|       |  /* Apply ZWJ/ZWNJ effects */
  919|   737k|  for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (919:36): [True: 408k, False: 329k]
  ------------------
  920|   408k|    if (is_joiner (info[i])) {
  ------------------
  |  Branch (920:9): [True: 13.5k, False: 394k]
  ------------------
  921|  13.5k|      bool non_joiner = info[i].indic_category() == I_Cat(ZWNJ);
  ------------------
  |  |   38|  13.5k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  13.5k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    bool non_joiner = info[i].indic_category() == I_Cat(ZWNJ);
  ------------------
  |  |   44|  13.5k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  922|  13.5k|      unsigned int j = i;
  923|       |
  924|  21.7M|      do {
  925|  21.7M|	j--;
  926|       |
  927|       |	/* ZWJ/ZWNJ should disable CJCT.  They do that by simply
  928|       |	 * being there, since we don't skip them for the CJCT
  929|       |	 * feature (ie. F_MANUAL_ZWJ) */
  930|       |
  931|       |	/* A ZWNJ disables HALF. */
  932|  21.7M|	if (non_joiner)
  ------------------
  |  Branch (932:6): [True: 531k, False: 21.2M]
  ------------------
  933|   531k|	  info[j].mask &= ~indic_plan->mask_array[INDIC_HALF];
  934|       |
  935|  21.7M|      } while (j > start && !is_consonant (info[j]));
  ------------------
  |  Branch (935:16): [True: 21.7M, False: 12.4k]
  |  Branch (935:29): [True: 21.7M, False: 1.04k]
  ------------------
  936|  13.5k|    }
  937|   329k|}
hb-ot-shaper-indic.cc:_ZL9is_one_ofRK15hb_glyph_info_tj:
   55|  23.1M|{
   56|       |  /* If it ligated, all bets are off. */
   57|  23.1M|  if (_hb_glyph_info_ligated (&info)) return false;
  ------------------
  |  Branch (57:7): [True: 153k, False: 23.0M]
  ------------------
   58|  23.0M|  return !!(FLAG_UNSAFE (info.indic_category()) & flags);
  ------------------
  |  |   74|  23.0M|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 23.0M, False: 142]
  |  |  ------------------
  ------------------
   59|  23.1M|}
hb-ot-shaper-indic.cc:_ZL9is_joinerRK15hb_glyph_info_t:
   80|   425k|{
   81|   425k|  return is_one_of (info, JOINER_FLAGS);
  ------------------
  |  |   76|   425k|#define JOINER_FLAGS (FLAG (I_Cat(ZWJ)) | FLAG (I_Cat(ZWNJ)))
  |  |  ------------------
  |  |  |  |   73|   425k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   425k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define JOINER_FLAGS (FLAG (I_Cat(ZWJ)) | FLAG (I_Cat(ZWNJ)))
  |  |  ------------------
  |  |  |  |   73|   425k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   425k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|   425k|}
hb-ot-shaper-indic.cc:_ZL12is_consonantRK15hb_glyph_info_t:
   72|  22.6M|{
   73|  22.6M|  return is_one_of (info, CONSONANT_FLAGS_INDIC);
  ------------------
  |  |   68|  22.6M|#define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_INDIC (FLAG (I_Cat(C)) | FLAG (I_Cat(CS)) | FLAG (I_Cat(Ra)) | FLAG (I_Cat(CM)) | FLAG (I_Cat(V)) | FLAG (I_Cat(PLACEHOLDER)) | FLAG (I_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  22.6M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  22.6M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|  22.6M|}
hb-ot-shaper-indic.cc:_ZL19compare_indic_orderPK15hb_glyph_info_tS1_:
  430|  5.64M|{
  431|  5.64M|  int a = pa->indic_position();
  ------------------
  |  |   39|  5.64M|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  5.64M|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  432|  5.64M|  int b = pb->indic_position();
  ------------------
  |  |   39|  5.64M|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  5.64M|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  433|       |
  434|  5.64M|  return (int) a - (int) b;
  435|  5.64M|}
hb-ot-shaper-indic.cc:_ZL37initial_reordering_standalone_clusterPK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  944|  98.9k|{
  945|       |  /* We treat placeholder/dotted-circle as if they are consonants, so we
  946|       |   * should just chain.  Only if not in compatibility mode that is... */
  947|       |
  948|  98.9k|  const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
  949|  98.9k|  if (indic_plan->uniscribe_bug_compatible)
  ------------------
  |  Branch (949:7): [True: 0, False: 98.9k]
  ------------------
  950|      0|  {
  951|       |    /* For dotted-circle, this is what Uniscribe does:
  952|       |     * If dotted-circle is the last glyph, it just does nothing.
  953|       |     * Ie. It doesn't form Reph. */
  954|      0|    if (buffer->info[end - 1].indic_category() == I_Cat(DOTTEDCIRCLE))
  ------------------
  |  |   38|      0|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|      0|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                  if (buffer->info[end - 1].indic_category() == I_Cat(DOTTEDCIRCLE))
  ------------------
  |  |   44|      0|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (954:9): [True: 0, False: 0]
  ------------------
  955|      0|      return;
  956|      0|  }
  957|       |
  958|  98.9k|  initial_reordering_consonant_syllable (plan, face, buffer, start, end);
  959|  98.9k|}
hb-ot-shaper-indic.cc:_ZL22final_reordering_indicPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
 1482|  2.60k|{
 1483|  2.60k|  unsigned int count = buffer->len;
 1484|  2.60k|  if (unlikely (!count)) return false;
  ------------------
  |  |  259|  2.60k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 2.60k]
  |  |  ------------------
  ------------------
 1485|       |
 1486|  2.60k|  if (buffer->message (font, "start reordering indic final")) {
  ------------------
  |  Branch (1486:7): [True: 2.60k, False: 0]
  ------------------
 1487|  2.60k|    foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  2.60k|  for (unsigned int \
  |  |  153|  2.60k|       _count = buffer->len, \
  |  |  154|  2.60k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 2.60k, False: 0]
  |  |  ------------------
  |  |  155|  2.47M|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 2.46M, False: 2.60k]
  |  |  ------------------
  |  |  156|  2.46M|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
 1488|  2.46M|      final_reordering_syllable_indic (plan, buffer, start, end);
 1489|  2.60k|    (void) buffer->message (font, "end reordering indic final");
 1490|  2.60k|  }
 1491|       |
 1492|  2.60k|  HB_BUFFER_DEALLOCATE_VAR (buffer, indic_category);
  ------------------
  |  |  671|  2.60k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  2.60k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.60k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 1493|  2.60k|  HB_BUFFER_DEALLOCATE_VAR (buffer, indic_position);
  ------------------
  |  |  671|  2.60k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  2.60k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.60k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
 1494|       |
 1495|  2.60k|  return false;
 1496|  2.60k|}
hb-ot-shaper-indic.cc:_ZL31final_reordering_syllable_indicPK18hb_ot_shape_plan_tP11hb_buffer_tjj:
 1015|  2.46M|{
 1016|  2.46M|  const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
 1017|  2.46M|  hb_glyph_info_t *info = buffer->info;
 1018|       |
 1019|       |
 1020|       |  /* This function relies heavily on halant glyphs.  Lots of ligation
 1021|       |   * and possibly multiple substitutions happened prior to this
 1022|       |   * phase, and that might have messed up our properties.  Recover
 1023|       |   * from a particular case of that where we're fairly sure that a
 1024|       |   * class of I_Cat(H) is desired but has been lost. */
 1025|       |  /* We don't call load_virama_glyph(), since we know it's already
 1026|       |   * loaded. */
 1027|  2.46M|  hb_codepoint_t virama_glyph = indic_plan->virama_glyph;
 1028|  2.46M|  if (virama_glyph)
  ------------------
  |  Branch (1028:7): [True: 163k, False: 2.30M]
  ------------------
 1029|   163k|  {
 1030|   418k|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (1030:34): [True: 254k, False: 163k]
  ------------------
 1031|   254k|      if (info[i].codepoint == virama_glyph &&
  ------------------
  |  Branch (1031:11): [True: 20.2k, False: 233k]
  ------------------
 1032|   254k|	  _hb_glyph_info_ligated (&info[i]) &&
  ------------------
  |  Branch (1032:4): [True: 1.62k, False: 18.6k]
  ------------------
 1033|   254k|	  _hb_glyph_info_multiplied (&info[i]))
  ------------------
  |  Branch (1033:4): [True: 1.58k, False: 37]
  ------------------
 1034|  1.58k|      {
 1035|       |	/* This will make sure that this glyph passes is_halant() test. */
 1036|  1.58k|	info[i].indic_category() = I_Cat(H);
  ------------------
  |  |   38|  1.58k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  1.58k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[i].indic_category() = I_Cat(H);
  ------------------
  |  |   44|  1.58k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
 1037|  1.58k|	_hb_glyph_info_clear_ligated_and_multiplied (&info[i]);
 1038|  1.58k|      }
 1039|   163k|  }
 1040|       |
 1041|       |
 1042|       |  /* 4. Final reordering:
 1043|       |   *
 1044|       |   * After the localized forms and basic shaping forms GSUB features have been
 1045|       |   * applied (see below), the shaping engine performs some final glyph
 1046|       |   * reordering before applying all the remaining font features to the entire
 1047|       |   * syllable.
 1048|       |   */
 1049|       |
 1050|  2.46M|  bool try_pref = !!indic_plan->mask_array[INDIC_PREF];
 1051|       |
 1052|       |  /* Find base again */
 1053|  2.46M|  unsigned int base;
 1054|  2.76M|  for (base = start; base < end; base++)
  ------------------
  |  Branch (1054:22): [True: 2.72M, False: 44.0k]
  ------------------
 1055|  2.72M|    if (info[base].indic_position() >= POS_BASE_C)
  ------------------
  |  |   39|  2.72M|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  2.72M|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1055:9): [True: 2.42M, False: 299k]
  ------------------
 1056|  2.42M|    {
 1057|  2.42M|      if (try_pref && base + 1 < end)
  ------------------
  |  Branch (1057:11): [True: 2.03M, False: 393k]
  |  Branch (1057:23): [True: 5.92k, False: 2.02M]
  ------------------
 1058|  5.92k|      {
 1059|   215k|	for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (1059:34): [True: 209k, False: 5.20k]
  ------------------
 1060|   209k|	  if ((info[i].mask & indic_plan->mask_array[INDIC_PREF]) != 0)
  ------------------
  |  Branch (1060:8): [True: 715, False: 209k]
  ------------------
 1061|    715|	  {
 1062|    715|	    if (!(_hb_glyph_info_substituted (&info[i]) &&
  ------------------
  |  Branch (1062:12): [True: 707, False: 8]
  ------------------
 1063|    715|		  _hb_glyph_info_ligated_and_didnt_multiply (&info[i])))
  ------------------
  |  Branch (1063:5): [True: 260, False: 447]
  ------------------
 1064|    455|	    {
 1065|       |	      /* Ok, this was a 'pref' candidate but didn't form any.
 1066|       |	       * Base is around here... */
 1067|    455|	      base = i;
 1068|  38.8k|	      while (base < end && is_halant (info[base]))
  ------------------
  |  Branch (1068:15): [True: 38.8k, False: 11]
  |  Branch (1068:29): [True: 38.4k, False: 444]
  ------------------
 1069|  38.4k|		base++;
 1070|    455|	      if (base < end)
  ------------------
  |  Branch (1070:12): [True: 444, False: 11]
  ------------------
 1071|    444|		info[base].indic_position() = POS_BASE_C;
  ------------------
  |  |   39|    444|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    444|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
 1072|       |
 1073|    455|	      try_pref = false;
 1074|    455|	    }
 1075|    715|	    break;
 1076|    715|	  }
 1077|  5.92k|	if (base == end)
  ------------------
  |  Branch (1077:6): [True: 11, False: 5.90k]
  ------------------
 1078|     11|	  break;
 1079|  5.92k|      }
 1080|       |      /* For Malayalam, skip over unformed below- (but NOT post-) forms. */
 1081|  2.42M|      if (buffer->props.script == HB_SCRIPT_MALAYALAM)
  ------------------
  |  Branch (1081:11): [True: 356k, False: 2.06M]
  ------------------
 1082|   356k|      {
 1083|   357k|	for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (1083:34): [True: 12.7k, False: 344k]
  ------------------
 1084|  12.7k|	{
 1085|  15.3k|	  while (i < end && is_joiner (info[i]))
  ------------------
  |  Branch (1085:11): [True: 15.1k, False: 270]
  |  Branch (1085:22): [True: 2.63k, False: 12.4k]
  ------------------
 1086|  2.63k|	    i++;
 1087|  12.7k|	  if (i == end || !is_halant (info[i]))
  ------------------
  |  Branch (1087:8): [True: 270, False: 12.4k]
  |  Branch (1087:20): [True: 11.5k, False: 885]
  ------------------
 1088|  11.8k|	    break;
 1089|    885|	  i++; /* Skip halant. */
 1090|    891|	  while (i < end && is_joiner (info[i]))
  ------------------
  |  Branch (1090:11): [True: 376, False: 515]
  |  Branch (1090:22): [True: 6, False: 370]
  ------------------
 1091|      6|	    i++;
 1092|    885|	  if (i < end && is_consonant (info[i]) && info[i].indic_position() == POS_BELOW_C)
  ------------------
  |  |   39|      0|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|      0|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1092:8): [True: 370, False: 515]
  |  Branch (1092:19): [True: 0, False: 370]
  |  Branch (1092:45): [True: 0, False: 0]
  ------------------
 1093|      0|	  {
 1094|      0|	    base = i;
 1095|      0|	    info[base].indic_position() = POS_BASE_C;
  ------------------
  |  |   39|      0|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|      0|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
 1096|      0|	  }
 1097|    885|	}
 1098|   356k|      }
 1099|       |
 1100|  2.42M|      if (start < base && info[base].indic_position() > POS_BASE_C)
  ------------------
  |  |   39|  4.57k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  4.57k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1100:11): [True: 4.57k, False: 2.41M]
  |  Branch (1100:27): [True: 22, False: 4.55k]
  ------------------
 1101|     22|	base--;
 1102|  2.42M|      break;
 1103|  2.42M|    }
 1104|  2.46M|  if (base == end && start < base &&
  ------------------
  |  Branch (1104:7): [True: 44.0k, False: 2.42M]
  |  Branch (1104:22): [True: 44.0k, False: 0]
  ------------------
 1105|  2.46M|      is_one_of (info[base - 1], FLAG (I_Cat(ZWJ))))
  ------------------
  |  |   73|  44.0k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  44.0k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1105:7): [True: 435, False: 43.6k]
  ------------------
 1106|    435|    base--;
 1107|  2.46M|  if (base < end)
  ------------------
  |  Branch (1107:7): [True: 2.42M, False: 43.6k]
  ------------------
 1108|  2.42M|    while (start < base &&
  ------------------
  |  Branch (1108:12): [True: 5.01k, False: 2.41M]
  ------------------
 1109|  2.42M|	   is_one_of (info[base], (FLAG (I_Cat(N)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|  5.01k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  5.01k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	   is_one_of (info[base], (FLAG (I_Cat(N)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|  5.01k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  5.01k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1109:5): [True: 73, False: 4.93k]
  ------------------
 1110|     73|      base--;
 1111|       |
 1112|       |
 1113|       |  /*   o Reorder matras:
 1114|       |   *
 1115|       |   *     If a pre-base matra character had been reordered before applying basic
 1116|       |   *     features, the glyph can be moved closer to the main consonant based on
 1117|       |   *     whether half-forms had been formed. Actual position for the matra is
 1118|       |   *     defined as “after last standalone halant glyph, after initial matra
 1119|       |   *     position and before the main consonant”. If ZWJ or ZWNJ follow this
 1120|       |   *     halant, position is moved after it.
 1121|       |   *
 1122|       |   * IMPLEMENTATION NOTES:
 1123|       |   *
 1124|       |   * It looks like the last sentence is wrong.  Testing, with Windows 7 Uniscribe
 1125|       |   * and Devanagari shows that the behavior is best described as:
 1126|       |   *
 1127|       |   * "If ZWJ follows this halant, matra is NOT repositioned after this halant.
 1128|       |   *  If ZWNJ follows this halant, position is moved after it."
 1129|       |   *
 1130|       |   * Test case, with Adobe Devanagari or Nirmala UI:
 1131|       |   *
 1132|       |   *   U+091F,U+094D,U+200C,U+092F,U+093F
 1133|       |   *   (Matra moves to the middle, after ZWNJ.)
 1134|       |   *
 1135|       |   *   U+091F,U+094D,U+200D,U+092F,U+093F
 1136|       |   *   (Matra does NOT move, stays to the left.)
 1137|       |   *
 1138|       |   * https://github.com/harfbuzz/harfbuzz/issues/1070
 1139|       |   */
 1140|       |
 1141|  2.46M|  if (start + 1 < end && start < base) /* Otherwise there can't be any pre-base matra characters. */
  ------------------
  |  Branch (1141:7): [True: 46.8k, False: 2.42M]
  |  Branch (1141:26): [True: 24.7k, False: 22.0k]
  ------------------
 1142|  24.7k|  {
 1143|       |    /* If we lost track of base, alas, position before last thingy. */
 1144|  24.7k|    unsigned int new_pos = base == end ? base - 2 : base - 1;
  ------------------
  |  Branch (1144:28): [True: 19.8k, False: 4.93k]
  ------------------
 1145|       |
 1146|       |    /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
 1147|       |     * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
 1148|       |     * We want to position matra after them.
 1149|       |     */
 1150|  24.7k|    if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
  ------------------
  |  Branch (1150:9): [True: 18.3k, False: 6.43k]
  |  Branch (1150:56): [True: 15.3k, False: 2.92k]
  ------------------
 1151|  15.3k|    {
 1152|  15.7k|    search:
 1153|  54.7k|      while (new_pos > start &&
  ------------------
  |  Branch (1153:14): [True: 41.6k, False: 13.0k]
  ------------------
 1154|  54.7k|	     !(is_one_of (info[new_pos], (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H))))))
  ------------------
  |  |   73|  41.6k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  41.6k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	     !(is_one_of (info[new_pos], (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H))))))
  ------------------
  |  |   73|  41.6k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  41.6k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	     !(is_one_of (info[new_pos], (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H))))))
  ------------------
  |  |   73|  41.6k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  41.6k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1154:7): [True: 38.9k, False: 2.67k]
  ------------------
 1155|  38.9k|	new_pos--;
 1156|       |
 1157|       |      /* If we found no Halant we are done.
 1158|       |       * Otherwise only proceed if the Halant does
 1159|       |       * not belong to the Matra itself! */
 1160|  15.7k|      if (is_halant (info[new_pos]) &&
  ------------------
  |  Branch (1160:11): [True: 2.42k, False: 13.3k]
  ------------------
 1161|  15.7k|	  info[new_pos].indic_position() != POS_PRE_M)
  ------------------
  |  |   39|  2.42k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  2.42k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1161:4): [True: 2.41k, False: 4]
  ------------------
 1162|  2.41k|      {
 1163|       |#if 0 // See comment above
 1164|       |	/* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
 1165|       |	if (new_pos + 1 < end && is_joiner (info[new_pos + 1]))
 1166|       |	  new_pos++;
 1167|       |#endif
 1168|  2.41k|	if (new_pos + 1 < end)
  ------------------
  |  Branch (1168:6): [True: 2.41k, False: 0]
  ------------------
 1169|  2.41k|	{
 1170|       |	  /* -> If ZWJ follows this halant, matra is NOT repositioned after this halant. */
 1171|  2.41k|	  if (info[new_pos + 1].indic_category() == I_Cat(ZWJ))
  ------------------
  |  |   38|  2.41k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  2.41k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	  if (info[new_pos + 1].indic_category() == I_Cat(ZWJ))
  ------------------
  |  |   44|  2.41k|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (1171:8): [True: 511, False: 1.90k]
  ------------------
 1172|    511|	  {
 1173|       |	    /* Keep searching. */
 1174|    511|	    if (new_pos > start)
  ------------------
  |  Branch (1174:10): [True: 384, False: 127]
  ------------------
 1175|    384|	    {
 1176|    384|	      new_pos--;
 1177|    384|	      goto search;
 1178|    384|	    }
 1179|    511|	  }
 1180|       |	  /* -> If ZWNJ follows this halant, position is moved after it.
 1181|       |	   *
 1182|       |	   * IMPLEMENTATION NOTES:
 1183|       |	   *
 1184|       |	   * This is taken care of by the state-machine. A Halant,ZWNJ is a terminating
 1185|       |	   * sequence for a consonant syllable; any pre-base matras occurring after it
 1186|       |	   * will belong to the subsequent syllable.
 1187|       |	   */
 1188|  2.41k|	}
 1189|  2.41k|      }
 1190|  13.3k|      else
 1191|  13.3k|	new_pos = start; /* No move. */
 1192|  15.7k|    }
 1193|       |
 1194|  24.7k|    if (start < new_pos && info[new_pos].indic_position () != POS_PRE_M)
  ------------------
  |  |   39|  4.16k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  4.16k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1194:9): [True: 4.16k, False: 20.5k]
  |  Branch (1194:28): [True: 4.10k, False: 58]
  ------------------
 1195|  4.10k|    {
 1196|       |      /* Now go see if there's actually any matras... */
 1197|   139k|      for (unsigned int i = new_pos; i > start; i--)
  ------------------
  |  Branch (1197:38): [True: 135k, False: 4.10k]
  ------------------
 1198|   135k|	if (info[i - 1].indic_position () == POS_PRE_M)
  ------------------
  |  |   39|   135k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   135k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1198:6): [True: 3.16k, False: 132k]
  ------------------
 1199|  3.16k|	{
 1200|  3.16k|	  unsigned int old_pos = i - 1;
 1201|  3.16k|	  if (old_pos < base && base <= new_pos) /* Shouldn't actually happen. */
  ------------------
  |  Branch (1201:8): [True: 3.16k, False: 0]
  |  Branch (1201:26): [True: 0, False: 3.16k]
  ------------------
 1202|      0|	    base--;
 1203|       |
 1204|  3.16k|	  hb_glyph_info_t tmp = info[old_pos];
 1205|  3.16k|	  memmove (&info[old_pos], &info[old_pos + 1], (new_pos - old_pos) * sizeof (info[0]));
 1206|  3.16k|	  info[new_pos] = tmp;
 1207|       |
 1208|       |	  /* Note: this merge_clusters() is intentionally *after* the reordering.
 1209|       |	   * Indic matra reordering is special and tricky... */
 1210|  3.16k|	  buffer->merge_clusters (new_pos, hb_min (end, base + 1));
 1211|       |
 1212|  3.16k|	  new_pos--;
 1213|  3.16k|	}
 1214|  20.6k|    } else {
 1215|   182k|      for (unsigned int i = start; i < base; i++)
  ------------------
  |  Branch (1215:36): [True: 161k, False: 20.4k]
  ------------------
 1216|   161k|	if (info[i].indic_position () == POS_PRE_M) {
  ------------------
  |  |   39|   161k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|   161k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1216:6): [True: 217, False: 161k]
  ------------------
 1217|    217|	  buffer->merge_clusters (i, hb_min (end, base + 1));
 1218|    217|	  break;
 1219|    217|	}
 1220|  20.6k|    }
 1221|  24.7k|  }
 1222|       |
 1223|       |
 1224|       |  /*   o Reorder reph:
 1225|       |   *
 1226|       |   *     Reph’s original position is always at the beginning of the syllable,
 1227|       |   *     (i.e. it is not reordered at the character reordering stage). However,
 1228|       |   *     it will be reordered according to the basic-forms shaping results.
 1229|       |   *     Possible positions for reph, depending on the script, are; after main,
 1230|       |   *     before post-base consonant forms, and after post-base consonant forms.
 1231|       |   */
 1232|       |
 1233|       |  /* Two cases:
 1234|       |   *
 1235|       |   * - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then
 1236|       |   *   we should only move it if the sequence ligated to the repha form.
 1237|       |   *
 1238|       |   * - If repha is encoded separately and in the logical position, we should only
 1239|       |   *   move it if it did NOT ligate.  If it ligated, it's probably the font trying
 1240|       |   *   to make it work without the reordering.
 1241|       |   */
 1242|  2.46M|  if (start + 1 < end &&
  ------------------
  |  Branch (1242:7): [True: 46.8k, False: 2.42M]
  ------------------
 1243|  2.46M|      info[start].indic_position() == POS_RA_TO_BECOME_REPH &&
  ------------------
  |  |   39|  46.8k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  46.8k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1243:7): [True: 355, False: 46.4k]
  ------------------
 1244|  2.46M|      ((info[start].indic_category() == I_Cat(Repha)) ^
  ------------------
  |  |   38|    355|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|    355|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    ((info[start].indic_category() == I_Cat(Repha)) ^
  ------------------
  |  |   44|    355|#define I_Cat(Cat) indic_syllable_machine_ex_##Cat
  ------------------
  |  Branch (1244:7): [True: 300, False: 55]
  ------------------
 1245|    355|       _hb_glyph_info_ligated_and_didnt_multiply (&info[start])))
 1246|    300|  {
 1247|    300|    unsigned int new_reph_pos;
 1248|    300|    reph_position_t reph_pos = indic_plan->config->reph_pos;
 1249|       |
 1250|       |    /*       1. If reph should be positioned after post-base consonant forms,
 1251|       |     *          proceed to step 5.
 1252|       |     */
 1253|    300|    if (reph_pos == REPH_POS_AFTER_POST)
  ------------------
  |  Branch (1253:9): [True: 31, False: 269]
  ------------------
 1254|     31|    {
 1255|     31|      goto reph_step_5;
 1256|     31|    }
 1257|       |
 1258|       |    /*       2. If the reph repositioning class is not after post-base: target
 1259|       |     *          position is after the first explicit halant glyph between the
 1260|       |     *          first post-reph consonant and last main consonant. If ZWJ or ZWNJ
 1261|       |     *          are following this halant, position is moved after it. If such
 1262|       |     *          position is found, this is the target position. Otherwise,
 1263|       |     *          proceed to the next step.
 1264|       |     *
 1265|       |     *          Note: in old-implementation fonts, where classifications were
 1266|       |     *          fixed in shaping engine, there was no case where reph position
 1267|       |     *          will be found on this step.
 1268|       |     */
 1269|    269|    {
 1270|    269|      new_reph_pos = start + 1;
 1271|  2.41k|      while (new_reph_pos < base && !is_halant (info[new_reph_pos]))
  ------------------
  |  Branch (1271:14): [True: 2.14k, False: 263]
  |  Branch (1271:37): [True: 2.14k, False: 6]
  ------------------
 1272|  2.14k|	new_reph_pos++;
 1273|       |
 1274|    269|      if (new_reph_pos < base && is_halant (info[new_reph_pos]))
  ------------------
  |  Branch (1274:11): [True: 6, False: 263]
  |  Branch (1274:34): [True: 6, False: 0]
  ------------------
 1275|      6|      {
 1276|       |	/* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
 1277|      6|	if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
  ------------------
  |  Branch (1277:6): [True: 2, False: 4]
  |  Branch (1277:33): [True: 1, False: 1]
  ------------------
 1278|      1|	  new_reph_pos++;
 1279|      6|	goto reph_move;
 1280|      6|      }
 1281|    269|    }
 1282|       |
 1283|       |    /*       3. If reph should be repositioned after the main consonant: find the
 1284|       |     *          first consonant not ligated with main, or find the first
 1285|       |     *          consonant that is not a potential pre-base-reordering Ra.
 1286|       |     */
 1287|    263|    if (reph_pos == REPH_POS_AFTER_MAIN)
  ------------------
  |  Branch (1287:9): [True: 237, False: 26]
  ------------------
 1288|    237|    {
 1289|    237|      new_reph_pos = base;
 1290|    597|      while (new_reph_pos + 1 < end && info[new_reph_pos + 1].indic_position() <= POS_AFTER_MAIN)
  ------------------
  |  |   39|    377|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|    377|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1290:14): [True: 377, False: 220]
  |  Branch (1290:40): [True: 360, False: 17]
  ------------------
 1291|    360|	new_reph_pos++;
 1292|    237|      if (new_reph_pos < end)
  ------------------
  |  Branch (1292:11): [True: 228, False: 9]
  ------------------
 1293|    228|	goto reph_move;
 1294|    237|    }
 1295|       |
 1296|       |    /*       4. If reph should be positioned before post-base consonant, find
 1297|       |     *          first post-base classified consonant not ligated with main. If no
 1298|       |     *          consonant is found, the target position should be before the
 1299|       |     *          first matra, syllable modifier sign or vedic sign.
 1300|       |     */
 1301|       |    /* This is our take on what step 4 is trying to say (and failing, BADLY). */
 1302|     35|    if (reph_pos == REPH_POS_AFTER_SUB)
  ------------------
  |  Branch (1302:9): [True: 15, False: 20]
  ------------------
 1303|     15|    {
 1304|     15|      new_reph_pos = base;
 1305|     27|      while (new_reph_pos + 1 < end &&
  ------------------
  |  Branch (1305:14): [True: 13, False: 14]
  ------------------
 1306|     27|	     !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
  ------------------
  |  |   74|     13|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 13, False: 0]
  |  |  ------------------
  ------------------
              	     !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
  ------------------
  |  |   73|     13|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     13|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	     !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
  ------------------
  |  |   73|     13|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     13|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	     !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
  ------------------
  |  |   73|     13|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     13|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1306:7): [True: 12, False: 1]
  ------------------
 1307|     12|	new_reph_pos++;
 1308|     15|      if (new_reph_pos < end)
  ------------------
  |  Branch (1308:11): [True: 15, False: 0]
  ------------------
 1309|     15|	goto reph_move;
 1310|     15|    }
 1311|       |
 1312|       |    /*       5. If no consonant is found in steps 3 or 4, move reph to a position
 1313|       |     *          immediately before the first post-base matra, syllable modifier
 1314|       |     *          sign or vedic sign that has a reordering class after the intended
 1315|       |     *          reph position. For example, if the reordering position for reph
 1316|       |     *          is post-main, it will skip above-base matras that also have a
 1317|       |     *          post-main position.
 1318|       |     */
 1319|     51|    reph_step_5:
 1320|     51|    {
 1321|       |      /* Copied from step 2. */
 1322|     51|      new_reph_pos = start + 1;
 1323|    642|      while (new_reph_pos < base && !is_halant (info[new_reph_pos]))
  ------------------
  |  Branch (1323:14): [True: 612, False: 30]
  |  Branch (1323:37): [True: 591, False: 21]
  ------------------
 1324|    591|	new_reph_pos++;
 1325|       |
 1326|     51|      if (new_reph_pos < base && is_halant (info[new_reph_pos]))
  ------------------
  |  Branch (1326:11): [True: 21, False: 30]
  |  Branch (1326:34): [True: 21, False: 0]
  ------------------
 1327|     21|      {
 1328|       |	/* ->If ZWJ or ZWNJ are following this halant, position is moved after it. */
 1329|     21|	if (new_reph_pos + 1 < base && is_joiner (info[new_reph_pos + 1]))
  ------------------
  |  Branch (1329:6): [True: 20, False: 1]
  |  Branch (1329:33): [True: 0, False: 20]
  ------------------
 1330|      0|	  new_reph_pos++;
 1331|     21|	goto reph_move;
 1332|     21|      }
 1333|     51|    }
 1334|       |    /* See https://github.com/harfbuzz/harfbuzz/issues/2298#issuecomment-615318654 */
 1335|       |
 1336|       |    /*       6. Otherwise, reorder reph to the end of the syllable.
 1337|       |     */
 1338|     30|    {
 1339|     30|      new_reph_pos = end - 1;
 1340|     31|      while (new_reph_pos > start && info[new_reph_pos].indic_position() == POS_SMVD)
  ------------------
  |  |   39|     30|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|     30|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1340:14): [True: 30, False: 1]
  |  Branch (1340:38): [True: 1, False: 29]
  ------------------
 1341|      1|	new_reph_pos--;
 1342|       |
 1343|       |      /*
 1344|       |       * If the Reph is to be ending up after a Matra,Halant sequence,
 1345|       |       * position it before that Halant so it can interact with the Matra.
 1346|       |       * However, if it's a plain Consonant,Halant we shouldn't do that.
 1347|       |       * Uniscribe doesn't do this.
 1348|       |       * TEST: U+0930,U+094D,U+0915,U+094B,U+094D
 1349|       |       */
 1350|     30|      if (!indic_plan->uniscribe_bug_compatible &&
  ------------------
  |  Branch (1350:11): [True: 30, False: 0]
  ------------------
 1351|     30|	  unlikely (is_halant (info[new_reph_pos])))
  ------------------
  |  |  259|     30|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 28]
  |  |  ------------------
  ------------------
 1352|      2|      {
 1353|      3|	for (unsigned int i = base + 1; i < new_reph_pos; i++)
  ------------------
  |  Branch (1353:34): [True: 1, False: 2]
  ------------------
 1354|      1|	  if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   74|      1|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 1, False: 0]
  |  |  ------------------
  ------------------
              	  if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|      1|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|      1|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              	  if (FLAG_UNSAFE (info[i].indic_category()) & (FLAG (I_Cat(M)) | FLAG (I_Cat(MPst))))
  ------------------
  |  |   73|      1|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|      1|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1354:8): [True: 0, False: 1]
  ------------------
 1355|      0|	  {
 1356|       |	    /* Ok, got it. */
 1357|      0|	    new_reph_pos--;
 1358|      0|	  }
 1359|      2|      }
 1360|       |
 1361|     30|      goto reph_move;
 1362|     51|    }
 1363|       |
 1364|    300|    reph_move:
 1365|    300|    {
 1366|       |      /* Move */
 1367|    300|      buffer->merge_clusters (start, new_reph_pos + 1);
 1368|    300|      hb_glyph_info_t reph = info[start];
 1369|    300|      memmove (&info[start], &info[start + 1], (new_reph_pos - start) * sizeof (info[0]));
 1370|    300|      info[new_reph_pos] = reph;
 1371|       |
 1372|    300|      if (start < base && base <= new_reph_pos)
  ------------------
  |  Branch (1372:11): [True: 299, False: 1]
  |  Branch (1372:27): [True: 260, False: 39]
  ------------------
 1373|    260|	base--;
 1374|    300|    }
 1375|    300|  }
 1376|       |
 1377|       |
 1378|       |  /*   o Reorder pre-base-reordering consonants:
 1379|       |   *
 1380|       |   *     If a pre-base-reordering consonant is found, reorder it according to
 1381|       |   *     the following rules:
 1382|       |   */
 1383|       |
 1384|  2.46M|  if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base-reordering Ra. */
  ------------------
  |  Branch (1384:7): [True: 2.04M, False: 421k]
  |  Branch (1384:19): [True: 5.62k, False: 2.04M]
  ------------------
 1385|  5.62k|  {
 1386|   214k|    for (unsigned int i = base + 1; i < end; i++)
  ------------------
  |  Branch (1386:37): [True: 208k, False: 5.36k]
  ------------------
 1387|   208k|      if ((info[i].mask & indic_plan->mask_array[INDIC_PREF]) != 0)
  ------------------
  |  Branch (1387:11): [True: 260, False: 208k]
  ------------------
 1388|    260|      {
 1389|       |	/*       1. Only reorder a glyph produced by substitution during application
 1390|       |	 *          of the <pref> feature. (Note that a font may shape a Ra consonant with
 1391|       |	 *          the feature generally but block it in certain contexts.)
 1392|       |	 */
 1393|       |	/* Note: We just check that something got substituted.  We don't check that
 1394|       |	 * the <pref> feature actually did it...
 1395|       |	 *
 1396|       |	 * Reorder pref only if it ligated. */
 1397|    260|	if (_hb_glyph_info_ligated_and_didnt_multiply (&info[i]))
  ------------------
  |  Branch (1397:6): [True: 260, False: 0]
  ------------------
 1398|    260|	{
 1399|       |	  /*
 1400|       |	   *       2. Try to find a target position the same way as for pre-base matra.
 1401|       |	   *          If it is found, reorder pre-base consonant glyph.
 1402|       |	   *
 1403|       |	   *       3. If position is not found, reorder immediately before main
 1404|       |	   *          consonant.
 1405|       |	   */
 1406|       |
 1407|    260|	  unsigned int new_pos = base;
 1408|       |	  /* Malayalam / Tamil do not have "half" forms or explicit virama forms.
 1409|       |	   * The glyphs formed by 'half' are Chillus or ligated explicit viramas.
 1410|       |	   * We want to position matra after them.
 1411|       |	   */
 1412|    260|	  if (buffer->props.script != HB_SCRIPT_MALAYALAM && buffer->props.script != HB_SCRIPT_TAMIL)
  ------------------
  |  Branch (1412:8): [True: 14, False: 246]
  |  Branch (1412:55): [True: 14, False: 0]
  ------------------
 1413|     14|	  {
 1414|     74|	    while (new_pos > start &&
  ------------------
  |  Branch (1414:13): [True: 63, False: 11]
  ------------------
 1415|     74|		   !(is_one_of (info[new_pos - 1], FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|     63|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     63|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              		   !(is_one_of (info[new_pos - 1], FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|     63|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     63|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
              		   !(is_one_of (info[new_pos - 1], FLAG (I_Cat(M)) | FLAG (I_Cat(MPst)) | FLAG (I_Cat(H)))))
  ------------------
  |  |   73|     63|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|     63|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (1415:6): [True: 60, False: 3]
  ------------------
 1416|     60|	      new_pos--;
 1417|     14|	  }
 1418|       |
 1419|    260|	  if (new_pos > start && is_halant (info[new_pos - 1]))
  ------------------
  |  Branch (1419:8): [True: 8, False: 252]
  |  Branch (1419:27): [True: 0, False: 8]
  ------------------
 1420|      0|	  {
 1421|       |	    /* -> If ZWJ or ZWNJ follow this halant, position is moved after it. */
 1422|      0|	    if (new_pos < end && is_joiner (info[new_pos]))
  ------------------
  |  Branch (1422:10): [True: 0, False: 0]
  |  Branch (1422:27): [True: 0, False: 0]
  ------------------
 1423|      0|	      new_pos++;
 1424|      0|	  }
 1425|       |
 1426|    260|	  {
 1427|    260|	    unsigned int old_pos = i;
 1428|       |
 1429|    260|	    buffer->merge_clusters (new_pos, old_pos + 1);
 1430|    260|	    hb_glyph_info_t tmp = info[old_pos];
 1431|    260|	    memmove (&info[new_pos + 1], &info[new_pos], (old_pos - new_pos) * sizeof (info[0]));
 1432|    260|	    info[new_pos] = tmp;
 1433|       |
 1434|    260|	    if (new_pos <= base && base < old_pos)
  ------------------
  |  Branch (1434:10): [True: 260, False: 0]
  |  Branch (1434:29): [True: 260, False: 0]
  ------------------
 1435|    260|	      base++;
 1436|    260|	  }
 1437|    260|	}
 1438|       |
 1439|    260|	break;
 1440|    260|      }
 1441|  5.62k|  }
 1442|       |
 1443|       |
 1444|       |  /* Apply 'init' to the Left Matra if it's a word start. */
 1445|  2.46M|  if (info[start].indic_position () == POS_PRE_M)
  ------------------
  |  |   39|  2.46M|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  2.46M|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (1445:7): [True: 262, False: 2.46M]
  ------------------
 1446|    262|  {
 1447|    262|    if (!start ||
  ------------------
  |  Branch (1447:9): [True: 63, False: 199]
  ------------------
 1448|    262|	!(FLAG_UNSAFE (_hb_glyph_info_get_general_category (&info[start - 1])) &
  ------------------
  |  |   74|    199|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 199, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1448:2): [True: 96, False: 103]
  ------------------
 1449|    199|	 FLAG_RANGE (HB_UNICODE_GENERAL_CATEGORY_FORMAT, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  ------------------
  |  |   75|    199|#define FLAG_RANGE(x,y) (static_assert_expr ((x) < (y)) + FLAG(y+1) - FLAG(x))
  |  |  ------------------
  |  |  |  |   59|    199|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  |  |               #define FLAG_RANGE(x,y) (static_assert_expr ((x) < (y)) + FLAG(y+1) - FLAG(x))
  |  |  ------------------
  |  |  |  |   73|    199|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    199|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define FLAG_RANGE(x,y) (static_assert_expr ((x) < (y)) + FLAG(y+1) - FLAG(x))
  |  |  ------------------
  |  |  |  |   73|    199|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    199|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1450|    159|      info[start].mask |= indic_plan->mask_array[INDIC_INIT];
 1451|    103|    else
 1452|    103|      buffer->unsafe_to_break (start - 1, start + 1);
 1453|    262|  }
 1454|       |
 1455|       |
 1456|       |  /*
 1457|       |   * Finish off the clusters and go home!
 1458|       |   */
 1459|  2.46M|  if (indic_plan->uniscribe_bug_compatible)
  ------------------
  |  Branch (1459:7): [True: 0, False: 2.46M]
  ------------------
 1460|      0|  {
 1461|      0|    switch ((hb_tag_t) plan->props.script)
 1462|      0|    {
 1463|      0|      case HB_SCRIPT_TAMIL:
  ------------------
  |  Branch (1463:7): [True: 0, False: 0]
  ------------------
 1464|      0|	break;
 1465|       |
 1466|      0|      default:
  ------------------
  |  Branch (1466:7): [True: 0, False: 0]
  ------------------
 1467|       |	/* Uniscribe merges the entire syllable into a single cluster... Except for Tamil.
 1468|       |	 * This means, half forms are submerged into the main consonant's cluster.
 1469|       |	 * This is unnecessary, and makes cursor positioning harder, but that's what
 1470|       |	 * Uniscribe does. */
 1471|      0|	buffer->merge_clusters (start, end);
 1472|      0|	break;
 1473|      0|    }
 1474|      0|  }
 1475|  2.46M|}
hb-ot-shaper-indic.cc:_ZL9is_halantRK15hb_glyph_info_t:
   86|  69.9k|{
   87|  69.9k|  return is_one_of (info, FLAG (I_Cat(H)));
  ------------------
  |  |   73|  69.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  69.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
   88|  69.9k|}
hb-ot-shaper-indic.cc:_ZL23override_features_indicP21hb_ot_shape_planner_t:
  269|  2.63k|{
  270|  2.63k|  plan->map.disable_feature (HB_TAG('l','i','g','a'));
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  271|  2.63k|  plan->map.add_gsub_pause (hb_syllabic_clear_var); // Don't need syllables anymore, use stop to free buffer var
  272|  2.63k|}
hb-ot-shaper-indic.cc:_ZL17data_create_indicPK18hb_ot_shape_plan_t:
  317|  2.63k|{
  318|  2.63k|  indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) hb_calloc (1, sizeof (indic_shape_plan_t));
  ------------------
  |  |  234|  2.63k|#define hb_calloc hb_calloc_impl
  ------------------
  319|  2.63k|  if (unlikely (!indic_plan))
  ------------------
  |  |  259|  2.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 6, False: 2.63k]
  |  |  ------------------
  ------------------
  320|      6|    return nullptr;
  321|       |
  322|  2.63k|  indic_plan->config = &indic_configs[0];
  323|  15.0k|  for (unsigned int i = 1; i < ARRAY_LENGTH (indic_configs); i++)
  ------------------
  |  Branch (323:28): [True: 15.0k, False: 0]
  ------------------
  324|  15.0k|    if (plan->props.script == indic_configs[i].script) {
  ------------------
  |  Branch (324:9): [True: 2.63k, False: 12.3k]
  ------------------
  325|  2.63k|      indic_plan->config = &indic_configs[i];
  326|  2.63k|      break;
  327|  2.63k|    }
  328|       |
  329|  2.63k|  indic_plan->is_old_spec = indic_plan->config->has_old_spec && ((plan->map.chosen_script[0] & 0x000000FFu) != '2');
  ------------------
  |  Branch (329:29): [True: 2.63k, False: 0]
  |  Branch (329:65): [True: 2.46k, False: 163]
  ------------------
  330|  2.63k|#ifndef HB_NO_UNISCRIBE_BUG_COMPATIBLE
  331|  2.63k|  indic_plan->uniscribe_bug_compatible = hb_options ().uniscribe_bug_compatible;
  332|  2.63k|#endif
  333|  2.63k|  indic_plan->virama_glyph = -1;
  334|       |
  335|       |  /* Use zero-context would_substitute() matching for new-spec of the main
  336|       |   * Indic scripts, and scripts with one spec only, but not for old-specs.
  337|       |   * The new-spec for all dual-spec scripts says zero-context matching happens.
  338|       |   *
  339|       |   * However, testing with Malayalam shows that old and new spec both allow
  340|       |   * context.  Testing with Bengali new-spec however shows that it doesn't.
  341|       |   * So, the heuristic here is the way it is.  It should *only* be changed,
  342|       |   * as we discover more cases of what Windows does.  DON'T TOUCH OTHERWISE.
  343|       |   */
  344|  2.63k|  bool zero_context = !indic_plan->is_old_spec && plan->props.script != HB_SCRIPT_MALAYALAM;
  ------------------
  |  Branch (344:23): [True: 163, False: 2.46k]
  |  Branch (344:51): [True: 19, False: 144]
  ------------------
  345|  2.63k|  indic_plan->rphf.init (&plan->map, HB_TAG('r','p','h','f'), zero_context);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  346|  2.63k|  indic_plan->pref.init (&plan->map, HB_TAG('p','r','e','f'), zero_context);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  347|  2.63k|  indic_plan->blwf.init (&plan->map, HB_TAG('b','l','w','f'), zero_context);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  348|  2.63k|  indic_plan->pstf.init (&plan->map, HB_TAG('p','s','t','f'), zero_context);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  349|  2.63k|  indic_plan->vatu.init (&plan->map, HB_TAG('v','a','t','u'), zero_context);
  ------------------
  |  |  179|  2.63k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  350|       |
  351|  47.3k|  for (unsigned int i = 0; i < ARRAY_LENGTH (indic_plan->mask_array); i++)
  ------------------
  |  Branch (351:28): [True: 44.7k, False: 2.63k]
  ------------------
  352|  44.7k|    indic_plan->mask_array[i] = (indic_features[i].flags & F_GLOBAL) ?
  ------------------
  |  Branch (352:33): [True: 26.3k, False: 18.4k]
  ------------------
  353|  26.3k|				 0 : plan->map.get_1_mask (indic_features[i].tag);
  354|       |
  355|  2.63k|  return indic_plan;
  356|  2.63k|}
_ZN35hb_indic_would_substitute_feature_t4initEPK11hb_ot_map_tjb:
   93|  13.1k|  {
   94|  13.1k|    zero_context = zero_context_;
   95|  13.1k|    lookups = map->get_stage_lookups (0/*GSUB*/,
   96|  13.1k|				      map->get_feature_stage (0/*GSUB*/, feature_tag));
   97|  13.1k|  }
hb-ot-shaper-indic.cc:_ZL18data_destroy_indicPv:
  360|  2.63k|{
  361|  2.63k|  hb_free (data);
  ------------------
  |  |  236|  2.63k|#define hb_free hb_free_impl
  ------------------
  362|  2.63k|}
hb-ot-shaper-indic.cc:_ZL21preprocess_text_indicPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
 1503|  2.63k|{
 1504|  2.63k|  const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
 1505|  2.63k|  if (!indic_plan->uniscribe_bug_compatible)
  ------------------
  |  Branch (1505:7): [True: 2.63k, False: 0]
  ------------------
 1506|  2.63k|    _hb_preprocess_text_vowel_constraints (plan, buffer, font);
 1507|  2.63k|}
hb-ot-shaper-indic.cc:_ZL15decompose_indicPK31hb_ot_shape_normalize_context_tjPjS2_:
 1514|  43.0k|{
 1515|  43.0k|  switch (ab)
  ------------------
  |  Branch (1515:11): [True: 42.9k, False: 58]
  ------------------
 1516|  43.0k|  {
 1517|       |    /* Don't decompose these. */
 1518|     16|    case 0x0931u  : return false; /* DEVANAGARI LETTER RRA */
  ------------------
  |  Branch (1518:5): [True: 16, False: 43.0k]
  ------------------
 1519|       |    // https://github.com/harfbuzz/harfbuzz/issues/779
 1520|     11|    case 0x09DCu  : return false; /* BENGALI LETTER RRA */
  ------------------
  |  Branch (1520:5): [True: 11, False: 43.0k]
  ------------------
 1521|     12|    case 0x09DDu  : return false; /* BENGALI LETTER RHA */
  ------------------
  |  Branch (1521:5): [True: 12, False: 43.0k]
  ------------------
 1522|     19|    case 0x0B94u  : return false; /* TAMIL LETTER AU */
  ------------------
  |  Branch (1522:5): [True: 19, False: 43.0k]
  ------------------
 1523|       |
 1524|       |
 1525|       |    /*
 1526|       |     * Decompose split matras that don't have Unicode decompositions.
 1527|       |     */
 1528|       |
 1529|       |#if 0
 1530|       |    /* Gujarati */
 1531|       |    /* This one has no decomposition in Unicode, but needs no decomposition either. */
 1532|       |    /* case 0x0AC9u  : return false; */
 1533|       |
 1534|       |    /* Oriya */
 1535|       |    case 0x0B57u  : *a = no decomp, -> RIGHT; return true;
 1536|       |#endif
 1537|  43.0k|  }
 1538|       |
 1539|  42.9k|  return (bool) c->unicode->decompose (ab, a, b);
 1540|  43.0k|}
hb-ot-shaper-indic.cc:_ZL13compose_indicPK31hb_ot_shape_normalize_context_tjjPj:
 1547|  5.59k|{
 1548|       |  /* Avoid recomposing split matras. */
 1549|  5.59k|  if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
  ------------------
  |  |  355|  5.59k|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|  5.59k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 5.59k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (355:2): [True: 1.28k, False: 4.31k]
  |  |  ------------------
  |  |  356|  5.59k|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  5.59k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  5.59k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  5.59k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  5.59k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  5.59k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  5.59k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|  5.59k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  5.59k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1550|  1.28k|    return false;
 1551|       |
 1552|       |  /* Composition-exclusion exceptions that we want to recompose. */
 1553|  4.31k|  if (a == 0x09AFu && b == 0x09BCu) { *ab = 0x09DFu; return true; }
  ------------------
  |  Branch (1553:7): [True: 2, False: 4.31k]
  |  Branch (1553:23): [True: 1, False: 1]
  ------------------
 1554|       |
 1555|  4.31k|  return (bool) c->unicode->compose (a, b, ab);
 1556|  4.31k|}
hb-ot-shaper-indic.cc:_ZL17setup_masks_indicPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  403|  2.63k|{
  404|  2.63k|  HB_BUFFER_ALLOCATE_VAR (buffer, indic_category);
  ------------------
  |  |  669|  2.63k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  2.63k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.63k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  405|  2.63k|  HB_BUFFER_ALLOCATE_VAR (buffer, indic_position);
  ------------------
  |  |  669|  2.63k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  2.63k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  2.63k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  406|       |
  407|       |  /* We cannot setup masks here.  We save information about characters
  408|       |   * and setup masks later on in a pause-callback. */
  409|       |
  410|  2.63k|  unsigned int count = buffer->len;
  411|  2.63k|  hb_glyph_info_t *info = buffer->info;
  412|  45.6k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (412:28): [True: 43.0k, False: 2.63k]
  ------------------
  413|  43.0k|    set_indic_properties (info[i]);
  414|  2.63k|}
hb-ot-shaper-indic.cc:_ZL20set_indic_propertiesR15hb_glyph_info_t:
   44|  43.0k|{
   45|  43.0k|  hb_codepoint_t u = info.codepoint;
   46|  43.0k|  unsigned int type = hb_indic_get_categories (u);
   47|       |
   48|  43.0k|  info.indic_category() = (indic_category_t) (type & 0xFFu);
  ------------------
  |  |   38|  43.0k|#define indic_category() ot_shaper_var_u8_category() /* indic_category_t */
  |  |  ------------------
  |  |  |  |   38|  43.0k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
   49|  43.0k|  info.indic_position() = (indic_position_t) (type >> 8);
  ------------------
  |  |   39|  43.0k|#define indic_position() ot_shaper_var_u8_auxiliary() /* indic_position_t */
  |  |  ------------------
  |  |  |  |   39|  43.0k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
   50|  43.0k|}

_Z20find_syllables_khmerP11hb_buffer_t:
  292|    258|{
  293|    258|  unsigned int p, pe, eof, ts, te, act HB_UNUSED;
  294|    258|  int cs;
  295|    258|  hb_glyph_info_t *info = buffer->info;
  296|       |  
  297|    258|#line 287 "hb-ot-shaper-khmer-machine.hh"
  298|    258|	{
  299|    258|	cs = khmer_syllable_machine_start;
  300|    258|	ts = 0;
  301|    258|	te = 0;
  302|    258|	act = 0;
  303|    258|	}
  304|       |
  305|    258|#line 122 "hb-ot-shaper-khmer-machine.rl"
  306|       |
  307|       |
  308|    258|  p = 0;
  309|    258|  pe = eof = buffer->len;
  310|       |
  311|    258|  unsigned int syllable_serial = 1;
  312|       |  
  313|    258|#line 299 "hb-ot-shaper-khmer-machine.hh"
  314|    258|	{
  315|    258|	int _slen;
  316|    258|	int _trans;
  317|    258|	const unsigned char *_keys;
  318|    258|	const char *_inds;
  319|    258|	if ( p == pe )
  ------------------
  |  Branch (319:7): [True: 1, False: 257]
  ------------------
  320|      1|		goto _test_eof;
  321|  2.01M|_resume:
  322|  2.01M|	switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
  ------------------
  |  Branch (322:11): [True: 1.87M, False: 145k]
  ------------------
  323|   145k|	case 7:
  ------------------
  |  Branch (323:2): [True: 145k, False: 1.87M]
  ------------------
  324|   145k|#line 1 "NONE"
  325|   145k|	{ts = p;}
  326|   145k|	break;
  327|  2.01M|#line 311 "hb-ot-shaper-khmer-machine.hh"
  328|  2.01M|	}
  329|       |
  330|  2.01M|	_keys = _khmer_syllable_machine_trans_keys + (cs<<1);
  331|  2.01M|	_inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
  332|       |
  333|  2.01M|	_slen = _khmer_syllable_machine_key_spans[cs];
  334|  2.01M|	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
  ------------------
  |  |   38|  2.01M|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  2.01M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (334:18): [True: 2.01M, False: 0]
  |  Branch (334:31): [True: 1.89M, False: 129k]
  ------------------
  335|  2.01M|		( info[p].khmer_category()) <= _keys[1] ?
  ------------------
  |  |   38|  1.89M|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  1.89M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (335:3): [True: 1.88M, False: 352]
  ------------------
  336|  1.88M|		( info[p].khmer_category()) - _keys[0] : _slen ];
  ------------------
  |  |   38|  1.88M|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  1.88M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  337|       |
  338|  2.02M|_eof_trans:
  339|  2.02M|	cs = _khmer_syllable_machine_trans_targs[_trans];
  340|       |
  341|  2.02M|	if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
  ------------------
  |  Branch (341:7): [True: 1.84M, False: 178k]
  ------------------
  342|  1.84M|		goto _again;
  343|       |
  344|   178k|	switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
  ------------------
  |  Branch (344:11): [True: 0, False: 178k]
  ------------------
  345|  12.8k|	case 2:
  ------------------
  |  Branch (345:2): [True: 12.8k, False: 166k]
  ------------------
  346|  12.8k|#line 1 "NONE"
  347|  12.8k|	{te = p+1;}
  348|  12.8k|	break;
  349|   125k|	case 8:
  ------------------
  |  Branch (349:2): [True: 125k, False: 53.0k]
  ------------------
  350|   125k|#line 98 "hb-ot-shaper-khmer-machine.rl"
  351|   125k|	{te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
  ------------------
  |  |  282|   125k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|   125k|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|   125k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|   251k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 125k, False: 125k]
  |  |  ------------------
  |  |  285|   125k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   125k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|   125k|    syllable_serial++; \
  |  |  287|   125k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 8.33k, False: 117k]
  |  |  ------------------
  |  |  288|   125k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|   125k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|   125k|	break;
  353|  6.79k|	case 10:
  ------------------
  |  Branch (353:2): [True: 6.79k, False: 172k]
  ------------------
  354|  6.79k|#line 96 "hb-ot-shaper-khmer-machine.rl"
  355|  6.79k|	{te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
  ------------------
  |  |  282|  6.79k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  6.79k|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|  6.79k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|  15.3k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 8.52k, False: 6.79k]
  |  |  ------------------
  |  |  285|  8.52k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  8.52k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|  6.79k|    syllable_serial++; \
  |  |  287|  6.79k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 452, False: 6.34k]
  |  |  ------------------
  |  |  288|  6.79k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  6.79k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|  6.79k|	break;
  357|  6.95k|	case 11:
  ------------------
  |  Branch (357:2): [True: 6.95k, False: 171k]
  ------------------
  358|  6.95k|#line 97 "hb-ot-shaper-khmer-machine.rl"
  359|  6.95k|	{te = p;p--;{ found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  282|  6.95k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  6.95k|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|  6.95k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|  23.4k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 16.5k, False: 6.95k]
  |  |  ------------------
  |  |  285|  16.5k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  16.5k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|  6.95k|    syllable_serial++; \
  |  |  287|  6.95k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 456, False: 6.49k]
  |  |  ------------------
  |  |  288|  6.95k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  6.95k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|  6.95k|	break;
  361|    106|	case 12:
  ------------------
  |  Branch (361:2): [True: 106, False: 178k]
  ------------------
  362|    106|#line 98 "hb-ot-shaper-khmer-machine.rl"
  363|    106|	{te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
  ------------------
  |  |  282|    106|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|    106|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|    106|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|    212|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 106, False: 106]
  |  |  ------------------
  |  |  285|    106|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    106|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|    106|    syllable_serial++; \
  |  |  287|    106|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 9, False: 97]
  |  |  ------------------
  |  |  288|    106|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|    106|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  364|    106|	break;
  365|     24|	case 1:
  ------------------
  |  Branch (365:2): [True: 24, False: 178k]
  ------------------
  366|     24|#line 96 "hb-ot-shaper-khmer-machine.rl"
  367|     24|	{{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
  ------------------
  |  |  282|     24|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     24|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|     24|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|    304|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 280, False: 24]
  |  |  ------------------
  |  |  285|    280|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    280|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|     24|    syllable_serial++; \
  |  |  287|     24|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 1, False: 23]
  |  |  ------------------
  |  |  288|     24|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     24|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|     24|	break;
  369|     24|	case 3:
  ------------------
  |  Branch (369:2): [True: 24, False: 178k]
  ------------------
  370|     24|#line 97 "hb-ot-shaper-khmer-machine.rl"
  371|     24|	{{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  282|     24|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     24|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|     24|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|  1.16k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 1.13k, False: 24]
  |  |  ------------------
  |  |  285|  1.13k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  1.13k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|     24|    syllable_serial++; \
  |  |  287|     24|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 1, False: 23]
  |  |  ------------------
  |  |  288|     24|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     24|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|     24|	break;
  373|  5.98k|	case 5:
  ------------------
  |  Branch (373:2): [True: 5.98k, False: 172k]
  ------------------
  374|  5.98k|#line 1 "NONE"
  375|  5.98k|	{	switch( act ) {
  ------------------
  |  Branch (375:12): [True: 0, False: 5.98k]
  ------------------
  376|     19|	case 2:
  ------------------
  |  Branch (376:2): [True: 19, False: 5.96k]
  ------------------
  377|     19|	{{p = ((te))-1;} found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
  ------------------
  |  |  282|     19|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     19|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|     19|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|    890|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 871, False: 19]
  |  |  ------------------
  |  |  285|    871|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    871|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|     19|    syllable_serial++; \
  |  |  287|     19|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 1, False: 18]
  |  |  ------------------
  |  |  288|     19|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     19|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  378|     19|	break;
  379|  5.96k|	case 3:
  ------------------
  |  Branch (379:2): [True: 5.96k, False: 19]
  ------------------
  380|  5.96k|	{{p = ((te))-1;} found_syllable (khmer_non_khmer_cluster); }
  ------------------
  |  |  282|  5.96k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  5.96k|#define HB_STMT_START do
  |  |  ------------------
  |  |  283|  5.96k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (283:9): [Folded - Ignored]
  |  |  ------------------
  |  |  284|  11.9k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (284:31): [True: 5.96k, False: 5.96k]
  |  |  ------------------
  |  |  285|  5.96k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  5.96k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  286|  5.96k|    syllable_serial++; \
  |  |  287|  5.96k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (287:9): [True: 397, False: 5.57k]
  |  |  ------------------
  |  |  288|  5.96k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  5.96k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|  5.96k|	break;
  382|  5.98k|	}
  383|  5.98k|	}
  384|  5.98k|	break;
  385|  14.2k|	case 4:
  ------------------
  |  Branch (385:2): [True: 14.2k, False: 164k]
  ------------------
  386|  14.2k|#line 1 "NONE"
  387|  14.2k|	{te = p+1;}
  388|  14.2k|#line 97 "hb-ot-shaper-khmer-machine.rl"
  389|  14.2k|	{act = 2;}
  390|  14.2k|	break;
  391|  6.08k|	case 9:
  ------------------
  |  Branch (391:2): [True: 6.08k, False: 172k]
  ------------------
  392|  6.08k|#line 1 "NONE"
  393|  6.08k|	{te = p+1;}
  394|  6.08k|#line 98 "hb-ot-shaper-khmer-machine.rl"
  395|  6.08k|	{act = 3;}
  396|  6.08k|	break;
  397|   178k|#line 368 "hb-ot-shaper-khmer-machine.hh"
  398|   178k|	}
  399|       |
  400|  2.02M|_again:
  401|  2.02M|	switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
  ------------------
  |  Branch (401:11): [True: 1.87M, False: 145k]
  ------------------
  402|   145k|	case 6:
  ------------------
  |  Branch (402:2): [True: 145k, False: 1.87M]
  ------------------
  403|   145k|#line 1 "NONE"
  404|   145k|	{ts = 0;}
  405|   145k|	break;
  406|  2.02M|#line 375 "hb-ot-shaper-khmer-machine.hh"
  407|  2.02M|	}
  408|       |
  409|  2.02M|	if ( ++p != pe )
  ------------------
  |  Branch (409:7): [True: 2.01M, False: 3.01k]
  ------------------
  410|  2.01M|		goto _resume;
  411|  3.01k|	_test_eof: {}
  412|  3.01k|	if ( p == eof )
  ------------------
  |  Branch (412:7): [True: 3.01k, False: 0]
  ------------------
  413|  3.01k|	{
  414|  3.01k|	if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
  ------------------
  |  Branch (414:7): [True: 2.75k, False: 258]
  ------------------
  415|  2.75k|		_trans = _khmer_syllable_machine_eof_trans[cs] - 1;
  416|  2.75k|		goto _eof_trans;
  417|  2.75k|	}
  418|  3.01k|	}
  419|       |
  420|  3.01k|	}
  421|       |
  422|  3.01k|#line 130 "hb-ot-shaper-khmer-machine.rl"
  423|       |
  424|  3.01k|}

hb-ot-shaper-khmer.cc:_ZL22collect_features_khmerP21hb_ot_shape_planner_t:
  103|    262|{
  104|    262|  hb_ot_map_builder_t *map = &plan->map;
  105|       |
  106|       |  /* Do this before any lookups have been applied. */
  107|    262|  map->add_gsub_pause (setup_syllables_khmer);
  108|    262|  map->add_gsub_pause (reorder_khmer);
  109|       |
  110|       |  /* Testing suggests that Uniscribe does NOT pause between basic
  111|       |   * features.  Test with KhmerUI.ttf and the following three
  112|       |   * sequences:
  113|       |   *
  114|       |   *   U+1789,U+17BC
  115|       |   *   U+1789,U+17D2,U+1789
  116|       |   *   U+1789,U+17D2,U+1789,U+17BC
  117|       |   *
  118|       |   * https://github.com/harfbuzz/harfbuzz/issues/974
  119|       |   */
  120|    262|  map->enable_feature (HB_TAG('l','o','c','l'), F_PER_SYLLABLE);
  ------------------
  |  |  179|    262|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  121|    262|  map->enable_feature (HB_TAG('c','c','m','p'), F_PER_SYLLABLE);
  ------------------
  |  |  179|    262|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  122|       |
  123|    262|  unsigned int i = 0;
  124|  1.57k|  for (; i < KHMER_BASIC_FEATURES; i++)
  ------------------
  |  Branch (124:10): [True: 1.31k, False: 262]
  ------------------
  125|  1.31k|    map->add_feature (khmer_features[i]);
  126|       |
  127|       |  /* https://github.com/harfbuzz/harfbuzz/issues/3531 */
  128|    262|  map->add_gsub_pause (hb_syllabic_clear_var); // Don't need syllables anymore, use stop to free buffer var
  129|       |
  130|  1.31k|  for (; i < KHMER_NUM_FEATURES; i++)
  ------------------
  |  Branch (130:10): [True: 1.04k, False: 262]
  ------------------
  131|  1.04k|    map->add_feature (khmer_features[i]);
  132|    262|}
hb-ot-shaper-khmer.cc:_ZL21setup_syllables_khmerPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  199|    258|{
  200|    258|  HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
  ------------------
  |  |  669|    258|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    258|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    258|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  201|    258|  find_syllables_khmer (buffer);
  202|    258|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    258|  for (unsigned int \
  |  |  153|    258|       _count = buffer->len, \
  |  |  154|    258|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 257, False: 1]
  |  |  ------------------
  |  |  155|   145k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 145k, False: 258]
  |  |  ------------------
  |  |  156|   145k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  203|   145k|    buffer->unsafe_to_break (start, end);
  204|    258|  return false;
  205|    258|}
hb-ot-shaper-khmer.cc:_ZL13reorder_khmerPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  311|    258|{
  312|    258|  bool ret = false;
  313|    258|  if (buffer->message (font, "start reordering khmer"))
  ------------------
  |  Branch (313:7): [True: 258, False: 0]
  ------------------
  314|    258|  {
  315|    258|    if (hb_syllabic_insert_dotted_circles (font, buffer,
  ------------------
  |  Branch (315:9): [True: 9, False: 249]
  ------------------
  316|    258|					   khmer_broken_cluster,
  317|    258|					   K_Cat(DOTTEDCIRCLE),
  ------------------
  |  |   42|    258|#define K_Cat(Cat) khmer_syllable_machine_ex_##Cat
  ------------------
  318|    258|					   (unsigned) -1))
  319|      9|      ret = true;
  320|       |
  321|    258|    foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    258|  for (unsigned int \
  |  |  153|    258|       _count = buffer->len, \
  |  |  154|    258|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 257, False: 1]
  |  |  ------------------
  |  |  155|   145k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 145k, False: 258]
  |  |  ------------------
  |  |  156|   145k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  322|   145k|      reorder_syllable_khmer (plan, font->face, buffer, start, end);
  323|    258|    (void) buffer->message (font, "end reordering khmer");
  324|    258|  }
  325|    258|  HB_BUFFER_DEALLOCATE_VAR (buffer, khmer_category);
  ------------------
  |  |  671|    258|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|    258|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    258|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  326|       |
  327|    258|  return ret;
  328|    258|}
hb-ot-shaper-khmer.cc:_ZL22reorder_syllable_khmerPK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  293|   145k|{
  294|   145k|  khmer_syllable_type_t syllable_type = (khmer_syllable_type_t) (buffer->info[start].syllable() & 0x0F);
  ------------------
  |  |  147|   145k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  295|   145k|  switch (syllable_type)
  ------------------
  |  Branch (295:11): [True: 0, False: 145k]
  ------------------
  296|   145k|  {
  297|  6.99k|    case khmer_broken_cluster: /* We already inserted dotted-circles, so just call the consonant_syllable. */
  ------------------
  |  Branch (297:5): [True: 6.99k, False: 138k]
  ------------------
  298|  13.8k|    case khmer_consonant_syllable:
  ------------------
  |  Branch (298:5): [True: 6.82k, False: 138k]
  ------------------
  299|  13.8k|     reorder_consonant_syllable (plan, face, buffer, start, end);
  300|  13.8k|     break;
  301|       |
  302|   131k|    case khmer_non_khmer_cluster:
  ------------------
  |  Branch (302:5): [True: 131k, False: 13.8k]
  ------------------
  303|   131k|      break;
  304|   145k|  }
  305|   145k|}
hb-ot-shaper-khmer.cc:_ZL26reorder_consonant_syllablePK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  216|  13.8k|{
  217|  13.8k|  const khmer_shape_plan_t *khmer_plan = (const khmer_shape_plan_t *) plan->data;
  218|  13.8k|  hb_glyph_info_t *info = buffer->info;
  219|       |
  220|       |  /* Setup masks. */
  221|  13.8k|  {
  222|       |    /* Post-base */
  223|  13.8k|    hb_mask_t mask = khmer_plan->mask_array[KHMER_BLWF] |
  224|  13.8k|		     khmer_plan->mask_array[KHMER_ABVF] |
  225|  13.8k|		     khmer_plan->mask_array[KHMER_PSTF];
  226|  27.3k|    for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (226:38): [True: 13.5k, False: 13.8k]
  ------------------
  227|  13.5k|      info[i].mask  |= mask;
  228|  13.8k|  }
  229|       |
  230|  13.8k|  unsigned int num_coengs = 0;
  231|  27.3k|  for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (231:36): [True: 13.5k, False: 13.8k]
  ------------------
  232|  13.5k|  {
  233|       |    /* """
  234|       |     * When a COENG + (Cons | IndV) combination are found (and subscript count
  235|       |     * is less than two) the character combination is handled according to the
  236|       |     * subscript type of the character following the COENG.
  237|       |     *
  238|       |     * ...
  239|       |     *
  240|       |     * Subscript Type 2 - The COENG + RO characters are reordered to immediately
  241|       |     * before the base glyph. Then the COENG + RO characters are assigned to have
  242|       |     * the 'pref' OpenType feature applied to them.
  243|       |     * """
  244|       |     */
  245|  13.5k|    if (info[i].khmer_category() == K_Cat(H) && num_coengs <= 2 && i + 1 < end)
  ------------------
  |  |   38|  13.5k|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  13.5k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                  if (info[i].khmer_category() == K_Cat(H) && num_coengs <= 2 && i + 1 < end)
  ------------------
  |  |   42|  13.5k|#define K_Cat(Cat) khmer_syllable_machine_ex_##Cat
  ------------------
  |  Branch (245:9): [True: 76, False: 13.4k]
  |  Branch (245:49): [True: 69, False: 7]
  |  Branch (245:68): [True: 50, False: 19]
  ------------------
  246|     50|    {
  247|     50|      num_coengs++;
  248|       |
  249|     50|      if (info[i + 1].khmer_category() == K_Cat(Ra))
  ------------------
  |  |   38|     50|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|     50|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i + 1].khmer_category() == K_Cat(Ra))
  ------------------
  |  |   42|     50|#define K_Cat(Cat) khmer_syllable_machine_ex_##Cat
  ------------------
  |  Branch (249:11): [True: 24, False: 26]
  ------------------
  250|     24|      {
  251|     72|	for (unsigned int j = 0; j < 2; j++)
  ------------------
  |  Branch (251:27): [True: 48, False: 24]
  ------------------
  252|     48|	  info[i + j].mask |= khmer_plan->mask_array[KHMER_PREF];
  253|       |
  254|       |	/* Move the Coeng,Ro sequence to the start. */
  255|     24|	buffer->merge_clusters (start, i + 2);
  256|     24|	hb_glyph_info_t t0 = info[i];
  257|     24|	hb_glyph_info_t t1 = info[i + 1];
  258|     24|	memmove (&info[start + 2], &info[start], (i - start) * sizeof (info[0]));
  259|     24|	info[start] = t0;
  260|     24|	info[start + 1] = t1;
  261|       |
  262|       |	/* Mark the subsequent stuff with 'cfar'.  Used in Khmer.
  263|       |	 * Read the feature spec.
  264|       |	 * This allows distinguishing the following cases with MS Khmer fonts:
  265|       |	 * U+1784,U+17D2,U+179A,U+17D2,U+1782
  266|       |	 * U+1784,U+17D2,U+1782,U+17D2,U+179A
  267|       |	 */
  268|     24|	if (khmer_plan->mask_array[KHMER_CFAR])
  ------------------
  |  Branch (268:6): [True: 0, False: 24]
  ------------------
  269|      0|	  for (unsigned int j = i + 2; j < end; j++)
  ------------------
  |  Branch (269:33): [True: 0, False: 0]
  ------------------
  270|      0|	    info[j].mask |= khmer_plan->mask_array[KHMER_CFAR];
  271|       |
  272|     24|	num_coengs = 2; /* Done. */
  273|     24|      }
  274|     50|    }
  275|       |
  276|       |    /* Reorder left matra piece. */
  277|  13.5k|    else if (info[i].khmer_category() == K_Cat(VPre))
  ------------------
  |  |   38|  13.5k|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  13.5k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                  else if (info[i].khmer_category() == K_Cat(VPre))
  ------------------
  |  |   42|  13.5k|#define K_Cat(Cat) khmer_syllable_machine_ex_##Cat
  ------------------
  |  Branch (277:14): [True: 37, False: 13.4k]
  ------------------
  278|     37|    {
  279|       |      /* Move to the start. */
  280|     37|      buffer->merge_clusters (start, i + 1);
  281|     37|      hb_glyph_info_t t = info[i];
  282|     37|      memmove (&info[start + 1], &info[start], (i - start) * sizeof (info[0]));
  283|     37|      info[start] = t;
  284|     37|    }
  285|  13.5k|  }
  286|  13.8k|}
hb-ot-shaper-khmer.cc:_ZL23override_features_khmerP21hb_ot_shape_planner_t:
  136|    262|{
  137|    262|  hb_ot_map_builder_t *map = &plan->map;
  138|       |
  139|       |  /* Khmer spec has 'clig' as part of required shaping features:
  140|       |   * "Apply feature 'clig' to form ligatures that are desired for
  141|       |   * typographical correctness.", hence in overrides... */
  142|    262|  map->enable_feature (HB_TAG('c','l','i','g'));
  ------------------
  |  |  179|    262|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  143|       |
  144|       |  /* Uniscribe does not apply 'kern' in Khmer. */
  145|    262|  if (hb_options ().uniscribe_bug_compatible)
  ------------------
  |  Branch (145:7): [True: 0, False: 262]
  ------------------
  146|      0|  {
  147|      0|    map->disable_feature (HB_TAG('k','e','r','n'));
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  148|      0|  }
  149|       |
  150|    262|  map->disable_feature (HB_TAG('l','i','g','a'));
  ------------------
  |  |  179|    262|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  151|    262|}
hb-ot-shaper-khmer.cc:_ZL17data_create_khmerPK18hb_ot_shape_plan_t:
  161|    262|{
  162|    262|  khmer_shape_plan_t *khmer_plan = (khmer_shape_plan_t *) hb_calloc (1, sizeof (khmer_shape_plan_t));
  ------------------
  |  |  234|    262|#define hb_calloc hb_calloc_impl
  ------------------
  163|    262|  if (unlikely (!khmer_plan))
  ------------------
  |  |  259|    262|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 261]
  |  |  ------------------
  ------------------
  164|      1|    return nullptr;
  165|       |
  166|  2.61k|  for (unsigned int i = 0; i < ARRAY_LENGTH (khmer_plan->mask_array); i++)
  ------------------
  |  Branch (166:28): [True: 2.34k, False: 261]
  ------------------
  167|  2.34k|    khmer_plan->mask_array[i] = (khmer_features[i].flags & F_GLOBAL) ?
  ------------------
  |  Branch (167:33): [True: 1.04k, False: 1.30k]
  ------------------
  168|  1.30k|				 0 : plan->map.get_1_mask (khmer_features[i].tag);
  169|       |
  170|    261|  return khmer_plan;
  171|    262|}
hb-ot-shaper-khmer.cc:_ZL18data_destroy_khmerPv:
  175|    261|{
  176|    261|  hb_free (data);
  ------------------
  |  |  236|    261|#define hb_free hb_free_impl
  ------------------
  177|    261|}
hb-ot-shaper-khmer.cc:_ZL15decompose_khmerPK31hb_ot_shape_normalize_context_tjPjS2_:
  336|  4.26k|{
  337|  4.26k|  switch (ab)
  ------------------
  |  Branch (337:11): [True: 4.13k, False: 127]
  ------------------
  338|  4.26k|  {
  339|       |    /*
  340|       |     * Decompose split matras that don't have Unicode decompositions.
  341|       |     */
  342|       |
  343|       |    /* Khmer */
  344|     52|    case 0x17BEu  : *a = 0x17C1u; *b= 0x17BEu; return true;
  ------------------
  |  Branch (344:5): [True: 52, False: 4.21k]
  ------------------
  345|     25|    case 0x17BFu  : *a = 0x17C1u; *b= 0x17BFu; return true;
  ------------------
  |  Branch (345:5): [True: 25, False: 4.24k]
  ------------------
  346|     13|    case 0x17C0u  : *a = 0x17C1u; *b= 0x17C0u; return true;
  ------------------
  |  Branch (346:5): [True: 13, False: 4.25k]
  ------------------
  347|     14|    case 0x17C4u  : *a = 0x17C1u; *b= 0x17C4u; return true;
  ------------------
  |  Branch (347:5): [True: 14, False: 4.25k]
  ------------------
  348|     23|    case 0x17C5u  : *a = 0x17C1u; *b= 0x17C5u; return true;
  ------------------
  |  Branch (348:5): [True: 23, False: 4.24k]
  ------------------
  349|  4.26k|  }
  350|       |
  351|  4.13k|  return (bool) c->unicode->decompose (ab, a, b);
  352|  4.26k|}
hb-ot-shaper-khmer.cc:_ZL13compose_khmerPK31hb_ot_shape_normalize_context_tjjPj:
  359|    656|{
  360|       |  /* Avoid recomposing split matras. */
  361|    656|  if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
  ------------------
  |  |  355|    656|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|    656|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 656, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (355:2): [True: 237, False: 419]
  |  |  ------------------
  |  |  356|    656|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    656|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    656|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    656|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|    656|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    656|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    656|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|    656|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    656|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|    237|    return false;
  363|       |
  364|    419|  return (bool) c->unicode->compose (a, b, ab);
  365|    656|}
hb-ot-shaper-khmer.cc:_ZL17setup_masks_khmerPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  183|    261|{
  184|    261|  HB_BUFFER_ALLOCATE_VAR (buffer, khmer_category);
  ------------------
  |  |  669|    261|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    261|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    261|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  185|       |
  186|       |  /* We cannot setup masks here.  We save information about characters
  187|       |   * and setup masks later on in a pause-callback. */
  188|       |
  189|    261|  unsigned int count = buffer->len;
  190|    261|  hb_glyph_info_t *info = buffer->info;
  191|  4.54k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (191:28): [True: 4.28k, False: 261]
  ------------------
  192|  4.28k|    set_khmer_properties (info[i]);
  193|    261|}
hb-ot-shaper-khmer.cc:_ZL20set_khmer_propertiesR15hb_glyph_info_t:
   85|  4.28k|{
   86|  4.28k|  hb_codepoint_t u = info.codepoint;
   87|  4.28k|  unsigned int type = hb_indic_get_categories (u);
   88|       |
   89|  4.28k|  info.khmer_category() = (khmer_category_t) (type & 0xFFu);
  ------------------
  |  |   38|  4.28k|#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
  |  |  ------------------
  |  |  |  |   38|  4.28k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
   90|  4.28k|}

_Z22find_syllables_myanmarP11hb_buffer_t:
  441|    449|{
  442|    449|  unsigned int p, pe, eof, ts, te, act HB_UNUSED;
  443|    449|  int cs;
  444|    449|  hb_glyph_info_t *info = buffer->info;
  445|       |  
  446|    449|#line 436 "hb-ot-shaper-myanmar-machine.hh"
  447|    449|	{
  448|    449|	cs = myanmar_syllable_machine_start;
  449|    449|	ts = 0;
  450|    449|	te = 0;
  451|    449|	act = 0;
  452|    449|	}
  453|       |
  454|    449|#line 137 "hb-ot-shaper-myanmar-machine.rl"
  455|       |
  456|       |
  457|    449|  p = 0;
  458|    449|  pe = eof = buffer->len;
  459|       |
  460|    449|  unsigned int syllable_serial = 1;
  461|       |  
  462|    449|#line 448 "hb-ot-shaper-myanmar-machine.hh"
  463|    449|	{
  464|    449|	int _slen;
  465|    449|	int _trans;
  466|    449|	const unsigned char *_keys;
  467|    449|	const char *_inds;
  468|    449|	if ( p == pe )
  ------------------
  |  Branch (468:7): [True: 1, False: 448]
  ------------------
  469|      1|		goto _test_eof;
  470|   260k|_resume:
  471|   260k|	switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
  ------------------
  |  Branch (471:11): [True: 41.3k, False: 219k]
  ------------------
  472|   219k|	case 2:
  ------------------
  |  Branch (472:2): [True: 219k, False: 41.3k]
  ------------------
  473|   219k|#line 1 "NONE"
  474|   219k|	{ts = p;}
  475|   219k|	break;
  476|   260k|#line 460 "hb-ot-shaper-myanmar-machine.hh"
  477|   260k|	}
  478|       |
  479|   260k|	_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
  480|   260k|	_inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];
  481|       |
  482|   260k|	_slen = _myanmar_syllable_machine_key_spans[cs];
  483|   260k|	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
  ------------------
  |  |   38|   260k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|   260k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (483:18): [True: 260k, False: 0]
  |  Branch (483:31): [True: 69.7k, False: 191k]
  ------------------
  484|   260k|		( info[p].myanmar_category()) <= _keys[1] ?
  ------------------
  |  |   38|  69.7k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  69.7k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (484:3): [True: 64.6k, False: 5.09k]
  ------------------
  485|   196k|		( info[p].myanmar_category()) - _keys[0] : _slen ];
  ------------------
  |  |   38|  64.6k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  64.6k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  486|       |
  487|   261k|_eof_trans:
  488|   261k|	cs = _myanmar_syllable_machine_trans_targs[_trans];
  489|       |
  490|   261k|	if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
  ------------------
  |  Branch (490:7): [True: 41.3k, False: 219k]
  ------------------
  491|  41.3k|		goto _again;
  492|       |
  493|   219k|	switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
  ------------------
  |  Branch (493:11): [True: 0, False: 219k]
  ------------------
  494|     21|	case 6:
  ------------------
  |  Branch (494:2): [True: 21, False: 219k]
  ------------------
  495|     21|#line 110 "hb-ot-shaper-myanmar-machine.rl"
  496|     21|	{te = p+1;{ found_syllable (myanmar_consonant_syllable); }}
  ------------------
  |  |  431|     21|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     21|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|     21|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|    513|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 492, False: 21]
  |  |  ------------------
  |  |  434|    492|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    492|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|     21|    syllable_serial++; \
  |  |  436|     21|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 1, False: 20]
  |  |  ------------------
  |  |  437|     21|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     21|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|     21|	break;
  498|  6.84k|	case 4:
  ------------------
  |  Branch (498:2): [True: 6.84k, False: 212k]
  ------------------
  499|  6.84k|#line 111 "hb-ot-shaper-myanmar-machine.rl"
  500|  6.84k|	{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
  ------------------
  |  |  431|  6.84k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  6.84k|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|  6.84k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|  13.6k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 6.84k, False: 6.84k]
  |  |  ------------------
  |  |  434|  6.84k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  6.84k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|  6.84k|    syllable_serial++; \
  |  |  436|  6.84k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 452, False: 6.39k]
  |  |  ------------------
  |  |  437|  6.84k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  6.84k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|  6.84k|	break;
  502|     25|	case 8:
  ------------------
  |  Branch (502:2): [True: 25, False: 219k]
  ------------------
  503|     25|#line 112 "hb-ot-shaper-myanmar-machine.rl"
  504|     25|	{te = p+1;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  431|     25|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     25|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|     25|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|    412|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 387, False: 25]
  |  |  ------------------
  |  |  434|    387|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    387|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|     25|    syllable_serial++; \
  |  |  436|     25|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 2, False: 23]
  |  |  ------------------
  |  |  437|     25|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     25|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  505|     25|	break;
  506|   183k|	case 3:
  ------------------
  |  Branch (506:2): [True: 183k, False: 36.3k]
  ------------------
  507|   183k|#line 113 "hb-ot-shaper-myanmar-machine.rl"
  508|   183k|	{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
  ------------------
  |  |  431|   183k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|   183k|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|   183k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|   366k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 183k, False: 183k]
  |  |  ------------------
  |  |  434|   183k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   183k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|   183k|    syllable_serial++; \
  |  |  436|   183k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 12.1k, False: 171k]
  |  |  ------------------
  |  |  437|   183k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|   183k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|   183k|	break;
  510|  14.0k|	case 5:
  ------------------
  |  Branch (510:2): [True: 14.0k, False: 205k]
  ------------------
  511|  14.0k|#line 110 "hb-ot-shaper-myanmar-machine.rl"
  512|  14.0k|	{te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
  ------------------
  |  |  431|  14.0k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  14.0k|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|  14.0k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|  28.7k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 14.6k, False: 14.0k]
  |  |  ------------------
  |  |  434|  14.6k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  14.6k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|  14.0k|    syllable_serial++; \
  |  |  436|  14.0k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 925, False: 13.1k]
  |  |  ------------------
  |  |  437|  14.0k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  14.0k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|  14.0k|	break;
  514|  10.4k|	case 7:
  ------------------
  |  Branch (514:2): [True: 10.4k, False: 209k]
  ------------------
  515|  10.4k|#line 112 "hb-ot-shaper-myanmar-machine.rl"
  516|  10.4k|	{te = p;p--;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  431|  10.4k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  10.4k|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|  10.4k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|  31.2k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 20.8k, False: 10.4k]
  |  |  ------------------
  |  |  434|  20.8k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  20.8k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|  10.4k|    syllable_serial++; \
  |  |  436|  10.4k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 687, False: 9.73k]
  |  |  ------------------
  |  |  437|  10.4k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  10.4k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|  10.4k|	break;
  518|  5.00k|	case 9:
  ------------------
  |  Branch (518:2): [True: 5.00k, False: 214k]
  ------------------
  519|  5.00k|#line 113 "hb-ot-shaper-myanmar-machine.rl"
  520|  5.00k|	{te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }}
  ------------------
  |  |  431|  5.00k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  5.00k|#define HB_STMT_START do
  |  |  ------------------
  |  |  432|  5.00k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (432:9): [Folded - Ignored]
  |  |  ------------------
  |  |  433|  10.0k|    for (unsigned int i = ts; i < te; i++) \
  |  |  ------------------
  |  |  |  Branch (433:31): [True: 5.00k, False: 5.00k]
  |  |  ------------------
  |  |  434|  5.00k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  5.00k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  435|  5.00k|    syllable_serial++; \
  |  |  436|  5.00k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (436:9): [True: 333, False: 4.67k]
  |  |  ------------------
  |  |  437|  5.00k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  5.00k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  5.00k|	break;
  522|   219k|#line 498 "hb-ot-shaper-myanmar-machine.hh"
  523|   219k|	}
  524|       |
  525|   261k|_again:
  526|   261k|	switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
  ------------------
  |  Branch (526:11): [True: 41.3k, False: 219k]
  ------------------
  527|   219k|	case 1:
  ------------------
  |  Branch (527:2): [True: 219k, False: 41.3k]
  ------------------
  528|   219k|#line 1 "NONE"
  529|   219k|	{ts = 0;}
  530|   219k|	break;
  531|   261k|#line 505 "hb-ot-shaper-myanmar-machine.hh"
  532|   261k|	}
  533|       |
  534|   261k|	if ( ++p != pe )
  ------------------
  |  Branch (534:7): [True: 260k, False: 483]
  ------------------
  535|   260k|		goto _resume;
  536|    484|	_test_eof: {}
  537|    484|	if ( p == eof )
  ------------------
  |  Branch (537:7): [True: 484, False: 0]
  ------------------
  538|    484|	{
  539|    484|	if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
  ------------------
  |  Branch (539:7): [True: 35, False: 449]
  ------------------
  540|     35|		_trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
  541|     35|		goto _eof_trans;
  542|     35|	}
  543|    484|	}
  544|       |
  545|    484|	}
  546|       |
  547|    484|#line 145 "hb-ot-shaper-myanmar-machine.rl"
  548|       |
  549|    484|}

hb-ot-shaper-myanmar.cc:_ZL24collect_features_myanmarP21hb_ot_shape_planner_t:
  112|    455|{
  113|    455|  hb_ot_map_builder_t *map = &plan->map;
  114|       |
  115|       |  /* Do this before any lookups have been applied. */
  116|    455|  map->add_gsub_pause (setup_syllables_myanmar);
  117|       |
  118|    455|  map->enable_feature (HB_TAG('l','o','c','l'), F_PER_SYLLABLE);
  ------------------
  |  |  179|    455|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  119|       |  /* The Indic specs do not require ccmp, but we apply it here since if
  120|       |   * there is a use of it, it's typically at the beginning. */
  121|    455|  map->enable_feature (HB_TAG('c','c','m','p'), F_PER_SYLLABLE);
  ------------------
  |  |  179|    455|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  122|       |
  123|       |
  124|    455|  map->add_gsub_pause (reorder_myanmar);
  125|       |
  126|  2.27k|  for (unsigned int i = 0; i < ARRAY_LENGTH (myanmar_basic_features); i++)
  ------------------
  |  Branch (126:28): [True: 1.82k, False: 455]
  ------------------
  127|  1.82k|  {
  128|  1.82k|    map->enable_feature (myanmar_basic_features[i], F_MANUAL_ZWJ | F_PER_SYLLABLE);
  129|  1.82k|    map->add_gsub_pause (nullptr);
  130|  1.82k|  }
  131|    455|  map->add_gsub_pause (hb_syllabic_clear_var); // Don't need syllables anymore, use stop to free buffer var
  132|       |
  133|  2.27k|  for (unsigned int i = 0; i < ARRAY_LENGTH (myanmar_other_features); i++)
  ------------------
  |  Branch (133:28): [True: 1.82k, False: 455]
  ------------------
  134|  1.82k|    map->enable_feature (myanmar_other_features[i], F_MANUAL_ZWJ);
  135|    455|}
hb-ot-shaper-myanmar.cc:_ZL23setup_syllables_myanmarPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  157|    449|{
  158|    449|  HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
  ------------------
  |  |  669|    449|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    449|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    449|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  159|    449|  find_syllables_myanmar (buffer);
  160|    449|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    449|  for (unsigned int \
  |  |  153|    449|       _count = buffer->len, \
  |  |  154|    449|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 448, False: 1]
  |  |  ------------------
  |  |  155|   220k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 219k, False: 449]
  |  |  ------------------
  |  |  156|   219k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  161|   219k|    buffer->unsafe_to_break (start, end);
  162|    449|  return false;
  163|    449|}
hb-ot-shaper-myanmar.cc:_ZL15reorder_myanmarPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  326|    449|{
  327|    449|  bool ret = false;
  328|    449|  if (buffer->message (font, "start reordering myanmar"))
  ------------------
  |  Branch (328:7): [True: 449, False: 0]
  ------------------
  329|    449|  {
  330|    449|    if (hb_syllabic_insert_dotted_circles (font, buffer,
  ------------------
  |  Branch (330:9): [True: 3, False: 446]
  ------------------
  331|    449|					   myanmar_broken_cluster,
  332|    449|					   M_Cat(DOTTEDCIRCLE)))
  ------------------
  |  |   44|    449|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  333|      3|      ret = true;
  334|       |
  335|    449|    foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    449|  for (unsigned int \
  |  |  153|    449|       _count = buffer->len, \
  |  |  154|    449|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 448, False: 1]
  |  |  ------------------
  |  |  155|   219k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 218k, False: 449]
  |  |  ------------------
  |  |  156|   218k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  336|   218k|      reorder_syllable_myanmar (plan, font->face, buffer, start, end);
  337|    449|    (void) buffer->message (font, "end reordering myanmar");
  338|    449|  }
  339|       |
  340|    449|  HB_BUFFER_DEALLOCATE_VAR (buffer, myanmar_category);
  ------------------
  |  |  671|    449|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|    449|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    449|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  341|    449|  HB_BUFFER_DEALLOCATE_VAR (buffer, myanmar_position);
  ------------------
  |  |  671|    449|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|    449|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    449|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  342|       |
  343|    449|  return ret;
  344|    449|}
hb-ot-shaper-myanmar.cc:_ZL24reorder_syllable_myanmarPK18hb_ot_shape_plan_tP9hb_face_tP11hb_buffer_tjj:
  308|   218k|{
  309|   218k|  myanmar_syllable_type_t syllable_type = (myanmar_syllable_type_t) (buffer->info[start].syllable() & 0x0F);
  ------------------
  |  |  147|   218k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  310|   218k|  switch (syllable_type) {
  ------------------
  |  Branch (310:11): [True: 0, False: 218k]
  ------------------
  311|       |
  312|  10.3k|    case myanmar_broken_cluster: /* We already inserted dotted-circles, so just call the consonant_syllable. */
  ------------------
  |  Branch (312:5): [True: 10.3k, False: 208k]
  ------------------
  313|  24.3k|    case myanmar_consonant_syllable:
  ------------------
  |  Branch (313:5): [True: 13.9k, False: 204k]
  ------------------
  314|  24.3k|      initial_reordering_consonant_syllable  (buffer, start, end);
  315|  24.3k|      break;
  316|       |
  317|   194k|    case myanmar_non_myanmar_cluster:
  ------------------
  |  Branch (317:5): [True: 194k, False: 24.3k]
  ------------------
  318|   194k|      break;
  319|   218k|  }
  320|   218k|}
hb-ot-shaper-myanmar.cc:_ZL37initial_reordering_consonant_syllableP11hb_buffer_tjj:
  181|  24.3k|{
  182|  24.3k|  hb_glyph_info_t *info = buffer->info;
  183|       |
  184|  24.3k|  unsigned int base = end;
  185|  24.3k|  bool has_reph = false;
  186|       |
  187|  24.3k|  {
  188|  24.3k|    unsigned int limit = start;
  189|  24.3k|    if (start + 3 <= end &&
  ------------------
  |  Branch (189:9): [True: 1.64k, False: 22.7k]
  ------------------
  190|  24.3k|	info[start  ].myanmar_category() == M_Cat(Ra) &&
  ------------------
  |  |   38|  1.64k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  1.64k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[start  ].myanmar_category() == M_Cat(Ra) &&
  ------------------
  |  |   44|  1.64k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (190:2): [True: 368, False: 1.27k]
  ------------------
  191|  24.3k|	info[start+1].myanmar_category() == M_Cat(As) &&
  ------------------
  |  |   38|    368|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|    368|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[start+1].myanmar_category() == M_Cat(As) &&
  ------------------
  |  |   44|    368|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (191:2): [True: 12, False: 356]
  ------------------
  192|  24.3k|	info[start+2].myanmar_category() == M_Cat(H))
  ------------------
  |  |   38|     12|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|     12|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[start+2].myanmar_category() == M_Cat(H))
  ------------------
  |  |   44|     12|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (192:2): [True: 6, False: 6]
  ------------------
  193|      6|    {
  194|      6|      limit += 3;
  195|      6|      base = start;
  196|      6|      has_reph = true;
  197|      6|    }
  198|       |
  199|  24.3k|    {
  200|  24.3k|      if (!has_reph)
  ------------------
  |  Branch (200:11): [True: 24.3k, False: 6]
  ------------------
  201|  24.3k|	base = limit;
  202|       |
  203|  56.2k|      for (unsigned int i = limit; i < end; i++)
  ------------------
  |  Branch (203:36): [True: 43.9k, False: 12.2k]
  ------------------
  204|  43.9k|	if (is_consonant_myanmar (info[i]))
  ------------------
  |  Branch (204:6): [True: 12.0k, False: 31.8k]
  ------------------
  205|  12.0k|	{
  206|  12.0k|	  base = i;
  207|  12.0k|	  break;
  208|  12.0k|	}
  209|  24.3k|    }
  210|  24.3k|  }
  211|       |
  212|       |  /* Reorder! */
  213|  24.3k|  {
  214|  24.3k|    unsigned int i = start;
  215|  24.3k|    for (; i < start + (has_reph ? 3 : 0); i++)
  ------------------
  |  Branch (215:12): [True: 18, False: 24.3k]
  |  Branch (215:25): [True: 24, False: 24.3k]
  ------------------
  216|     18|      info[i].myanmar_position() = POS_AFTER_MAIN;
  ------------------
  |  |   39|     18|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|     18|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  217|  25.0k|    for (; i < base; i++)
  ------------------
  |  Branch (217:12): [True: 718, False: 24.3k]
  ------------------
  218|    718|      info[i].myanmar_position() = POS_PRE_C;
  ------------------
  |  |   39|    718|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|    718|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  219|  24.3k|    if (i < end)
  ------------------
  |  Branch (219:9): [True: 24.3k, False: 6]
  ------------------
  220|  24.3k|    {
  221|  24.3k|      info[i].myanmar_position() = POS_BASE_C;
  ------------------
  |  |   39|  24.3k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  24.3k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  222|  24.3k|      i++;
  223|  24.3k|    }
  224|  24.3k|    myanmar_position_t pos = POS_AFTER_MAIN;
  225|       |    /* The following loop may be ugly, but it implements all of
  226|       |     * Myanmar reordering! */
  227|  53.1k|    for (; i < end; i++)
  ------------------
  |  Branch (227:12): [True: 28.8k, False: 24.3k]
  ------------------
  228|  28.8k|    {
  229|  28.8k|      if (info[i].myanmar_category() == M_Cat(MR)) /* Pre-base reordering */
  ------------------
  |  |   38|  28.8k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  28.8k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i].myanmar_category() == M_Cat(MR)) /* Pre-base reordering */
  ------------------
  |  |   44|  28.8k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (229:11): [True: 1.08k, False: 27.7k]
  ------------------
  230|  1.08k|      {
  231|  1.08k|	info[i].myanmar_position() = POS_PRE_C;
  ------------------
  |  |   39|  1.08k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  1.08k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  232|  1.08k|	continue;
  233|  1.08k|      }
  234|  27.7k|      if (info[i].myanmar_category() == M_Cat(VPre)) /* Left matra */
  ------------------
  |  |   38|  27.7k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  27.7k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i].myanmar_category() == M_Cat(VPre)) /* Left matra */
  ------------------
  |  |   44|  27.7k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (234:11): [True: 4.63k, False: 23.1k]
  ------------------
  235|  4.63k|      {
  236|  4.63k|	info[i].myanmar_position() = POS_PRE_M;
  ------------------
  |  |   39|  4.63k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  4.63k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  237|  4.63k|	continue;
  238|  4.63k|      }
  239|  23.1k|      if (info[i].myanmar_category() == M_Cat(VS))
  ------------------
  |  |   38|  23.1k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  23.1k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[i].myanmar_category() == M_Cat(VS))
  ------------------
  |  |   44|  23.1k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (239:11): [True: 1.28k, False: 21.8k]
  ------------------
  240|  1.28k|      {
  241|  1.28k|	info[i].myanmar_position() = info[i - 1].myanmar_position();
  ------------------
  |  |   39|  1.28k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
              	info[i].myanmar_position() = info[i - 1].myanmar_position();
  ------------------
  |  |   39|  1.28k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  242|  1.28k|	continue;
  243|  1.28k|      }
  244|       |
  245|  21.8k|      if (pos == POS_AFTER_MAIN && info[i].myanmar_category() == M_Cat(VBlw))
  ------------------
  |  |   38|  17.4k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  17.4k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (pos == POS_AFTER_MAIN && info[i].myanmar_category() == M_Cat(VBlw))
  ------------------
  |  |   44|  17.4k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (245:11): [True: 17.4k, False: 4.40k]
  |  Branch (245:36): [True: 100, False: 17.3k]
  ------------------
  246|    100|      {
  247|    100|	pos = POS_BELOW_C;
  248|    100|	info[i].myanmar_position() = pos;
  ------------------
  |  |   39|    100|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|    100|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  249|    100|	continue;
  250|    100|      }
  251|       |
  252|  21.7k|      if (pos == POS_BELOW_C && info[i].myanmar_category() == M_Cat(A))
  ------------------
  |  |   38|  4.40k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  4.40k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (pos == POS_BELOW_C && info[i].myanmar_category() == M_Cat(A))
  ------------------
  |  |   44|  4.40k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (252:11): [True: 4.40k, False: 17.3k]
  |  Branch (252:33): [True: 1.15k, False: 3.25k]
  ------------------
  253|  1.15k|      {
  254|  1.15k|	info[i].myanmar_position() = POS_BEFORE_SUB;
  ------------------
  |  |   39|  1.15k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  255|  1.15k|	continue;
  256|  1.15k|      }
  257|  20.5k|      if (pos == POS_BELOW_C && info[i].myanmar_category() == M_Cat(VBlw))
  ------------------
  |  |   38|  3.25k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  3.25k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (pos == POS_BELOW_C && info[i].myanmar_category() == M_Cat(VBlw))
  ------------------
  |  |   44|  3.25k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (257:11): [True: 3.25k, False: 17.3k]
  |  Branch (257:33): [True: 3.24k, False: 7]
  ------------------
  258|  3.24k|      {
  259|  3.24k|	info[i].myanmar_position() = pos;
  ------------------
  |  |   39|  3.24k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  3.24k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  260|  3.24k|	continue;
  261|  3.24k|      }
  262|  17.3k|      if (pos == POS_BELOW_C && info[i].myanmar_category() != M_Cat(A))
  ------------------
  |  |   38|      7|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|      7|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (pos == POS_BELOW_C && info[i].myanmar_category() != M_Cat(A))
  ------------------
  |  |   44|      7|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (262:11): [True: 7, False: 17.3k]
  |  Branch (262:33): [True: 7, False: 0]
  ------------------
  263|      7|      {
  264|      7|	pos = POS_AFTER_SUB;
  265|      7|	info[i].myanmar_position() = pos;
  ------------------
  |  |   39|      7|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|      7|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  266|      7|	continue;
  267|      7|      }
  268|  17.3k|      info[i].myanmar_position() = pos;
  ------------------
  |  |   39|  17.3k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  17.3k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  269|  17.3k|    }
  270|  24.3k|  }
  271|       |
  272|       |  /* Sit tight, rock 'n roll! */
  273|  24.3k|  buffer->sort (start, end, compare_myanmar_order);
  274|       |
  275|       |  /* Flip left-matra sequence. */
  276|  24.3k|  unsigned first_left_matra = end;
  277|  24.3k|  unsigned last_left_matra = end;
  278|  78.2k|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (278:32): [True: 53.9k, False: 24.3k]
  ------------------
  279|  53.9k|  {
  280|  53.9k|    if (info[i].myanmar_position() == POS_PRE_M)
  ------------------
  |  |   39|  53.9k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|  53.9k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  |  Branch (280:9): [True: 5.14k, False: 48.7k]
  ------------------
  281|  5.14k|    {
  282|  5.14k|      if (first_left_matra == end)
  ------------------
  |  Branch (282:11): [True: 69, False: 5.08k]
  ------------------
  283|     69|	first_left_matra = i;
  284|  5.14k|      last_left_matra = i;
  285|  5.14k|    }
  286|  53.9k|  }
  287|       |  /* https://github.com/harfbuzz/harfbuzz/issues/3863 */
  288|  24.3k|  if (first_left_matra < last_left_matra)
  ------------------
  |  Branch (288:7): [True: 56, False: 24.3k]
  ------------------
  289|     56|  {
  290|       |    /* No need to merge clusters, done already? */
  291|     56|    buffer->reverse_range (first_left_matra, last_left_matra + 1);
  292|       |    /* Reverse back VS, etc. */
  293|     56|    unsigned i = first_left_matra;
  294|  5.19k|    for (unsigned j = i; j <= last_left_matra; j++)
  ------------------
  |  Branch (294:26): [True: 5.13k, False: 56]
  ------------------
  295|  5.13k|      if (info[j].myanmar_category() == M_Cat(VPre))
  ------------------
  |  |   38|  5.13k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  5.13k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                    if (info[j].myanmar_category() == M_Cat(VPre))
  ------------------
  |  |   44|  5.13k|#define M_Cat(Cat) myanmar_syllable_machine_ex_##Cat
  ------------------
  |  Branch (295:11): [True: 4.62k, False: 515]
  ------------------
  296|  4.62k|      {
  297|  4.62k|	buffer->reverse_range (i, j + 1);
  298|  4.62k|	i = j + 1;
  299|  4.62k|      }
  300|     56|  }
  301|  24.3k|}
hb-ot-shaper-myanmar.cc:_ZL20is_consonant_myanmarRK15hb_glyph_info_t:
   96|  43.9k|{
   97|  43.9k|  return is_one_of_myanmar (info, CONSONANT_FLAGS_MYANMAR);
  ------------------
  |  |   92|  43.9k|#define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define CONSONANT_FLAGS_MYANMAR (FLAG (M_Cat(C)) | FLAG (M_Cat(CS)) | FLAG (M_Cat(Ra)) | /* FLAG (M_Cat(CM)) | */ FLAG (M_Cat(IV)) | FLAG (M_Cat(GB)) | FLAG (M_Cat(DOTTEDCIRCLE)))
  |  |  ------------------
  |  |  |  |   73|  43.9k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  43.9k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  43.9k|}
hb-ot-shaper-myanmar.cc:_ZL17is_one_of_myanmarRK15hb_glyph_info_tj:
   79|  43.9k|{
   80|       |  /* If it ligated, all bets are off. */
   81|  43.9k|  if (_hb_glyph_info_ligated (&info)) return false;
  ------------------
  |  Branch (81:7): [True: 6.14k, False: 37.8k]
  ------------------
   82|  37.8k|  return !!(FLAG_UNSAFE (info.myanmar_category()) & flags);
  ------------------
  |  |   74|  37.8k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 33.8k, False: 3.97k]
  |  |  ------------------
  ------------------
   83|  43.9k|}
hb-ot-shaper-myanmar.cc:_ZL21compare_myanmar_orderPK15hb_glyph_info_tS1_:
  167|   502k|{
  168|   502k|  int a = pa->myanmar_position();
  ------------------
  |  |   39|   502k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|   502k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  169|   502k|  int b = pb->myanmar_position();
  ------------------
  |  |   39|   502k|#define myanmar_position() ot_shaper_var_u8_auxiliary() /* myanmar_position_t */
  |  |  ------------------
  |  |  |  |   39|   502k|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  |  |  ------------------
  ------------------
  170|       |
  171|   502k|  return (int) a - (int) b;
  172|   502k|}
hb-ot-shaper-myanmar.cc:_ZL19setup_masks_myanmarPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  141|    455|{
  142|    455|  HB_BUFFER_ALLOCATE_VAR (buffer, myanmar_category);
  ------------------
  |  |  669|    455|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    455|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    455|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  143|    455|  HB_BUFFER_ALLOCATE_VAR (buffer, myanmar_position);
  ------------------
  |  |  669|    455|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|    455|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|    455|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  144|       |
  145|       |  /* No masks, we just save information about characters. */
  146|       |
  147|    455|  unsigned int count = buffer->len;
  148|    455|  hb_glyph_info_t *info = buffer->info;
  149|  7.81k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (149:28): [True: 7.35k, False: 455]
  ------------------
  150|  7.35k|    set_myanmar_properties (info[i]);
  151|    455|}
hb-ot-shaper-myanmar.cc:_ZL22set_myanmar_propertiesR15hb_glyph_info_t:
   69|  7.35k|{
   70|  7.35k|  hb_codepoint_t u = info.codepoint;
   71|  7.35k|  unsigned int type = hb_indic_get_categories (u);
   72|       |
   73|  7.35k|  info.myanmar_category() = (myanmar_category_t) (type & 0xFFu);
  ------------------
  |  |   38|  7.35k|#define myanmar_category() ot_shaper_var_u8_category() /* myanmar_category_t */
  |  |  ------------------
  |  |  |  |   38|  7.35k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
   74|  7.35k|}

_Z33hb_syllabic_insert_dotted_circlesP9hb_font_tP11hb_buffer_tjjii:
   39|  5.07k|{
   40|  5.07k|  if (unlikely (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE))
  ------------------
  |  |  259|  5.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.07k]
  |  |  ------------------
  ------------------
   41|      0|    return false;
   42|  5.07k|  if (likely (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE)))
  ------------------
  |  |  258|  5.07k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.68k, False: 2.39k]
  |  |  ------------------
  ------------------
   43|  2.68k|    return false;
   44|       |
   45|  2.39k|  hb_codepoint_t dottedcircle_glyph;
   46|  2.39k|  if (!font->get_nominal_glyph (0x25CCu, &dottedcircle_glyph))
  ------------------
  |  Branch (46:7): [True: 2.26k, False: 122]
  ------------------
   47|  2.26k|    return false;
   48|       |
   49|    122|  hb_glyph_info_t dottedcircle = {0};
   50|    122|  dottedcircle.codepoint = 0x25CCu;
   51|    122|  dottedcircle.ot_shaper_var_u8_category() = dottedcircle_category;
  ------------------
  |  |   38|    122|#define ot_shaper_var_u8_category()	var2.u8[2]
  ------------------
   52|    122|  if (dottedcircle_position != -1)
  ------------------
  |  Branch (52:7): [True: 102, False: 20]
  ------------------
   53|    102|    dottedcircle.ot_shaper_var_u8_auxiliary() = dottedcircle_position;
  ------------------
  |  |   39|    102|#define ot_shaper_var_u8_auxiliary()	var2.u8[3]
  ------------------
   54|    122|  dottedcircle.codepoint = dottedcircle_glyph;
   55|       |
   56|    122|  buffer->clear_output ();
   57|       |
   58|    122|  buffer->idx = 0;
   59|    122|  unsigned int last_syllable = 0;
   60|  72.5k|  while (buffer->idx < buffer->len && buffer->successful)
  ------------------
  |  Branch (60:10): [True: 72.4k, False: 119]
  |  Branch (60:39): [True: 72.4k, False: 3]
  ------------------
   61|  72.4k|  {
   62|  72.4k|    unsigned int syllable = buffer->cur().syllable();
  ------------------
  |  |  147|  72.4k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
   63|  72.4k|    if (unlikely (last_syllable != syllable && (syllable & 0x0F) == broken_syllable_type))
  ------------------
  |  |  259|   132k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5.88k, False: 66.5k]
  |  |  |  Branch (259:47): [True: 59.8k, False: 12.6k]
  |  |  |  Branch (259:47): [True: 5.88k, False: 53.9k]
  |  |  ------------------
  ------------------
   64|  5.88k|    {
   65|  5.88k|      last_syllable = syllable;
   66|       |
   67|  5.88k|      hb_glyph_info_t ginfo = dottedcircle;
   68|  5.88k|      ginfo.cluster = buffer->cur().cluster;
   69|  5.88k|      ginfo.mask = buffer->cur().mask;
   70|  5.88k|      ginfo.syllable() = buffer->cur().syllable();
  ------------------
  |  |  147|  5.88k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
                    ginfo.syllable() = buffer->cur().syllable();
  ------------------
  |  |  147|  5.88k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
   71|       |
   72|       |      /* Insert dottedcircle after possible Repha. */
   73|  5.88k|      if (repha_category != -1)
  ------------------
  |  Branch (73:11): [True: 5.84k, False: 42]
  ------------------
   74|  5.84k|      {
   75|  5.99k|	while (buffer->idx < buffer->len && buffer->successful &&
  ------------------
  |  Branch (75:9): [True: 5.99k, False: 1]
  |  Branch (75:38): [True: 5.99k, False: 0]
  ------------------
   76|  5.99k|	       last_syllable == buffer->cur().syllable() &&
  ------------------
  |  |  147|  11.9k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  |  Branch (76:9): [True: 5.84k, False: 150]
  ------------------
   77|  5.99k|	       buffer->cur().ot_shaper_var_u8_category() == (unsigned) repha_category)
  ------------------
  |  |   38|  5.84k|#define ot_shaper_var_u8_category()	var2.u8[2]
  ------------------
  |  Branch (77:9): [True: 151, False: 5.69k]
  ------------------
   78|    151|	  (void) buffer->next_glyph ();
   79|  5.84k|      }
   80|       |
   81|  5.88k|      (void) buffer->output_info (ginfo);
   82|  5.88k|    }
   83|  66.5k|    else
   84|  66.5k|      (void) buffer->next_glyph ();
   85|  72.4k|  }
   86|    122|  buffer->sync ();
   87|    122|  return true;
   88|  2.39k|}
_Z21hb_syllabic_clear_varPK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
   94|  5.06k|{
   95|  5.06k|  HB_BUFFER_DEALLOCATE_VAR (buffer, syllable);
  ------------------
  |  |  671|  5.06k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  5.06k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  5.06k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
   96|  5.06k|  return false;
   97|  5.06k|}

hb-ot-shaper-thai.cc:_ZL20preprocess_text_thaiPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  268|    279|{
  269|       |  /* This function implements the shaping logic documented here:
  270|       |   *
  271|       |   *   https://linux.thai.net/~thep/th-otf/shaping.html
  272|       |   *
  273|       |   * The first shaping rule listed there is needed even if the font has Thai
  274|       |   * OpenType tables.  The rest do fallback positioning based on PUA codepoints.
  275|       |   * We implement that only if there exist no Thai GSUB in the font.
  276|       |   */
  277|       |
  278|       |  /* The following is NOT specified in the MS OT Thai spec, however, it seems
  279|       |   * to be what Uniscribe and other engines implement.  According to Eric Muller:
  280|       |   *
  281|       |   * When you have a SARA AM, decompose it in NIKHAHIT + SARA AA, *and* move the
  282|       |   * NIKHAHIT backwards over any above-base marks.
  283|       |   *
  284|       |   * <0E14, 0E4B, 0E33> -> <0E14, 0E4D, 0E4B, 0E32>
  285|       |   *
  286|       |   * This reordering is legit only when the NIKHAHIT comes from a SARA AM, not
  287|       |   * when it's there to start with. The string <0E14, 0E4B, 0E4D> is probably
  288|       |   * not what a user wanted, but the rendering is nevertheless nikhahit above
  289|       |   * chattawa.
  290|       |   *
  291|       |   * Same for Lao.
  292|       |   *
  293|       |   * Note:
  294|       |   *
  295|       |   * Uniscribe also does some below-marks reordering.  Namely, it positions U+0E3A
  296|       |   * after U+0E38 and U+0E39.  We do that by modifying the ccc for U+0E3A.
  297|       |   * See unicode->modified_combining_class ().  Lao does NOT have a U+0E3A
  298|       |   * equivalent.
  299|       |   */
  300|       |
  301|       |
  302|       |  /*
  303|       |   * Here are the characters of significance:
  304|       |   *
  305|       |   *			Thai	Lao
  306|       |   * SARA AM:		U+0E33	U+0EB3
  307|       |   * SARA AA:		U+0E32	U+0EB2
  308|       |   * Nikhahit:		U+0E4D	U+0ECD
  309|       |   *
  310|       |   * Testing shows that Uniscribe reorder the following marks:
  311|       |   * Thai:	<0E31,0E34..0E37,     0E47..0E4E>
  312|       |   * Lao:	<0EB1,0EB4..0EB7,0EBB,0EC8..0ECD>
  313|       |   *
  314|       |   * Note how the Lao versions are the same as Thai + 0x80.
  315|       |   */
  316|       |
  317|       |  /* We only get one script at a time, so a script-agnostic implementation
  318|       |   * is adequate here. */
  319|    279|#define IS_SARA_AM(x) (((x) & ~0x0080u) == 0x0E33u)
  320|    279|#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0x0E33u + 0x0E4Du)
  321|    279|#define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
  322|    279|#define IS_ABOVE_BASE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080u, 0x0E34u, 0x0E37u, 0x0E47u, 0x0E4Eu, 0x0E31u, 0x0E31u, 0x0E3Bu, 0x0E3Bu))
  323|       |
  324|    279|  buffer->clear_output ();
  325|    279|  unsigned int count = buffer->len;
  326|  4.74k|  for (buffer->idx = 0; buffer->idx < count /* No need for: && buffer->successful */;)
  ------------------
  |  Branch (326:25): [True: 4.46k, False: 279]
  ------------------
  327|  4.46k|  {
  328|  4.46k|    hb_codepoint_t u = buffer->cur().codepoint;
  329|  4.46k|    if (likely (!IS_SARA_AM (u)))
  ------------------
  |  |  258|  4.46k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 4.24k, False: 219]
  |  |  ------------------
  ------------------
  330|  4.24k|    {
  331|  4.24k|      if (unlikely (!buffer->next_glyph ())) break;
  ------------------
  |  |  259|  4.24k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.24k]
  |  |  ------------------
  ------------------
  332|  4.24k|      continue;
  333|  4.24k|    }
  334|       |
  335|       |    /* Is SARA AM. Decompose and reorder. */
  336|    219|    (void) buffer->output_glyph (NIKHAHIT_FROM_SARA_AM (u));
  ------------------
  |  |  320|    219|#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0x0E33u + 0x0E4Du)
  ------------------
  337|    219|    _hb_glyph_info_set_continuation (&buffer->prev());
  338|    219|    if (unlikely (!buffer->replace_glyph (SARA_AA_FROM_SARA_AM (u)))) break;
  ------------------
  |  |  259|    219|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 219]
  |  |  ------------------
  ------------------
  339|       |
  340|       |    /* Make Nikhahit be recognized as a ccc=0 mark when zeroing widths. */
  341|    219|    unsigned int end = buffer->out_len;
  342|    219|    _hb_glyph_info_set_general_category (&buffer->out_info[end - 2], HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK);
  343|       |
  344|       |    /* Ok, let's see... */
  345|    219|    unsigned int start = end - 2;
  346|    291|    while (start > 0 && IS_ABOVE_BASE_MARK (buffer->out_info[start - 1].codepoint))
  ------------------
  |  |  322|    275|#define IS_ABOVE_BASE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080u, 0x0E34u, 0x0E37u, 0x0E47u, 0x0E4Eu, 0x0E31u, 0x0E31u, 0x0E3Bu, 0x0E3Bu))
  |  |  ------------------
  |  |  |  Branch (322:31): [True: 72, False: 203]
  |  |  ------------------
  ------------------
  |  Branch (346:12): [True: 275, False: 16]
  ------------------
  347|     72|      start--;
  348|       |
  349|    219|    if (start + 2 < end)
  ------------------
  |  Branch (349:9): [True: 39, False: 180]
  ------------------
  350|     39|    {
  351|       |      /* Move Nikhahit (end-2) to the beginning */
  352|     39|      buffer->merge_out_clusters (start, end);
  353|     39|      hb_glyph_info_t t = buffer->out_info[end - 2];
  354|     39|      memmove (buffer->out_info + start + 1,
  355|     39|	       buffer->out_info + start,
  356|     39|	       sizeof (buffer->out_info[0]) * (end - start - 2));
  357|     39|      buffer->out_info[start] = t;
  358|     39|    }
  359|    180|    else
  360|    180|    {
  361|       |      /* Since we decomposed, and NIKHAHIT is combining, merge clusters with the
  362|       |       * previous cluster. */
  363|    180|      if (start && buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
  ------------------
  |  Branch (363:11): [True: 171, False: 9]
  |  Branch (363:20): [True: 171, False: 0]
  ------------------
  364|    171|	buffer->merge_out_clusters (start - 1, end);
  365|    180|    }
  366|    219|  }
  367|    279|  buffer->sync ();
  368|       |
  369|       |  /* If font has Thai GSUB, we are done. */
  370|    279|  if (plan->props.script == HB_SCRIPT_THAI && !plan->map.found_script[0])
  ------------------
  |  Branch (370:7): [True: 250, False: 29]
  |  Branch (370:47): [True: 250, False: 0]
  ------------------
  371|    250|    do_thai_pua_shaping (plan, buffer, font);
  372|    279|}
hb-ot-shaper-thai.cc:_ZL19do_thai_pua_shapingPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  224|    250|{
  225|       |#ifdef HB_NO_OT_SHAPER_THAI_FALLBACK
  226|       |  return;
  227|       |#endif
  228|       |
  229|    250|  thai_above_state_t above_state = thai_above_start_state[NOT_CONSONANT];
  230|    250|  thai_below_state_t below_state = thai_below_start_state[NOT_CONSONANT];
  231|    250|  unsigned int base = 0;
  232|       |
  233|    250|  hb_glyph_info_t *info = buffer->info;
  234|    250|  unsigned int count = buffer->len;
  235|  4.45k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (235:28): [True: 4.20k, False: 250]
  ------------------
  236|  4.20k|  {
  237|  4.20k|    thai_mark_type_t mt = get_mark_type (info[i].codepoint);
  238|       |
  239|  4.20k|    if (mt == NOT_MARK) {
  ------------------
  |  Branch (239:9): [True: 3.65k, False: 553]
  ------------------
  240|  3.65k|      thai_consonant_type_t ct = get_consonant_type (info[i].codepoint);
  241|  3.65k|      above_state = thai_above_start_state[ct];
  242|  3.65k|      below_state = thai_below_start_state[ct];
  243|  3.65k|      base = i;
  244|  3.65k|      continue;
  245|  3.65k|    }
  246|       |
  247|    553|    const thai_above_state_machine_edge_t &above_edge = thai_above_state_machine[above_state][mt];
  248|    553|    const thai_below_state_machine_edge_t &below_edge = thai_below_state_machine[below_state][mt];
  249|    553|    above_state = above_edge.next_state;
  250|    553|    below_state = below_edge.next_state;
  251|       |
  252|       |    /* At least one of the above/below actions is NOP. */
  253|    553|    thai_action_t action = above_edge.action != NOP ? above_edge.action : below_edge.action;
  ------------------
  |  Branch (253:28): [True: 40, False: 513]
  ------------------
  254|       |
  255|    553|    buffer->unsafe_to_break (base, i);
  256|    553|    if (action == RD)
  ------------------
  |  Branch (256:9): [True: 27, False: 526]
  ------------------
  257|     27|      info[base].codepoint = thai_pua_shape (info[base].codepoint, action, font);
  258|    526|    else
  259|    526|      info[i].codepoint = thai_pua_shape (info[i].codepoint, action, font);
  260|    553|  }
  261|    250|}
hb-ot-shaper-thai.cc:_ZL13get_mark_typej:
   76|  4.20k|{
   77|  4.20k|  if (u == 0x0E31u || hb_in_range<hb_codepoint_t> (u, 0x0E34u, 0x0E37u) ||
  ------------------
  |  Branch (77:7): [True: 78, False: 4.12k]
  |  Branch (77:23): [True: 96, False: 4.03k]
  ------------------
   78|  4.20k|      u == 0x0E47u || hb_in_range<hb_codepoint_t> (u, 0x0E4Du, 0x0E4Eu))
  ------------------
  |  Branch (78:7): [True: 21, False: 4.01k]
  |  Branch (78:23): [True: 219, False: 3.79k]
  ------------------
   79|    414|    return AV;
   80|  3.79k|  if (hb_in_range<hb_codepoint_t> (u, 0x0E38u, 0x0E3Au))
  ------------------
  |  Branch (80:7): [True: 83, False: 3.71k]
  ------------------
   81|     83|    return BV;
   82|  3.71k|  if (hb_in_range<hb_codepoint_t> (u, 0x0E48u, 0x0E4Cu))
  ------------------
  |  Branch (82:7): [True: 56, False: 3.65k]
  ------------------
   83|     56|    return T;
   84|  3.65k|  return NOT_MARK;
   85|  3.71k|}
hb-ot-shaper-thai.cc:_ZL18get_consonant_typej:
   52|  3.65k|{
   53|  3.65k|  if (u == 0x0E1Bu || u == 0x0E1Du || u == 0x0E1Fu/* || u == 0x0E2Cu*/)
  ------------------
  |  Branch (53:7): [True: 11, False: 3.64k]
  |  Branch (53:23): [True: 42, False: 3.60k]
  |  Branch (53:39): [True: 19, False: 3.58k]
  ------------------
   54|     72|    return AC;
   55|  3.58k|  if (u == 0x0E0Du || u == 0x0E10u)
  ------------------
  |  Branch (55:7): [True: 14, False: 3.56k]
  |  Branch (55:23): [True: 39, False: 3.52k]
  ------------------
   56|     53|    return RC;
   57|  3.52k|  if (u == 0x0E0Eu || u == 0x0E0Fu)
  ------------------
  |  Branch (57:7): [True: 31, False: 3.49k]
  |  Branch (57:23): [True: 11, False: 3.48k]
  ------------------
   58|     42|    return DC;
   59|  3.48k|  if (hb_in_range<hb_codepoint_t> (u, 0x0E01u, 0x0E2Eu))
  ------------------
  |  Branch (59:7): [True: 55, False: 3.43k]
  ------------------
   60|     55|    return NC;
   61|  3.43k|  return NOT_CONSONANT;
   62|  3.48k|}
hb-ot-shaper-thai.cc:_ZL14thai_pua_shapej13thai_action_tP9hb_font_t:
   99|    553|{
  100|    553|  struct thai_pua_mapping_t {
  101|    553|    uint16_t u;
  102|    553|    uint16_t win_pua;
  103|    553|    uint16_t mac_pua;
  104|    553|  } const *pua_mappings = nullptr;
  105|    553|  static const thai_pua_mapping_t SD_mappings[] = {
  106|    553|    {0x0E48u, 0xF70Au, 0xF88Bu}, /* MAI EK */
  107|    553|    {0x0E49u, 0xF70Bu, 0xF88Eu}, /* MAI THO */
  108|    553|    {0x0E4Au, 0xF70Cu, 0xF891u}, /* MAI TRI */
  109|    553|    {0x0E4Bu, 0xF70Du, 0xF894u}, /* MAI CHATTAWA */
  110|    553|    {0x0E4Cu, 0xF70Eu, 0xF897u}, /* THANTHAKHAT */
  111|    553|    {0x0E38u, 0xF718u, 0xF89Bu}, /* SARA U */
  112|    553|    {0x0E39u, 0xF719u, 0xF89Cu}, /* SARA UU */
  113|    553|    {0x0E3Au, 0xF71Au, 0xF89Du}, /* PHINTHU */
  114|    553|    {0x0000u, 0x0000u, 0x0000u}
  115|    553|  };
  116|    553|  static const thai_pua_mapping_t SDL_mappings[] = {
  117|    553|    {0x0E48u, 0xF705u, 0xF88Cu}, /* MAI EK */
  118|    553|    {0x0E49u, 0xF706u, 0xF88Fu}, /* MAI THO */
  119|    553|    {0x0E4Au, 0xF707u, 0xF892u}, /* MAI TRI */
  120|    553|    {0x0E4Bu, 0xF708u, 0xF895u}, /* MAI CHATTAWA */
  121|    553|    {0x0E4Cu, 0xF709u, 0xF898u}, /* THANTHAKHAT */
  122|    553|    {0x0000u, 0x0000u, 0x0000u}
  123|    553|  };
  124|    553|  static const thai_pua_mapping_t SL_mappings[] = {
  125|    553|    {0x0E48u, 0xF713u, 0xF88Au}, /* MAI EK */
  126|    553|    {0x0E49u, 0xF714u, 0xF88Du}, /* MAI THO */
  127|    553|    {0x0E4Au, 0xF715u, 0xF890u}, /* MAI TRI */
  128|    553|    {0x0E4Bu, 0xF716u, 0xF893u}, /* MAI CHATTAWA */
  129|    553|    {0x0E4Cu, 0xF717u, 0xF896u}, /* THANTHAKHAT */
  130|    553|    {0x0E31u, 0xF710u, 0xF884u}, /* MAI HAN-AKAT */
  131|    553|    {0x0E34u, 0xF701u, 0xF885u}, /* SARA I */
  132|    553|    {0x0E35u, 0xF702u, 0xF886u}, /* SARA II */
  133|    553|    {0x0E36u, 0xF703u, 0xF887u}, /* SARA UE */
  134|    553|    {0x0E37u, 0xF704u, 0xF888u}, /* SARA UEE */
  135|    553|    {0x0E47u, 0xF712u, 0xF889u}, /* MAITAIKHU */
  136|    553|    {0x0E4Du, 0xF711u, 0xF899u}, /* NIKHAHIT */
  137|    553|    {0x0000u, 0x0000u, 0x0000u}
  138|    553|  };
  139|    553|  static const thai_pua_mapping_t RD_mappings[] = {
  140|    553|    {0x0E0Du, 0xF70Fu, 0xF89Au}, /* YO YING */
  141|    553|    {0x0E10u, 0xF700u, 0xF89Eu}, /* THO THAN */
  142|    553|    {0x0000u, 0x0000u, 0x0000u}
  143|    553|  };
  144|       |
  145|    553|  switch (action) {
  ------------------
  |  Branch (145:11): [True: 0, False: 553]
  ------------------
  146|    430|    case NOP: return u;
  ------------------
  |  Branch (146:5): [True: 430, False: 123]
  ------------------
  147|     57|    case SD:  pua_mappings = SD_mappings; break;
  ------------------
  |  Branch (147:5): [True: 57, False: 496]
  ------------------
  148|     11|    case SDL: pua_mappings = SDL_mappings; break;
  ------------------
  |  Branch (148:5): [True: 11, False: 542]
  ------------------
  149|     28|    case SL:  pua_mappings = SL_mappings; break;
  ------------------
  |  Branch (149:5): [True: 28, False: 525]
  ------------------
  150|     27|    case RD:  pua_mappings = RD_mappings; break;
  ------------------
  |  Branch (150:5): [True: 27, False: 526]
  ------------------
  151|    553|  }
  152|    765|  for (; pua_mappings->u; pua_mappings++)
  ------------------
  |  Branch (152:10): [True: 751, False: 14]
  ------------------
  153|    751|    if (pua_mappings->u == u)
  ------------------
  |  Branch (153:9): [True: 109, False: 642]
  ------------------
  154|    109|    {
  155|    109|      hb_codepoint_t glyph;
  156|    109|      if (hb_font_get_glyph (font, pua_mappings->win_pua, 0, &glyph))
  ------------------
  |  Branch (156:11): [True: 21, False: 88]
  ------------------
  157|     21|	return pua_mappings->win_pua;
  158|     88|      if (hb_font_get_glyph (font, pua_mappings->mac_pua, 0, &glyph))
  ------------------
  |  Branch (158:11): [True: 7, False: 81]
  ------------------
  159|      7|	return pua_mappings->mac_pua;
  160|     81|      break;
  161|     88|    }
  162|     95|  return u;
  163|    123|}

hb-ot-shaper-use.cc:_ZL18find_syllables_useP11hb_buffer_t:
  907|  1.74k|{
  908|  1.74k|  hb_glyph_info_t *info = buffer->info;
  909|  1.74k|  auto p =
  910|  1.74k|    + hb_iter (info, buffer->len)
  911|  1.74k|    | hb_enumerate
  912|  1.74k|    | hb_filter ([] (const hb_glyph_info_t &i) { return not_ccs_default_ignorable (i); },
  913|  1.74k|		 hb_second)
  914|  1.74k|    | hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
  915|  1.74k|		 {
  916|  1.74k|		   if (p.second.use_category() == USE(ZWNJ))
  917|  1.74k|		     for (unsigned i = p.first + 1; i < buffer->len; ++i)
  918|  1.74k|		       if (not_ccs_default_ignorable (info[i]))
  919|  1.74k|			 return !_hb_glyph_info_is_unicode_mark (&info[i]);
  920|  1.74k|		   return true;
  921|  1.74k|		 })
  922|  1.74k|    | hb_enumerate
  923|  1.74k|    | machine_index
  924|  1.74k|    ;
  925|  1.74k|  auto pe = p + p.len ();
  926|  1.74k|  auto eof = +pe;
  927|  1.74k|  auto ts = +p;
  928|  1.74k|  auto te = +p;
  929|  1.74k|  unsigned int act HB_UNUSED;
  930|  1.74k|  int cs;
  931|       |  
  932|  1.74k|#line 922 "hb-ot-shaper-use-machine.hh"
  933|  1.74k|	{
  934|  1.74k|	cs = use_syllable_machine_start;
  935|  1.74k|	ts = 0;
  936|  1.74k|	te = 0;
  937|  1.74k|	act = 0;
  938|  1.74k|	}
  939|       |
  940|  1.74k|#line 282 "hb-ot-shaper-use-machine.rl"
  941|       |
  942|       |
  943|  1.74k|  unsigned int syllable_serial = 1;
  944|       |  
  945|  1.74k|#line 931 "hb-ot-shaper-use-machine.hh"
  946|  1.74k|	{
  947|  1.74k|	int _slen;
  948|  1.74k|	int _trans;
  949|  1.74k|	const unsigned char *_keys;
  950|  1.74k|	const unsigned char *_inds;
  951|  1.74k|	if ( p == pe )
  ------------------
  |  Branch (951:7): [True: 3, False: 1.74k]
  ------------------
  952|      3|		goto _test_eof;
  953|  1.91M|_resume:
  954|  1.91M|	switch ( _use_syllable_machine_from_state_actions[cs] ) {
  ------------------
  |  Branch (954:11): [True: 958k, False: 951k]
  ------------------
  955|   951k|	case 2:
  ------------------
  |  Branch (955:2): [True: 951k, False: 958k]
  ------------------
  956|   951k|#line 1 "NONE"
  957|   951k|	{ts = p;}
  958|   951k|	break;
  959|  1.91M|#line 943 "hb-ot-shaper-use-machine.hh"
  960|  1.91M|	}
  961|       |
  962|  1.91M|	_keys = _use_syllable_machine_trans_keys + (cs<<1);
  963|  1.91M|	_inds = _use_syllable_machine_indicies + _use_syllable_machine_index_offsets[cs];
  964|       |
  965|  1.91M|	_slen = _use_syllable_machine_key_spans[cs];
  966|  1.91M|	_trans = _inds[ _slen > 0 && _keys[0] <=( (*p).second.second.use_category()) &&
  ------------------
  |  |   39|  1.91M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.91M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (966:18): [True: 1.91M, False: 0]
  |  Branch (966:31): [True: 1.03M, False: 873k]
  ------------------
  967|  1.91M|		( (*p).second.second.use_category()) <= _keys[1] ?
  ------------------
  |  |   39|  1.03M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.03M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  |  Branch (967:3): [True: 1.01M, False: 24.6k]
  ------------------
  968|  1.01M|		( (*p).second.second.use_category()) - _keys[0] : _slen ];
  ------------------
  |  |   39|  1.01M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.01M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  969|       |
  970|  1.91M|_eof_trans:
  971|  1.91M|	cs = _use_syllable_machine_trans_targs[_trans];
  972|       |
  973|  1.91M|	if ( _use_syllable_machine_trans_actions[_trans] == 0 )
  ------------------
  |  Branch (973:7): [True: 960k, False: 951k]
  ------------------
  974|   960k|		goto _again;
  975|       |
  976|   951k|	switch ( _use_syllable_machine_trans_actions[_trans] ) {
  ------------------
  |  Branch (976:11): [True: 0, False: 951k]
  ------------------
  977|     24|	case 12:
  ------------------
  |  Branch (977:2): [True: 24, False: 951k]
  ------------------
  978|     24|#line 170 "hb-ot-shaper-use-machine.rl"
  979|     24|	{te = p+1;{ found_syllable (use_virama_terminated_cluster); }}
  ------------------
  |  |  837|     24|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     24|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     24|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|    115|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 91, False: 24]
  |  |  ------------------
  |  |  840|     91|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|     91|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     24|    syllable_serial++; \
  |  |  842|     24|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 0, False: 24]
  |  |  ------------------
  |  |  843|     24|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     24|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     24|	break;
  981|     29|	case 10:
  ------------------
  |  Branch (981:2): [True: 29, False: 951k]
  ------------------
  982|     29|#line 171 "hb-ot-shaper-use-machine.rl"
  983|     29|	{te = p+1;{ found_syllable (use_sakot_terminated_cluster); }}
  ------------------
  |  |  837|     29|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     29|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     29|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|    134|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 105, False: 29]
  |  |  ------------------
  |  |  840|    105|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    105|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     29|    syllable_serial++; \
  |  |  842|     29|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 0, False: 29]
  |  |  ------------------
  |  |  843|     29|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     29|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  984|     29|	break;
  985|     69|	case 8:
  ------------------
  |  Branch (985:2): [True: 69, False: 951k]
  ------------------
  986|     69|#line 172 "hb-ot-shaper-use-machine.rl"
  987|     69|	{te = p+1;{ found_syllable (use_standard_cluster); }}
  ------------------
  |  |  837|     69|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     69|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     69|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  2.69k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 2.62k, False: 69]
  |  |  ------------------
  |  |  840|  2.62k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  2.62k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     69|    syllable_serial++; \
  |  |  842|     69|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 6, False: 63]
  |  |  ------------------
  |  |  843|     69|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     69|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|     69|	break;
  989|     28|	case 16:
  ------------------
  |  Branch (989:2): [True: 28, False: 951k]
  ------------------
  990|     28|#line 173 "hb-ot-shaper-use-machine.rl"
  991|     28|	{te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }}
  ------------------
  |  |  837|     28|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     28|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     28|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|    137|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 109, False: 28]
  |  |  ------------------
  |  |  840|    109|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    109|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     28|    syllable_serial++; \
  |  |  842|     28|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 0, False: 28]
  |  |  ------------------
  |  |  843|     28|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     28|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|     28|	break;
  993|     49|	case 14:
  ------------------
  |  Branch (993:2): [True: 49, False: 951k]
  ------------------
  994|     49|#line 174 "hb-ot-shaper-use-machine.rl"
  995|     49|	{te = p+1;{ found_syllable (use_numeral_cluster); }}
  ------------------
  |  |  837|     49|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     49|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     49|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  3.54k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 3.49k, False: 49]
  |  |  ------------------
  |  |  840|  3.49k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  3.49k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     49|    syllable_serial++; \
  |  |  842|     49|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 4, False: 45]
  |  |  ------------------
  |  |  843|     49|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     49|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  996|     49|	break;
  997|    142|	case 6:
  ------------------
  |  Branch (997:2): [True: 142, False: 951k]
  ------------------
  998|    142|#line 175 "hb-ot-shaper-use-machine.rl"
  999|    142|	{te = p+1;{ found_syllable (use_symbol_cluster); }}
  ------------------
  |  |  837|    142|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|    142|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|    142|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  6.39k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 6.25k, False: 142]
  |  |  ------------------
  |  |  840|  6.25k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  6.25k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|    142|    syllable_serial++; \
  |  |  842|    142|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 7, False: 135]
  |  |  ------------------
  |  |  843|    142|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|    142|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1000|    142|	break;
 1001|      0|	case 20:
  ------------------
  |  Branch (1001:2): [True: 0, False: 951k]
  ------------------
 1002|      0|#line 176 "hb-ot-shaper-use-machine.rl"
 1003|      0|	{te = p+1;{ found_syllable (use_hieroglyph_cluster); }}
  ------------------
  |  |  837|      0|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|      0|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|      0|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|      0|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 0, False: 0]
  |  |  ------------------
  |  |  840|      0|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|      0|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|      0|    syllable_serial++; \
  |  |  842|      0|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  843|      0|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|      0|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1004|      0|	break;
 1005|  17.5k|	case 4:
  ------------------
  |  Branch (1005:2): [True: 17.5k, False: 934k]
  ------------------
 1006|  17.5k|#line 177 "hb-ot-shaper-use-machine.rl"
 1007|  17.5k|	{te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  837|  17.5k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  17.5k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  17.5k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  42.9k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 25.4k, False: 17.5k]
  |  |  ------------------
  |  |  840|  25.4k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  25.4k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  17.5k|    syllable_serial++; \
  |  |  842|  17.5k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1.14k, False: 16.4k]
  |  |  ------------------
  |  |  843|  17.5k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  17.5k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|  17.5k|	break;
 1009|  26.6k|	case 3:
  ------------------
  |  Branch (1009:2): [True: 26.6k, False: 925k]
  ------------------
 1010|  26.6k|#line 178 "hb-ot-shaper-use-machine.rl"
 1011|  26.6k|	{te = p+1;{ found_syllable (use_non_cluster); }}
  ------------------
  |  |  837|  26.6k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  26.6k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  26.6k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  56.5k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 29.9k, False: 26.6k]
  |  |  ------------------
  |  |  840|  29.9k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  29.9k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  26.6k|    syllable_serial++; \
  |  |  842|  26.6k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1.77k, False: 24.8k]
  |  |  ------------------
  |  |  843|  26.6k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  26.6k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|  26.6k|	break;
 1013|     40|	case 11:
  ------------------
  |  Branch (1013:2): [True: 40, False: 951k]
  ------------------
 1014|     40|#line 170 "hb-ot-shaper-use-machine.rl"
 1015|     40|	{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
  ------------------
  |  |  837|     40|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     40|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     40|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  4.91k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 4.87k, False: 40]
  |  |  ------------------
  |  |  840|  4.87k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  4.87k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     40|    syllable_serial++; \
  |  |  842|     40|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1, False: 39]
  |  |  ------------------
  |  |  843|     40|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     40|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|     40|	break;
 1017|     39|	case 9:
  ------------------
  |  Branch (1017:2): [True: 39, False: 951k]
  ------------------
 1018|     39|#line 171 "hb-ot-shaper-use-machine.rl"
 1019|     39|	{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
  ------------------
  |  |  837|     39|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     39|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     39|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  3.52k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 3.48k, False: 39]
  |  |  ------------------
  |  |  840|  3.48k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  3.48k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     39|    syllable_serial++; \
  |  |  842|     39|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1, False: 38]
  |  |  ------------------
  |  |  843|     39|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     39|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1020|     39|	break;
 1021|  58.1k|	case 7:
  ------------------
  |  Branch (1021:2): [True: 58.1k, False: 893k]
  ------------------
 1022|  58.1k|#line 172 "hb-ot-shaper-use-machine.rl"
 1023|  58.1k|	{te = p;p--;{ found_syllable (use_standard_cluster); }}
  ------------------
  |  |  837|  58.1k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  58.1k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  58.1k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|   139k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 81.5k, False: 58.1k]
  |  |  ------------------
  |  |  840|  81.5k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  81.5k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  58.1k|    syllable_serial++; \
  |  |  842|  58.1k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 3.76k, False: 54.3k]
  |  |  ------------------
  |  |  843|  58.1k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  58.1k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|  58.1k|	break;
 1025|     29|	case 15:
  ------------------
  |  Branch (1025:2): [True: 29, False: 951k]
  ------------------
 1026|     29|#line 173 "hb-ot-shaper-use-machine.rl"
 1027|     29|	{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
  ------------------
  |  |  837|     29|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|     29|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|     29|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|    187|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 158, False: 29]
  |  |  ------------------
  |  |  840|    158|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|    158|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|     29|    syllable_serial++; \
  |  |  842|     29|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1, False: 28]
  |  |  ------------------
  |  |  843|     29|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|     29|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1028|     29|	break;
 1029|  12.1k|	case 13:
  ------------------
  |  Branch (1029:2): [True: 12.1k, False: 939k]
  ------------------
 1030|  12.1k|#line 174 "hb-ot-shaper-use-machine.rl"
 1031|  12.1k|	{te = p;p--;{ found_syllable (use_numeral_cluster); }}
  ------------------
  |  |  837|  12.1k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  12.1k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  12.1k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  27.3k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 15.1k, False: 12.1k]
  |  |  ------------------
  |  |  840|  15.1k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  15.1k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  12.1k|    syllable_serial++; \
  |  |  842|  12.1k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 810, False: 11.3k]
  |  |  ------------------
  |  |  843|  12.1k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  12.1k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|  12.1k|	break;
 1033|   804k|	case 5:
  ------------------
  |  Branch (1033:2): [True: 804k, False: 147k]
  ------------------
 1034|   804k|#line 175 "hb-ot-shaper-use-machine.rl"
 1035|   804k|	{te = p;p--;{ found_syllable (use_symbol_cluster); }}
  ------------------
  |  |  837|   804k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|   804k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|   804k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  1.63M|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 831k, False: 804k]
  |  |  ------------------
  |  |  840|   831k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|   831k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|   804k|    syllable_serial++; \
  |  |  842|   804k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 53.2k, False: 751k]
  |  |  ------------------
  |  |  843|   804k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|   804k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1036|   804k|	break;
 1037|      0|	case 19:
  ------------------
  |  Branch (1037:2): [True: 0, False: 951k]
  ------------------
 1038|      0|#line 176 "hb-ot-shaper-use-machine.rl"
 1039|      0|	{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
  ------------------
  |  |  837|      0|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|      0|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|      0|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|      0|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 0, False: 0]
  |  |  ------------------
  |  |  840|      0|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|      0|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|      0|    syllable_serial++; \
  |  |  842|      0|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  843|      0|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|      0|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|      0|	break;
 1041|  21.2k|	case 17:
  ------------------
  |  Branch (1041:2): [True: 21.2k, False: 930k]
  ------------------
 1042|  21.2k|#line 177 "hb-ot-shaper-use-machine.rl"
 1043|  21.2k|	{te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
  ------------------
  |  |  837|  21.2k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  21.2k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  21.2k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  54.8k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 33.6k, False: 21.2k]
  |  |  ------------------
  |  |  840|  33.6k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  33.6k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  21.2k|    syllable_serial++; \
  |  |  842|  21.2k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 1.39k, False: 19.8k]
  |  |  ------------------
  |  |  843|  21.2k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  21.2k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1044|  21.2k|	break;
 1045|  11.0k|	case 18:
  ------------------
  |  Branch (1045:2): [True: 11.0k, False: 940k]
  ------------------
 1046|  11.0k|#line 178 "hb-ot-shaper-use-machine.rl"
 1047|  11.0k|	{te = p;p--;{ found_syllable (use_non_cluster); }}
  ------------------
  |  |  837|  11.0k|  HB_STMT_START { \
  |  |  ------------------
  |  |  |  |  423|  11.0k|#define HB_STMT_START do
  |  |  ------------------
  |  |  838|  11.0k|    if (0) fprintf (stderr, "syllable %u..%u %s\n", (*ts).second.first, (*te).second.first, #syllable_type); \
  |  |  ------------------
  |  |  |  Branch (838:9): [Folded - Ignored]
  |  |  ------------------
  |  |  839|  24.8k|    for (unsigned i = (*ts).second.first; i < (*te).second.first; ++i) \
  |  |  ------------------
  |  |  |  Branch (839:43): [True: 13.7k, False: 11.0k]
  |  |  ------------------
  |  |  840|  13.7k|      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
  |  |  ------------------
  |  |  |  |  147|  13.7k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  |  |  ------------------
  |  |  841|  11.0k|    syllable_serial++; \
  |  |  842|  11.0k|    if (syllable_serial == 16) syllable_serial = 1; \
  |  |  ------------------
  |  |  |  Branch (842:9): [True: 733, False: 10.2k]
  |  |  ------------------
  |  |  843|  11.0k|  } HB_STMT_END
  |  |  ------------------
  |  |  |  |  424|  11.0k|#define HB_STMT_END   while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|  11.0k|	break;
 1049|   951k|#line 1014 "hb-ot-shaper-use-machine.hh"
 1050|   951k|	}
 1051|       |
 1052|  1.91M|_again:
 1053|  1.91M|	switch ( _use_syllable_machine_to_state_actions[cs] ) {
  ------------------
  |  Branch (1053:11): [True: 960k, False: 951k]
  ------------------
 1054|   951k|	case 1:
  ------------------
  |  Branch (1054:2): [True: 951k, False: 960k]
  ------------------
 1055|   951k|#line 1 "NONE"
 1056|   951k|	{ts = 0;}
 1057|   951k|	break;
 1058|  1.91M|#line 1021 "hb-ot-shaper-use-machine.hh"
 1059|  1.91M|	}
 1060|       |
 1061|  1.91M|	if ( ++p != pe )
  ------------------
  |  Branch (1061:7): [True: 1.90M, False: 3.43k]
  ------------------
 1062|  1.90M|		goto _resume;
 1063|  3.43k|	_test_eof: {}
 1064|  3.43k|	if ( p == eof )
  ------------------
  |  Branch (1064:7): [True: 3.43k, False: 0]
  ------------------
 1065|  3.43k|	{
 1066|  3.43k|	if ( _use_syllable_machine_eof_trans[cs] > 0 ) {
  ------------------
  |  Branch (1066:7): [True: 1.69k, False: 1.74k]
  ------------------
 1067|  1.69k|		_trans = _use_syllable_machine_eof_trans[cs] - 1;
 1068|  1.69k|		goto _eof_trans;
 1069|  1.69k|	}
 1070|  3.43k|	}
 1071|       |
 1072|  3.43k|	}
 1073|       |
 1074|  3.43k|#line 287 "hb-ot-shaper-use-machine.rl"
 1075|       |
 1076|  3.43k|}
hb-ot-shaper-use.cc:_ZNK4$_32clI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS4_IS1_IS3_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS6_E_RK4$_31LPv0EEZL18find_syllables_useSA_EUl9hb_pair_tIjSC_EE_RK3$_9LSH_0EEELSH_0EEE15machine_index_tIDTcldtclL_ZL8hb_derefEcl10hb_declvalIT_EEE4iterEEEOSS_:
  895|  1.74k|  { return machine_index_t<hb_iter_type<Iter>> (hb_iter (it)); }
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEC2ERKSP_:
  851|  1.74k|  machine_index_t (const Iter& it) : it (it) {}
hb-ot-shaper-use.cc:_ZZL18find_syllables_useP11hb_buffer_tENKUl9hb_pair_tIjRK15hb_glyph_info_tEE_clES5_:
  915|  6.86M|		 {
  916|  6.86M|		   if (p.second.use_category() == USE(ZWNJ))
  ------------------
  |  |   39|  6.86M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  6.86M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              		   if (p.second.use_category() == USE(ZWNJ))
  ------------------
  |  |   41|  6.86M|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  |  Branch (916:10): [True: 108k, False: 6.75M]
  ------------------
  917|   200k|		     for (unsigned i = p.first + 1; i < buffer->len; ++i)
  ------------------
  |  Branch (917:39): [True: 200k, False: 216]
  ------------------
  918|   200k|		       if (not_ccs_default_ignorable (info[i]))
  ------------------
  |  Branch (918:14): [True: 107k, False: 92.1k]
  ------------------
  919|   107k|			 return !_hb_glyph_info_is_unicode_mark (&info[i]);
  920|  6.75M|		   return true;
  921|  6.86M|		 })
hb-ot-shaper-use.cc:_ZL25not_ccs_default_ignorableRK15hb_glyph_info_t:
  903|  7.35M|{ return i.use_category() != USE(CGJ); }
  ------------------
  |  |   39|  7.35M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  7.35M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              { return i.use_category() != USE(CGJ); }
  ------------------
  |  |   41|  7.35M|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
hb-ot-shaper-use.cc:_ZZL18find_syllables_useP11hb_buffer_tENKUlRK15hb_glyph_info_tE_clES3_:
  912|  7.15M|    | hb_filter ([] (const hb_glyph_info_t &i) { return not_ccs_default_ignorable (i); },
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEC2ERKSQ_:
  854|   958k|					       it (o.it), is_null (o.is_null) {}
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEE11__forward__Ej:
  863|  46.2k|  void __forward__ (unsigned n) { it += n; }
hb-ot-shaper-use.cc:_ZNK15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEE7__len__Ev:
  861|  1.74k|  unsigned __len__ () const { return it.len (); }
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEaSEj:
  868|   955k|  {
  869|   955k|    assert (n == 0);
  870|      0|    is_null = true;
  871|   955k|  }
hb-ot-shaper-use.cc:_ZNK15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEeqERKSQ_:
  882|  1.91M|  { return is_null ? o.is_null : !o.is_null && (*it).first == (*o.it).first; }
  ------------------
  |  Branch (882:12): [True: 0, False: 1.91M]
  |  Branch (882:34): [True: 1.91M, False: 0]
  |  Branch (882:48): [True: 6.87k, False: 1.91M]
  ------------------
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEaSERKSQ_:
  875|  1.90M|  {
  876|  1.90M|    is_null = o.is_null;
  877|  1.90M|    unsigned index = (*it).first;
  878|  1.90M|    unsigned n = (*o.it).first;
  879|  1.90M|    if (index < n) it += n - index; else if (index > n) it -= index - n;
  ------------------
  |  Branch (879:9): [True: 1.90M, False: 1.74k]
  |  Branch (879:46): [True: 0, False: 1.74k]
  ------------------
  880|  1.90M|  }
hb-ot-shaper-use.cc:_ZNK15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEE8__item__Ev:
  859|  6.91M|  typename Iter::item_t __item__ () const { return *it; }
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEE8__prev__Ev:
  864|   907k|  void __prev__ () { --it; }
hb-ot-shaper-use.cc:_ZN15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEE8__next__Ev:
  862|  1.91M|  void __next__ () { ++it; }
hb-ot-shaper-use.cc:_ZNK15machine_index_tI13hb_zip_iter_tI14hb_iota_iter_tIjjE16hb_filter_iter_tIS3_IS0_IS2_10hb_array_tI15hb_glyph_info_tEEZL18find_syllables_useP11hb_buffer_tEUlRKS5_E_RK4$_31LPv0EEZL18find_syllables_useS9_EUl9hb_pair_tIjSB_EE_RK3$_9LSG_0EEEEneERKSQ_:
  883|  1.91M|  bool operator != (const machine_index_t& o) const { return !(*this == o); }

hb-ot-shaper-use.cc:_ZL19hb_use_get_categoryj:
  359|  28.6k|{
  360|  28.6k|  return u<921600u?hb_use_u8[2777+(((hb_use_u8[593+(((hb_use_u16[((hb_use_u8[113+(((hb_use_b4(hb_use_u8,u>>1>>3>>3>>5))<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:O;
  ------------------
  |  |   62|  28.6k|#define O	USE(O)	/* OTHER */
  |  |  ------------------
  |  |  |  |   41|  28.6k|#define USE(Cat) use_syllable_machine_ex_##Cat
  |  |  ------------------
  ------------------
  |  Branch (360:10): [True: 28.5k, False: 140]
  ------------------
  361|  28.6k|}
hb-ot-shaper-use.cc:_ZL9hb_use_b4PKhj:
  354|  28.5k|{
  355|  28.5k|  return (a[i>>1]>>((i&1u)<<2))&15u;
  356|  28.5k|}

hb-ot-shaper-use.cc:_ZL20collect_features_useP21hb_ot_shape_planner_t:
  111|  1.77k|{
  112|  1.77k|  hb_ot_map_builder_t *map = &plan->map;
  113|       |
  114|       |  /* Do this before any lookups have been applied. */
  115|  1.77k|  map->add_gsub_pause (setup_syllables_use);
  116|       |
  117|       |  /* "Default glyph pre-processing group" */
  118|  1.77k|  map->enable_feature (HB_TAG('l','o','c','l'), F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  119|  1.77k|  map->enable_feature (HB_TAG('c','c','m','p'), F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  120|  1.77k|  map->enable_feature (HB_TAG('n','u','k','t'), F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  121|  1.77k|  map->enable_feature (HB_TAG('a','k','h','n'), F_MANUAL_ZWJ | F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  122|       |
  123|       |  /* "Reordering group" */
  124|  1.77k|  map->add_gsub_pause (_hb_clear_substitution_flags);
  125|  1.77k|  map->add_feature (HB_TAG('r','p','h','f'), F_MANUAL_ZWJ | F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  126|  1.77k|  map->add_gsub_pause (record_rphf_use);
  127|  1.77k|  map->add_gsub_pause (_hb_clear_substitution_flags);
  128|  1.77k|  map->enable_feature (HB_TAG('p','r','e','f'), F_MANUAL_ZWJ | F_PER_SYLLABLE);
  ------------------
  |  |  179|  1.77k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  129|  1.77k|  map->add_gsub_pause (record_pref_use);
  130|       |
  131|       |  /* "Orthographic unit shaping group" */
  132|  14.1k|  for (unsigned int i = 0; i < ARRAY_LENGTH (use_basic_features); i++)
  ------------------
  |  Branch (132:28): [True: 12.4k, False: 1.77k]
  ------------------
  133|  12.4k|    map->enable_feature (use_basic_features[i], F_MANUAL_ZWJ | F_PER_SYLLABLE);
  134|       |
  135|  1.77k|  map->add_gsub_pause (reorder_use);
  136|  1.77k|  map->add_gsub_pause (hb_syllabic_clear_var); // Don't need syllables anymore, use stop to free buffer var
  137|       |
  138|       |  /* "Topographical features" */
  139|  8.86k|  for (unsigned int i = 0; i < ARRAY_LENGTH (use_topographical_features); i++)
  ------------------
  |  Branch (139:28): [True: 7.08k, False: 1.77k]
  ------------------
  140|  7.08k|    map->add_feature (use_topographical_features[i]);
  141|  1.77k|  map->add_gsub_pause (nullptr);
  142|       |
  143|       |  /* "Standard typographic presentation" */
  144|  10.6k|  for (unsigned int i = 0; i < ARRAY_LENGTH (use_other_features); i++)
  ------------------
  |  Branch (144:28): [True: 8.86k, False: 1.77k]
  ------------------
  145|  8.86k|    map->enable_feature (use_other_features[i], F_MANUAL_ZWJ);
  146|  1.77k|}
hb-ot-shaper-use.cc:_ZL19setup_syllables_usePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  300|  1.74k|{
  301|  1.74k|  HB_BUFFER_ALLOCATE_VAR (buffer, syllable);
  ------------------
  |  |  669|  1.74k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  1.74k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.74k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  302|  1.74k|  find_syllables_use (buffer);
  303|  1.74k|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  1.74k|  for (unsigned int \
  |  |  153|  1.74k|       _count = buffer->len, \
  |  |  154|  1.74k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 1.74k, False: 2]
  |  |  ------------------
  |  |  155|   954k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 952k, False: 1.74k]
  |  |  ------------------
  |  |  156|   952k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  304|   952k|    buffer->unsafe_to_break (start, end);
  305|  1.74k|  setup_rphf_mask (plan, buffer);
  306|  1.74k|  setup_topographical_masks (plan, buffer);
  307|  1.74k|  return false;
  308|  1.74k|}
hb-ot-shaper-use.cc:_ZL15setup_rphf_maskPK18hb_ot_shape_plan_tP11hb_buffer_t:
  215|  1.74k|{
  216|  1.74k|  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
  217|       |
  218|  1.74k|  hb_mask_t mask = use_plan->rphf_mask;
  219|  1.74k|  if (!mask) return;
  ------------------
  |  Branch (219:7): [True: 1.62k, False: 124]
  ------------------
  220|       |
  221|    124|  hb_glyph_info_t *info = buffer->info;
  222|       |
  223|    124|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    124|  for (unsigned int \
  |  |  153|    124|       _count = buffer->len, \
  |  |  154|    124|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 123, False: 1]
  |  |  ------------------
  |  |  155|   189k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 188k, False: 124]
  |  |  ------------------
  |  |  156|   188k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  224|   188k|  {
  225|   188k|    unsigned int limit = info[start].use_category() == USE(R) ? 1 : hb_min (3u, end - start);
  ------------------
  |  |   39|   188k|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|   188k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                  unsigned int limit = info[start].use_category() == USE(R) ? 1 : hb_min (3u, end - start);
  ------------------
  |  |   41|   188k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  |  Branch (225:26): [True: 192, False: 188k]
  ------------------
  226|   378k|    for (unsigned int i = start; i < start + limit; i++)
  ------------------
  |  Branch (226:34): [True: 189k, False: 188k]
  ------------------
  227|   189k|      info[i].mask |= mask;
  228|   188k|  }
  229|    124|}
hb-ot-shaper-use.cc:_ZL25setup_topographical_masksPK18hb_ot_shape_plan_tP11hb_buffer_t:
  234|  1.74k|{
  235|  1.74k|  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
  236|  1.74k|  if (use_plan->arabic_plan)
  ------------------
  |  Branch (236:7): [True: 353, False: 1.39k]
  ------------------
  237|    353|    return;
  238|       |
  239|  1.39k|  static_assert ((JOINING_FORM_INIT < 4 && JOINING_FORM_ISOL < 4 && JOINING_FORM_MEDI < 4 && JOINING_FORM_FINA < 4), "");
  240|  1.39k|  hb_mask_t masks[4], all_masks = 0;
  241|  6.97k|  for (unsigned int i = 0; i < 4; i++)
  ------------------
  |  Branch (241:28): [True: 5.58k, False: 1.39k]
  ------------------
  242|  5.58k|  {
  243|  5.58k|    masks[i] = plan->map.get_1_mask (use_topographical_features[i]);
  244|  5.58k|    if (masks[i] == plan->map.get_global_mask ())
  ------------------
  |  Branch (244:9): [True: 0, False: 5.58k]
  ------------------
  245|      0|      masks[i] = 0;
  246|  5.58k|    all_masks |= masks[i];
  247|  5.58k|  }
  248|  1.39k|  if (!all_masks)
  ------------------
  |  Branch (248:7): [True: 1.32k, False: 74]
  ------------------
  249|  1.32k|    return;
  250|     74|  hb_mask_t other_masks = ~all_masks;
  251|       |
  252|     74|  unsigned int last_start = 0;
  253|     74|  joining_form_t last_form = _JOINING_FORM_NONE;
  254|     74|  hb_glyph_info_t *info = buffer->info;
  255|     74|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|     74|  for (unsigned int \
  |  |  153|     74|       _count = buffer->len, \
  |  |  154|     74|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 73, False: 1]
  |  |  ------------------
  |  |  155|   258k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 258k, False: 74]
  |  |  ------------------
  |  |  156|   258k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  256|   258k|  {
  257|   258k|    use_syllable_type_t syllable_type = (use_syllable_type_t) (info[start].syllable() & 0x0F);
  ------------------
  |  |  147|   258k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  258|   258k|    switch (syllable_type)
  ------------------
  |  Branch (258:13): [True: 0, False: 258k]
  ------------------
  259|   258k|    {
  260|      0|      case use_hieroglyph_cluster:
  ------------------
  |  Branch (260:7): [True: 0, False: 258k]
  ------------------
  261|  5.88k|      case use_non_cluster:
  ------------------
  |  Branch (261:7): [True: 5.88k, False: 252k]
  ------------------
  262|       |	/* These don't join.  Nothing to do. */
  263|  5.88k|	last_form = _JOINING_FORM_NONE;
  264|  5.88k|	break;
  265|       |
  266|      3|      case use_virama_terminated_cluster:
  ------------------
  |  Branch (266:7): [True: 3, False: 258k]
  ------------------
  267|     18|      case use_sakot_terminated_cluster:
  ------------------
  |  Branch (267:7): [True: 15, False: 258k]
  ------------------
  268|  29.2k|      case use_standard_cluster:
  ------------------
  |  Branch (268:7): [True: 29.2k, False: 229k]
  ------------------
  269|  29.2k|      case use_number_joiner_terminated_cluster:
  ------------------
  |  Branch (269:7): [True: 4, False: 258k]
  ------------------
  270|  31.8k|      case use_numeral_cluster:
  ------------------
  |  Branch (270:7): [True: 2.62k, False: 256k]
  ------------------
  271|   238k|      case use_symbol_cluster:
  ------------------
  |  Branch (271:7): [True: 206k, False: 51.9k]
  ------------------
  272|   252k|      case use_broken_cluster:
  ------------------
  |  Branch (272:7): [True: 14.1k, False: 244k]
  ------------------
  273|       |
  274|   252k|	bool join = last_form == JOINING_FORM_FINA || last_form == JOINING_FORM_ISOL;
  ------------------
  |  Branch (274:14): [True: 252k, False: 196]
  |  Branch (274:48): [True: 93, False: 103]
  ------------------
  275|       |
  276|   252k|	if (join)
  ------------------
  |  Branch (276:6): [True: 252k, False: 103]
  ------------------
  277|   252k|	{
  278|       |	  /* Fixup previous syllable's form. */
  279|   252k|	  last_form = last_form == JOINING_FORM_FINA ? JOINING_FORM_MEDI : JOINING_FORM_INIT;
  ------------------
  |  Branch (279:16): [True: 252k, False: 93]
  ------------------
  280|   519k|	  for (unsigned int i = last_start; i < start; i++)
  ------------------
  |  Branch (280:38): [True: 266k, False: 252k]
  ------------------
  281|   266k|	    info[i].mask = (info[i].mask & other_masks) | masks[last_form];
  282|   252k|	}
  283|       |
  284|       |	/* Form for this syllable. */
  285|   252k|	last_form = join ? JOINING_FORM_FINA : JOINING_FORM_ISOL;
  ------------------
  |  Branch (285:14): [True: 252k, False: 103]
  ------------------
  286|   531k|	for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (286:31): [True: 278k, False: 252k]
  ------------------
  287|   278k|	  info[i].mask = (info[i].mask & other_masks) | masks[last_form];
  288|       |
  289|   252k|	break;
  290|   258k|    }
  291|       |
  292|   258k|    last_start = start;
  293|   258k|  }
  294|     74|}
hb-ot-shaper-use.cc:_ZL15record_rphf_usePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  314|  1.74k|{
  315|  1.74k|  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
  316|       |
  317|  1.74k|  hb_mask_t mask = use_plan->rphf_mask;
  318|  1.74k|  if (!mask) return false;
  ------------------
  |  Branch (318:7): [True: 1.62k, False: 124]
  ------------------
  319|    124|  hb_glyph_info_t *info = buffer->info;
  320|       |
  321|    124|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|    124|  for (unsigned int \
  |  |  153|    124|       _count = buffer->len, \
  |  |  154|    124|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 121, False: 3]
  |  |  ------------------
  |  |  155|   186k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 186k, False: 124]
  |  |  ------------------
  |  |  156|   186k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  322|   186k|  {
  323|       |    /* Mark a substituted repha as USE(R). */
  324|   351k|    for (unsigned int i = start; i < end && (info[i].mask & mask); i++)
  ------------------
  |  Branch (324:34): [True: 186k, False: 164k]
  |  Branch (324:45): [True: 186k, False: 44]
  ------------------
  325|   186k|      if (_hb_glyph_info_substituted (&info[i]))
  ------------------
  |  Branch (325:11): [True: 21.0k, False: 165k]
  ------------------
  326|  21.0k|      {
  327|  21.0k|	info[i].use_category() = USE(R);
  ------------------
  |  |   39|  21.0k|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  21.0k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[i].use_category() = USE(R);
  ------------------
  |  |   41|  21.0k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  328|  21.0k|	break;
  329|  21.0k|      }
  330|   186k|  }
  331|    124|  return false;
  332|  1.74k|}
hb-ot-shaper-use.cc:_ZL15record_pref_usePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  338|  1.74k|{
  339|  1.74k|  hb_glyph_info_t *info = buffer->info;
  340|       |
  341|  1.74k|  foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  1.74k|  for (unsigned int \
  |  |  153|  1.74k|       _count = buffer->len, \
  |  |  154|  1.74k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 1.74k, False: 6]
  |  |  ------------------
  |  |  155|   950k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 948k, False: 1.74k]
  |  |  ------------------
  |  |  156|   948k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  342|   948k|  {
  343|       |    /* Mark a substituted pref as VPre, as they behave the same way. */
  344|  2.14M|    for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (344:34): [True: 1.20M, False: 936k]
  ------------------
  345|  1.20M|      if (_hb_glyph_info_substituted (&info[i]))
  ------------------
  |  Branch (345:11): [True: 12.0k, False: 1.19M]
  ------------------
  346|  12.0k|      {
  347|  12.0k|	info[i].use_category() = USE(VPre);
  ------------------
  |  |   39|  12.0k|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  12.0k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
              	info[i].use_category() = USE(VPre);
  ------------------
  |  |   41|  12.0k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  348|  12.0k|	break;
  349|  12.0k|      }
  350|   948k|  }
  351|  1.74k|  return false;
  352|  1.74k|}
hb-ot-shaper-use.cc:_ZL11reorder_usePK18hb_ot_shape_plan_tP9hb_font_tP11hb_buffer_t:
  448|  1.74k|{
  449|  1.74k|  bool ret = false;
  450|  1.74k|  if (buffer->message (font, "start reordering USE"))
  ------------------
  |  Branch (450:7): [True: 1.74k, False: 0]
  ------------------
  451|  1.74k|  {
  452|  1.74k|    if (hb_syllabic_insert_dotted_circles (font, buffer,
  ------------------
  |  Branch (452:9): [True: 8, False: 1.74k]
  ------------------
  453|  1.74k|					   use_broken_cluster,
  454|  1.74k|					   USE(B),
  ------------------
  |  |   41|  1.74k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  455|  1.74k|					   USE(R)))
  ------------------
  |  |   41|  1.74k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  456|      8|      ret = true;
  457|       |
  458|  1.74k|    foreach_syllable (buffer, start, end)
  ------------------
  |  |  152|  1.74k|  for (unsigned int \
  |  |  153|  1.74k|       _count = buffer->len, \
  |  |  154|  1.74k|       start = 0, end = _count ? _hb_next_syllable (buffer, 0) : 0; \
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 1.74k, False: 6]
  |  |  ------------------
  |  |  155|   950k|       start < _count; \
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 948k, False: 1.74k]
  |  |  ------------------
  |  |  156|   948k|       start = end, end = _hb_next_syllable (buffer, start))
  ------------------
  459|   948k|      reorder_syllable_use (buffer, start, end);
  460|       |
  461|  1.74k|    (void) buffer->message (font, "end reordering USE");
  462|  1.74k|  }
  463|       |
  464|  1.74k|  HB_BUFFER_DEALLOCATE_VAR (buffer, use_category);
  ------------------
  |  |  671|  1.74k|#define HB_BUFFER_DEALLOCATE_VAR(b, var)	HB_BUFFER_XALLOCATE_VAR (b, deallocate_var,   var ())
  |  |  ------------------
  |  |  |  |  667|  1.74k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.74k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  465|       |
  466|  1.74k|  return ret;
  467|  1.74k|}
hb-ot-shaper-use.cc:_ZL20reorder_syllable_useP11hb_buffer_tjj:
  363|   948k|{
  364|   948k|  use_syllable_type_t syllable_type = (use_syllable_type_t) (buffer->info[start].syllable() & 0x0F);
  ------------------
  |  |  147|   948k|#define syllable()		var1.u8[3] /* GSUB/GPOS shaping boundaries */
  ------------------
  365|       |  /* Only a few syllable types need reordering. */
  366|   948k|  if (unlikely (!(FLAG_UNSAFE (syllable_type) &
  ------------------
  |  |  259|  1.89M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 49.5k, False: 899k]
  |  |  |  Branch (259:47): [True: 948k, False: 0]
  |  |  ------------------
  ------------------
  367|   948k|		  (FLAG (use_virama_terminated_cluster) |
  368|   948k|		   FLAG (use_sakot_terminated_cluster) |
  369|   948k|		   FLAG (use_standard_cluster) |
  370|   948k|		   FLAG (use_symbol_cluster) |
  371|   948k|		   FLAG (use_broken_cluster) |
  372|   948k|		   0))))
  373|  49.5k|    return;
  374|       |
  375|   899k|  hb_glyph_info_t *info = buffer->info;
  376|       |
  377|   899k|#define POST_BASE_FLAGS64 (FLAG64 (USE(FAbv)) | \
  378|   899k|			   FLAG64 (USE(FBlw)) | \
  379|   899k|			   FLAG64 (USE(FPst)) | \
  380|   899k|			   FLAG64 (USE(MAbv)) | \
  381|   899k|			   FLAG64 (USE(MBlw)) | \
  382|   899k|			   FLAG64 (USE(MPst)) | \
  383|   899k|			   FLAG64 (USE(MPre)) | \
  384|   899k|			   FLAG64 (USE(VAbv)) | \
  385|   899k|			   FLAG64 (USE(VBlw)) | \
  386|   899k|			   FLAG64 (USE(VPst)) | \
  387|   899k|			   FLAG64 (USE(VPre)) | \
  388|   899k|			   FLAG64 (USE(VMAbv)) | \
  389|   899k|			   FLAG64 (USE(VMBlw)) | \
  390|   899k|			   FLAG64 (USE(VMPst)) | \
  391|   899k|			   FLAG64 (USE(VMPre)))
  392|       |
  393|       |  /* Move things forward. */
  394|   899k|  if (info[start].use_category() == USE(R) && end - start > 1)
  ------------------
  |  |   39|   899k|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|   899k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                if (info[start].use_category() == USE(R) && end - start > 1)
  ------------------
  |  |   41|   899k|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  |  Branch (394:7): [True: 20.6k, False: 878k]
  |  Branch (394:47): [True: 9.97k, False: 10.7k]
  ------------------
  395|  9.97k|  {
  396|       |    /* Got a repha.  Reorder it towards the end, but before the first post-base
  397|       |     * glyph. */
  398|   134k|    for (unsigned int i = start + 1; i < end; i++)
  ------------------
  |  Branch (398:38): [True: 134k, False: 0]
  ------------------
  399|   134k|    {
  400|   134k|      bool is_post_base_glyph = (FLAG64_UNSAFE (info[i].use_category()) & POST_BASE_FLAGS64) ||
  ------------------
  |  |   77|   134k|#define FLAG64_UNSAFE(x) ((unsigned)(x) < 64 ? (((uint64_t) 1ULL) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (77:27): [True: 134k, False: 0]
  |  |  ------------------
  ------------------
                    bool is_post_base_glyph = (FLAG64_UNSAFE (info[i].use_category()) & POST_BASE_FLAGS64) ||
  ------------------
  |  |  377|   134k|#define POST_BASE_FLAGS64 (FLAG64 (USE(FAbv)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  378|   134k|			   FLAG64 (USE(FBlw)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  379|   134k|			   FLAG64 (USE(FPst)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  380|   134k|			   FLAG64 (USE(MAbv)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|   134k|			   FLAG64 (USE(MBlw)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  382|   134k|			   FLAG64 (USE(MPst)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|   134k|			   FLAG64 (USE(MPre)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  384|   134k|			   FLAG64 (USE(VAbv)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  385|   134k|			   FLAG64 (USE(VBlw)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  386|   134k|			   FLAG64 (USE(VPst)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  387|   134k|			   FLAG64 (USE(VPre)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  388|   134k|			   FLAG64 (USE(VMAbv)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  389|   134k|			   FLAG64 (USE(VMBlw)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  390|   134k|			   FLAG64 (USE(VMPst)) | \
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  391|   134k|			   FLAG64 (USE(VMPre)))
  |  |  ------------------
  |  |  |  |   76|   134k|#define FLAG64(x) (static_assert_expr ((unsigned)(x) < 64) + (((uint64_t) 1ULL) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|   134k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (400:33): [True: 63, False: 134k]
  ------------------
  401|   134k|				is_halant_use (info[i]);
  ------------------
  |  Branch (401:5): [True: 359, False: 134k]
  ------------------
  402|   134k|      if (is_post_base_glyph || i == end - 1)
  ------------------
  |  Branch (402:11): [True: 422, False: 134k]
  |  Branch (402:33): [True: 9.55k, False: 124k]
  ------------------
  403|  9.97k|      {
  404|       |	/* If we hit a post-base glyph, move before it; otherwise move to the
  405|       |	 * end. Shift things in between backward. */
  406|       |
  407|  9.97k|	if (is_post_base_glyph)
  ------------------
  |  Branch (407:6): [True: 422, False: 9.55k]
  ------------------
  408|    422|	  i--;
  409|       |
  410|  9.97k|	buffer->merge_clusters (start, i + 1);
  411|  9.97k|	hb_glyph_info_t t = info[start];
  412|  9.97k|	memmove (&info[start], &info[start + 1], (i - start) * sizeof (info[0]));
  413|  9.97k|	info[i] = t;
  414|       |
  415|  9.97k|	break;
  416|  9.97k|      }
  417|   134k|    }
  418|  9.97k|  }
  419|       |
  420|       |  /* Move things back. */
  421|   899k|  unsigned int j = start;
  422|  2.05M|  for (unsigned int i = start; i < end; i++)
  ------------------
  |  Branch (422:32): [True: 1.16M, False: 899k]
  ------------------
  423|  1.16M|  {
  424|  1.16M|    uint32_t flag = FLAG_UNSAFE (info[i].use_category());
  ------------------
  |  |   74|  1.16M|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  ------------------
  |  |  |  Branch (74:25): [True: 1.09M, False: 68.1k]
  |  |  ------------------
  ------------------
  425|  1.16M|    if (is_halant_use (info[i]))
  ------------------
  |  Branch (425:9): [True: 10.9k, False: 1.14M]
  ------------------
  426|  10.9k|    {
  427|       |      /* If we hit a halant, move after it; otherwise move to the beginning, and
  428|       |       * shift things in between forward. */
  429|  10.9k|      j = i + 1;
  430|  10.9k|    }
  431|  1.14M|    else if (((flag) & (FLAG (USE(VPre)) | FLAG (USE(VMPre)))) &&
  ------------------
  |  |   73|  1.14M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  1.14M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
                  else if (((flag) & (FLAG (USE(VPre)) | FLAG (USE(VMPre)))) &&
  ------------------
  |  |   73|  1.14M|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  ------------------
  |  |  |  |   59|  1.14M|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  ------------------
  ------------------
  |  Branch (431:14): [True: 15.4k, False: 1.13M]
  ------------------
  432|       |	     /* Only move the first component of a MultipleSubst. */
  433|  1.14M|	     0 == _hb_glyph_info_get_lig_comp (&info[i]) &&
  ------------------
  |  Branch (433:7): [True: 4.82k, False: 10.5k]
  ------------------
  434|  1.14M|	     j < i)
  ------------------
  |  Branch (434:7): [True: 1.06k, False: 3.76k]
  ------------------
  435|  1.06k|    {
  436|  1.06k|      buffer->merge_clusters (j, i + 1);
  437|  1.06k|      hb_glyph_info_t t = info[i];
  438|  1.06k|      memmove (&info[j + 1], &info[j], (i - j) * sizeof (info[0]));
  439|  1.06k|      info[j] = t;
  440|  1.06k|    }
  441|  1.16M|  }
  442|   899k|}
hb-ot-shaper-use.cc:_ZL13is_halant_useRK15hb_glyph_info_t:
  356|  1.29M|{
  357|  1.29M|  return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   39|  1.29M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.29M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   41|  1.29M|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
                return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   39|  1.29M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.29M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   41|  1.29M|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
                return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   39|  1.28M|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  1.28M|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
                return (info.use_category() == USE(H) || info.use_category() == USE(HVM) || info.use_category() == USE(IS)) &&
  ------------------
  |  |   41|  1.28M|#define USE(Cat) use_syllable_machine_ex_##Cat
  ------------------
  |  Branch (357:11): [True: 5.30k, False: 1.29M]
  |  Branch (357:44): [True: 2.18k, False: 1.28M]
  |  Branch (357:79): [True: 4.66k, False: 1.28M]
  ------------------
  358|  1.29M|	 !_hb_glyph_info_ligated (&info);
  ------------------
  |  Branch (358:3): [True: 11.3k, False: 836]
  ------------------
  359|  1.29M|}
hb-ot-shaper-use.cc:_ZL15data_create_usePK18hb_ot_shape_plan_t:
  157|  1.77k|{
  158|  1.77k|  use_shape_plan_t *use_plan = (use_shape_plan_t *) hb_calloc (1, sizeof (use_shape_plan_t));
  ------------------
  |  |  234|  1.77k|#define hb_calloc hb_calloc_impl
  ------------------
  159|  1.77k|  if (unlikely (!use_plan))
  ------------------
  |  |  259|  1.77k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 4, False: 1.76k]
  |  |  ------------------
  ------------------
  160|      4|    return nullptr;
  161|       |
  162|  1.76k|  use_plan->rphf_mask = plan->map.get_1_mask (HB_TAG('r','p','h','f'));
  ------------------
  |  |  179|  1.76k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  163|       |
  164|  1.76k|  if (has_arabic_joining (plan->props.script))
  ------------------
  |  Branch (164:7): [True: 358, False: 1.41k]
  ------------------
  165|    358|  {
  166|    358|    use_plan->arabic_plan = (arabic_shape_plan_t *) data_create_arabic (plan);
  167|    358|    if (unlikely (!use_plan->arabic_plan))
  ------------------
  |  |  259|    358|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3, False: 355]
  |  |  ------------------
  ------------------
  168|      3|    {
  169|      3|      hb_free (use_plan);
  ------------------
  |  |  236|      3|#define hb_free hb_free_impl
  ------------------
  170|      3|      return nullptr;
  171|      3|    }
  172|    358|  }
  173|       |
  174|  1.76k|  return use_plan;
  175|  1.76k|}
hb-ot-shaper-use.cc:_ZL16data_destroy_usePv:
  179|  1.76k|{
  180|  1.76k|  use_shape_plan_t *use_plan = (use_shape_plan_t *) data;
  181|       |
  182|  1.76k|  if (use_plan->arabic_plan)
  ------------------
  |  Branch (182:7): [True: 355, False: 1.41k]
  ------------------
  183|    355|    data_destroy_arabic (use_plan->arabic_plan);
  184|       |
  185|  1.76k|  hb_free (data);
  ------------------
  |  |  236|  1.76k|#define hb_free hb_free_impl
  ------------------
  186|  1.76k|}
hb-ot-shaper-use.cc:_ZL19preprocess_text_usePK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  474|  1.76k|{
  475|  1.76k|  _hb_preprocess_text_vowel_constraints (plan, buffer, font);
  476|  1.76k|}
hb-ot-shaper-use.cc:_ZL11compose_usePK31hb_ot_shape_normalize_context_tjjPj:
  483|  2.40k|{
  484|       |  /* Avoid recomposing split matras. */
  485|  2.40k|  if (HB_UNICODE_GENERAL_CATEGORY_IS_MARK (c->unicode->general_category (a)))
  ------------------
  |  |  355|  2.40k|	(FLAG_UNSAFE (gen_cat) & \
  |  |  ------------------
  |  |  |  |   74|  2.40k|#define FLAG_UNSAFE(x) ((unsigned)(x) < 32 ? (((uint32_t) 1U) << (unsigned)(x)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:25): [True: 2.40k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (355:2): [True: 504, False: 1.90k]
  |  |  ------------------
  |  |  356|  2.40k|	 (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  2.40k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.40k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  2.40k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
  |  |  ------------------
  |  |  |  |   73|  2.40k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.40k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  2.40k|	  FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
  |  |  ------------------
  |  |  |  |   73|  2.40k|#define FLAG(x) (static_assert_expr ((unsigned)(x) < 32) + (((uint32_t) 1U) << (unsigned)(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.40k|#define static_assert_expr(C) static_assert_expr<C>::value
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  486|    504|    return false;
  487|       |
  488|  1.90k|  return (bool)c->unicode->compose (a, b, ab);
  489|  2.40k|}
hb-ot-shaper-use.cc:_ZL15setup_masks_usePK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
  192|  1.76k|{
  193|  1.76k|  const use_shape_plan_t *use_plan = (const use_shape_plan_t *) plan->data;
  194|       |
  195|       |  /* Do this before allocating use_category(). */
  196|  1.76k|  if (use_plan->arabic_plan)
  ------------------
  |  Branch (196:7): [True: 355, False: 1.41k]
  ------------------
  197|    355|  {
  198|    355|    setup_masks_arabic_plan (use_plan->arabic_plan, buffer, plan->props.script);
  199|    355|  }
  200|       |
  201|  1.76k|  HB_BUFFER_ALLOCATE_VAR (buffer, use_category);
  ------------------
  |  |  669|  1.76k|#define HB_BUFFER_ALLOCATE_VAR(b, var)		HB_BUFFER_XALLOCATE_VAR (b, allocate_var,     var ())
  |  |  ------------------
  |  |  |  |  667|  1.76k|  b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
  |  |  |  |  668|  1.76k|	   sizeof (b->info[0].var))
  |  |  ------------------
  ------------------
  202|       |
  203|       |  /* We cannot setup masks here.  We save information about characters
  204|       |   * and setup masks later on in a pause-callback. */
  205|       |
  206|  1.76k|  unsigned int count = buffer->len;
  207|  1.76k|  hb_glyph_info_t *info = buffer->info;
  208|  30.4k|  for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (208:28): [True: 28.6k, False: 1.76k]
  ------------------
  209|  28.6k|    info[i].use_category() = hb_use_get_category (info[i].codepoint);
  ------------------
  |  |   39|  28.6k|#define use_category() ot_shaper_var_u8_category()
  |  |  ------------------
  |  |  |  |   38|  28.6k|#define ot_shaper_var_u8_category()	var2.u8[2]
  |  |  ------------------
  ------------------
  210|  1.76k|}

_Z37_hb_preprocess_text_vowel_constraintsPK18hb_ot_shape_plan_tP11hb_buffer_tP9hb_font_t:
   41|  4.39k|{
   42|       |#ifdef HB_NO_OT_SHAPER_VOWEL_CONSTRAINTS
   43|       |  return;
   44|       |#endif
   45|  4.39k|  if (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE)
  ------------------
  |  Branch (45:7): [True: 0, False: 4.39k]
  ------------------
   46|      0|    return;
   47|       |
   48|       |  /* UGLY UGLY UGLY business of adding dotted-circle in the middle of
   49|       |   * vowel-sequences that look like another vowel.  Data for each script
   50|       |   * collected from the USE script development spec.
   51|       |   *
   52|       |   * https://github.com/harfbuzz/harfbuzz/issues/1019
   53|       |   */
   54|  4.39k|  buffer->clear_output ();
   55|  4.39k|  unsigned int count = buffer->len;
   56|  4.39k|  switch ((unsigned) buffer->props.script)
   57|  4.39k|  {
   58|    451|    case HB_SCRIPT_DEVANAGARI:
  ------------------
  |  Branch (58:5): [True: 451, False: 3.94k]
  ------------------
   59|  7.07k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (59:29): [True: 6.62k, False: 451]
  |  Branch (59:56): [True: 6.62k, False: 0]
  ------------------
   60|  6.62k|      {
   61|  6.62k|	bool matched = false;
   62|  6.62k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (62:10): [True: 6.32k, False: 300]
  ------------------
   63|  6.62k|	{
   64|     70|	  case 0x0905u:
  ------------------
  |  Branch (64:4): [True: 70, False: 6.55k]
  ------------------
   65|     70|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (65:14): [True: 35, False: 35]
  ------------------
   66|     70|	    {
   67|     10|	      case 0x093Au: case 0x093Bu: case 0x093Eu: case 0x0945u:
  ------------------
  |  Branch (67:8): [True: 2, False: 68]
  |  Branch (67:22): [True: 3, False: 67]
  |  Branch (67:36): [True: 0, False: 70]
  |  Branch (67:50): [True: 5, False: 65]
  ------------------
   68|     18|	      case 0x0946u: case 0x0949u: case 0x094Au: case 0x094Bu:
  ------------------
  |  Branch (68:8): [True: 1, False: 69]
  |  Branch (68:22): [True: 1, False: 69]
  |  Branch (68:36): [True: 5, False: 65]
  |  Branch (68:50): [True: 1, False: 69]
  ------------------
   69|     35|	      case 0x094Cu: case 0x094Fu: case 0x0956u: case 0x0957u:
  ------------------
  |  Branch (69:8): [True: 11, False: 59]
  |  Branch (69:22): [True: 1, False: 69]
  |  Branch (69:36): [True: 2, False: 68]
  |  Branch (69:50): [True: 3, False: 67]
  ------------------
   70|     35|		matched = true;
   71|     35|		break;
   72|     70|	    }
   73|     70|	    break;
   74|     70|	  case 0x0906u:
  ------------------
  |  Branch (74:4): [True: 66, False: 6.55k]
  ------------------
   75|     66|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (75:14): [True: 38, False: 28]
  ------------------
   76|     66|	    {
   77|     20|	      case 0x093Au: case 0x0945u: case 0x0946u: case 0x0947u:
  ------------------
  |  Branch (77:8): [True: 0, False: 66]
  |  Branch (77:22): [True: 3, False: 63]
  |  Branch (77:36): [True: 16, False: 50]
  |  Branch (77:50): [True: 1, False: 65]
  ------------------
   78|     28|	      case 0x0948u:
  ------------------
  |  Branch (78:8): [True: 8, False: 58]
  ------------------
   79|     28|		matched = true;
   80|     28|		break;
   81|     66|	    }
   82|     66|	    break;
   83|     66|	  case 0x0909u:
  ------------------
  |  Branch (83:4): [True: 16, False: 6.60k]
  ------------------
   84|     16|	    matched = 0x0941u == buffer->cur (1).codepoint;
   85|     16|	    break;
   86|     38|	  case 0x090Fu:
  ------------------
  |  Branch (86:4): [True: 38, False: 6.58k]
  ------------------
   87|     38|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (87:14): [True: 13, False: 25]
  ------------------
   88|     38|	    {
   89|     25|	      case 0x0945u: case 0x0946u: case 0x0947u:
  ------------------
  |  Branch (89:8): [True: 0, False: 38]
  |  Branch (89:22): [True: 25, False: 13]
  |  Branch (89:36): [True: 0, False: 38]
  ------------------
   90|     25|		matched = true;
   91|     25|		break;
   92|     38|	    }
   93|     38|	    break;
   94|    110|	  case 0x0930u:
  ------------------
  |  Branch (94:4): [True: 110, False: 6.51k]
  ------------------
   95|    110|	    if (0x094Du == buffer->cur (1).codepoint &&
  ------------------
  |  Branch (95:10): [True: 61, False: 49]
  ------------------
   96|    110|		buffer->idx + 2 < count &&
  ------------------
  |  Branch (96:3): [True: 60, False: 1]
  ------------------
   97|    110|		0x0907u == buffer->cur (2).codepoint)
  ------------------
  |  Branch (97:3): [True: 28, False: 32]
  ------------------
   98|     28|	    {
   99|     28|	      (void) buffer->next_glyph ();
  100|     28|	      matched = true;
  101|     28|	    }
  102|    110|	    break;
  103|  6.62k|	}
  104|  6.62k|	(void) buffer->next_glyph ();
  105|  6.62k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (105:6): [True: 116, False: 6.50k]
  ------------------
  106|  6.62k|      }
  107|    451|      break;
  108|       |
  109|    451|    case HB_SCRIPT_BENGALI:
  ------------------
  |  Branch (109:5): [True: 128, False: 4.26k]
  ------------------
  110|  2.03k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (110:29): [True: 1.90k, False: 128]
  |  Branch (110:56): [True: 1.90k, False: 0]
  ------------------
  111|  1.90k|      {
  112|  1.90k|	bool matched = false;
  113|  1.90k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (113:10): [True: 1.79k, False: 103]
  ------------------
  114|  1.90k|	{
  115|     57|	  case 0x0985u:
  ------------------
  |  Branch (115:4): [True: 57, False: 1.84k]
  ------------------
  116|     57|	    matched = 0x09BEu == buffer->cur (1).codepoint;
  117|     57|	    break;
  118|     34|	  case 0x098Bu:
  ------------------
  |  Branch (118:4): [True: 34, False: 1.86k]
  ------------------
  119|     34|	    matched = 0x09C3u == buffer->cur (1).codepoint;
  120|     34|	    break;
  121|     12|	  case 0x098Cu:
  ------------------
  |  Branch (121:4): [True: 12, False: 1.89k]
  ------------------
  122|     12|	    matched = 0x09E2u == buffer->cur (1).codepoint;
  123|     12|	    break;
  124|  1.90k|	}
  125|  1.90k|	(void) buffer->next_glyph ();
  126|  1.90k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (126:6): [True: 18, False: 1.88k]
  ------------------
  127|  1.90k|      }
  128|    128|      break;
  129|       |
  130|    182|    case HB_SCRIPT_GURMUKHI:
  ------------------
  |  Branch (130:5): [True: 182, False: 4.21k]
  ------------------
  131|  2.83k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (131:29): [True: 2.65k, False: 182]
  |  Branch (131:56): [True: 2.65k, False: 0]
  ------------------
  132|  2.65k|      {
  133|  2.65k|	bool matched = false;
  134|  2.65k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (134:10): [True: 2.44k, False: 203]
  ------------------
  135|  2.65k|	{
  136|     66|	  case 0x0A05u:
  ------------------
  |  Branch (136:4): [True: 66, False: 2.58k]
  ------------------
  137|     66|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (137:14): [True: 51, False: 15]
  ------------------
  138|     66|	    {
  139|     15|	      case 0x0A3Eu: case 0x0A48u: case 0x0A4Cu:
  ------------------
  |  Branch (139:8): [True: 1, False: 65]
  |  Branch (139:22): [True: 13, False: 53]
  |  Branch (139:36): [True: 1, False: 65]
  ------------------
  140|     15|		matched = true;
  141|     15|		break;
  142|     66|	    }
  143|     66|	    break;
  144|    104|	  case 0x0A72u:
  ------------------
  |  Branch (144:4): [True: 104, False: 2.54k]
  ------------------
  145|    104|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (145:14): [True: 51, False: 53]
  ------------------
  146|    104|	    {
  147|     53|	      case 0x0A3Fu: case 0x0A40u: case 0x0A47u:
  ------------------
  |  Branch (147:8): [True: 45, False: 59]
  |  Branch (147:22): [True: 7, False: 97]
  |  Branch (147:36): [True: 1, False: 103]
  ------------------
  148|     53|		matched = true;
  149|     53|		break;
  150|    104|	    }
  151|    104|	    break;
  152|    104|	  case 0x0A73u:
  ------------------
  |  Branch (152:4): [True: 33, False: 2.61k]
  ------------------
  153|     33|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (153:14): [True: 22, False: 11]
  ------------------
  154|     33|	    {
  155|     11|	      case 0x0A41u: case 0x0A42u: case 0x0A4Bu:
  ------------------
  |  Branch (155:8): [True: 6, False: 27]
  |  Branch (155:22): [True: 4, False: 29]
  |  Branch (155:36): [True: 1, False: 32]
  ------------------
  156|     11|		matched = true;
  157|     11|		break;
  158|     33|	    }
  159|     33|	    break;
  160|  2.65k|	}
  161|  2.65k|	(void) buffer->next_glyph ();
  162|  2.65k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (162:6): [True: 79, False: 2.57k]
  ------------------
  163|  2.65k|      }
  164|    182|      break;
  165|       |
  166|    182|    case HB_SCRIPT_GUJARATI:
  ------------------
  |  Branch (166:5): [True: 150, False: 4.24k]
  ------------------
  167|  2.33k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (167:29): [True: 2.18k, False: 150]
  |  Branch (167:56): [True: 2.18k, False: 0]
  ------------------
  168|  2.18k|      {
  169|  2.18k|	bool matched = false;
  170|  2.18k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (170:10): [True: 2.01k, False: 167]
  ------------------
  171|  2.18k|	{
  172|     99|	  case 0x0A85u:
  ------------------
  |  Branch (172:4): [True: 99, False: 2.08k]
  ------------------
  173|     99|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (173:14): [True: 41, False: 58]
  ------------------
  174|     99|	    {
  175|     17|	      case 0x0ABEu: case 0x0AC5u: case 0x0AC7u: case 0x0AC8u:
  ------------------
  |  Branch (175:8): [True: 1, False: 98]
  |  Branch (175:22): [True: 0, False: 99]
  |  Branch (175:36): [True: 7, False: 92]
  |  Branch (175:50): [True: 9, False: 90]
  ------------------
  176|     58|	      case 0x0AC9u: case 0x0ACBu: case 0x0ACCu:
  ------------------
  |  Branch (176:8): [True: 0, False: 99]
  |  Branch (176:22): [True: 1, False: 98]
  |  Branch (176:36): [True: 40, False: 59]
  ------------------
  177|     58|		matched = true;
  178|     58|		break;
  179|     99|	    }
  180|     99|	    break;
  181|     99|	  case 0x0AC5u:
  ------------------
  |  Branch (181:4): [True: 68, False: 2.11k]
  ------------------
  182|     68|	    matched = 0x0ABEu == buffer->cur (1).codepoint;
  183|     68|	    break;
  184|  2.18k|	}
  185|  2.18k|	(void) buffer->next_glyph ();
  186|  2.18k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (186:6): [True: 68, False: 2.11k]
  ------------------
  187|  2.18k|      }
  188|    150|      break;
  189|       |
  190|    150|    case HB_SCRIPT_ORIYA:
  ------------------
  |  Branch (190:5): [True: 94, False: 4.30k]
  ------------------
  191|  1.48k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (191:29): [True: 1.39k, False: 94]
  |  Branch (191:56): [True: 1.39k, False: 0]
  ------------------
  192|  1.39k|      {
  193|  1.39k|	bool matched = false;
  194|  1.39k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (194:10): [True: 1.25k, False: 136]
  ------------------
  195|  1.39k|	{
  196|     53|	  case 0x0B05u:
  ------------------
  |  Branch (196:4): [True: 53, False: 1.33k]
  ------------------
  197|     53|	    matched = 0x0B3Eu == buffer->cur (1).codepoint;
  198|     53|	    break;
  199|     83|	  case 0x0B0Fu: case 0x0B13u:
  ------------------
  |  Branch (199:4): [True: 65, False: 1.32k]
  |  Branch (199:18): [True: 18, False: 1.37k]
  ------------------
  200|     83|	    matched = 0x0B57u == buffer->cur (1).codepoint;
  201|     83|	    break;
  202|  1.39k|	}
  203|  1.39k|	(void) buffer->next_glyph ();
  204|  1.39k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (204:6): [True: 18, False: 1.37k]
  ------------------
  205|  1.39k|      }
  206|     94|      break;
  207|       |
  208|    102|    case HB_SCRIPT_TAMIL:
  ------------------
  |  Branch (208:5): [True: 102, False: 4.29k]
  ------------------
  209|  1.57k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (209:29): [True: 1.47k, False: 102]
  |  Branch (209:56): [True: 1.47k, False: 0]
  ------------------
  210|  1.47k|      {
  211|  1.47k|	bool matched = false;
  212|  1.47k|	if (0x0B85u == buffer->cur ().codepoint &&
  ------------------
  |  Branch (212:6): [True: 115, False: 1.36k]
  ------------------
  213|  1.47k|	    0x0BC2u == buffer->cur (1).codepoint)
  ------------------
  |  Branch (213:6): [True: 86, False: 29]
  ------------------
  214|     86|	{
  215|     86|	  matched = true;
  216|     86|	}
  217|  1.47k|	(void) buffer->next_glyph ();
  218|  1.47k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (218:6): [True: 86, False: 1.38k]
  ------------------
  219|  1.47k|      }
  220|    102|      break;
  221|       |
  222|    658|    case HB_SCRIPT_TELUGU:
  ------------------
  |  Branch (222:5): [True: 658, False: 3.73k]
  ------------------
  223|  10.4k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (223:29): [True: 9.83k, False: 658]
  |  Branch (223:56): [True: 9.83k, False: 0]
  ------------------
  224|  9.83k|      {
  225|  9.83k|	bool matched = false;
  226|  9.83k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (226:10): [True: 9.67k, False: 160]
  ------------------
  227|  9.83k|	{
  228|     31|	  case 0x0C12u:
  ------------------
  |  Branch (228:4): [True: 31, False: 9.80k]
  ------------------
  229|     31|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (229:14): [True: 31, False: 0]
  ------------------
  230|     31|	    {
  231|      0|	      case 0x0C4Cu: case 0x0C55u:
  ------------------
  |  Branch (231:8): [True: 0, False: 31]
  |  Branch (231:22): [True: 0, False: 31]
  ------------------
  232|      0|		matched = true;
  233|      0|		break;
  234|     31|	    }
  235|     31|	    break;
  236|    129|	  case 0x0C3Fu: case 0x0C46u: case 0x0C4Au:
  ------------------
  |  Branch (236:4): [True: 23, False: 9.81k]
  |  Branch (236:18): [True: 14, False: 9.82k]
  |  Branch (236:32): [True: 92, False: 9.74k]
  ------------------
  237|    129|	    matched = 0x0C55u == buffer->cur (1).codepoint;
  238|    129|	    break;
  239|  9.83k|	}
  240|  9.83k|	(void) buffer->next_glyph ();
  241|  9.83k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (241:6): [True: 33, False: 9.80k]
  ------------------
  242|  9.83k|      }
  243|    658|      break;
  244|       |
  245|    658|    case HB_SCRIPT_KANNADA:
  ------------------
  |  Branch (245:5): [True: 335, False: 4.06k]
  ------------------
  246|  5.32k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (246:29): [True: 4.98k, False: 335]
  |  Branch (246:56): [True: 4.98k, False: 0]
  ------------------
  247|  4.98k|      {
  248|  4.98k|	bool matched = false;
  249|  4.98k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (249:10): [True: 4.89k, False: 99]
  ------------------
  250|  4.98k|	{
  251|     86|	  case 0x0C89u: case 0x0C8Bu:
  ------------------
  |  Branch (251:4): [True: 68, False: 4.92k]
  |  Branch (251:18): [True: 18, False: 4.97k]
  ------------------
  252|     86|	    matched = 0x0CBEu == buffer->cur (1).codepoint;
  253|     86|	    break;
  254|     13|	  case 0x0C92u:
  ------------------
  |  Branch (254:4): [True: 13, False: 4.97k]
  ------------------
  255|     13|	    matched = 0x0CCCu == buffer->cur (1).codepoint;
  256|     13|	    break;
  257|  4.98k|	}
  258|  4.98k|	(void) buffer->next_glyph ();
  259|  4.98k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (259:6): [True: 36, False: 4.95k]
  ------------------
  260|  4.98k|      }
  261|    335|      break;
  262|       |
  263|    534|    case HB_SCRIPT_MALAYALAM:
  ------------------
  |  Branch (263:5): [True: 534, False: 3.86k]
  ------------------
  264|  8.50k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (264:29): [True: 7.97k, False: 534]
  |  Branch (264:56): [True: 7.97k, False: 0]
  ------------------
  265|  7.97k|      {
  266|  7.97k|	bool matched = false;
  267|  7.97k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (267:10): [True: 7.84k, False: 127]
  ------------------
  268|  7.97k|	{
  269|     84|	  case 0x0D07u: case 0x0D09u:
  ------------------
  |  Branch (269:4): [True: 18, False: 7.95k]
  |  Branch (269:18): [True: 66, False: 7.90k]
  ------------------
  270|     84|	    matched = 0x0D57u == buffer->cur (1).codepoint;
  271|     84|	    break;
  272|     18|	  case 0x0D0Eu:
  ------------------
  |  Branch (272:4): [True: 18, False: 7.95k]
  ------------------
  273|     18|	    matched = 0x0D46u == buffer->cur (1).codepoint;
  274|     18|	    break;
  275|     25|	  case 0x0D12u:
  ------------------
  |  Branch (275:4): [True: 25, False: 7.94k]
  ------------------
  276|     25|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (276:14): [True: 25, False: 0]
  ------------------
  277|     25|	    {
  278|      0|	      case 0x0D3Eu: case 0x0D57u:
  ------------------
  |  Branch (278:8): [True: 0, False: 25]
  |  Branch (278:22): [True: 0, False: 25]
  ------------------
  279|      0|		matched = true;
  280|      0|		break;
  281|     25|	    }
  282|     25|	    break;
  283|  7.97k|	}
  284|  7.97k|	(void) buffer->next_glyph ();
  285|  7.97k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (285:6): [True: 39, False: 7.93k]
  ------------------
  286|  7.97k|      }
  287|    534|      break;
  288|       |
  289|    534|    case HB_SCRIPT_SINHALA:
  ------------------
  |  Branch (289:5): [True: 177, False: 4.21k]
  ------------------
  290|  2.76k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (290:29): [True: 2.58k, False: 177]
  |  Branch (290:56): [True: 2.58k, False: 0]
  ------------------
  291|  2.58k|      {
  292|  2.58k|	bool matched = false;
  293|  2.58k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (293:10): [True: 2.37k, False: 215]
  ------------------
  294|  2.58k|	{
  295|     91|	  case 0x0D85u:
  ------------------
  |  Branch (295:4): [True: 91, False: 2.49k]
  ------------------
  296|     91|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (296:14): [True: 58, False: 33]
  ------------------
  297|     91|	    {
  298|     33|	      case 0x0DCFu: case 0x0DD0u: case 0x0DD1u:
  ------------------
  |  Branch (298:8): [True: 0, False: 91]
  |  Branch (298:22): [True: 0, False: 91]
  |  Branch (298:36): [True: 33, False: 58]
  ------------------
  299|     33|		matched = true;
  300|     33|		break;
  301|     91|	    }
  302|     91|	    break;
  303|     91|	  case 0x0D8Bu: case 0x0D8Fu: case 0x0D94u:
  ------------------
  |  Branch (303:4): [True: 10, False: 2.57k]
  |  Branch (303:18): [True: 22, False: 2.56k]
  |  Branch (303:32): [True: 10, False: 2.57k]
  ------------------
  304|     42|	    matched = 0x0DDFu == buffer->cur (1).codepoint;
  305|     42|	    break;
  306|     27|	  case 0x0D8Du:
  ------------------
  |  Branch (306:4): [True: 27, False: 2.56k]
  ------------------
  307|     27|	    matched = 0x0DD8u == buffer->cur (1).codepoint;
  308|     27|	    break;
  309|     55|	  case 0x0D91u:
  ------------------
  |  Branch (309:4): [True: 55, False: 2.53k]
  ------------------
  310|     55|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (310:14): [True: 20, False: 35]
  ------------------
  311|     55|	    {
  312|     34|	      case 0x0DCAu: case 0x0DD9u: case 0x0DDAu: case 0x0DDCu:
  ------------------
  |  Branch (312:8): [True: 1, False: 54]
  |  Branch (312:22): [True: 12, False: 43]
  |  Branch (312:36): [True: 1, False: 54]
  |  Branch (312:50): [True: 20, False: 35]
  ------------------
  313|     35|	      case 0x0DDDu: case 0x0DDEu:
  ------------------
  |  Branch (313:8): [True: 0, False: 55]
  |  Branch (313:22): [True: 1, False: 54]
  ------------------
  314|     35|		matched = true;
  315|     35|		break;
  316|     55|	    }
  317|     55|	    break;
  318|  2.58k|	}
  319|  2.58k|	(void) buffer->next_glyph ();
  320|  2.58k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (320:6): [True: 68, False: 2.52k]
  ------------------
  321|  2.58k|      }
  322|    177|      break;
  323|       |
  324|    233|    case HB_SCRIPT_BRAHMI:
  ------------------
  |  Branch (324:5): [True: 233, False: 4.16k]
  ------------------
  325|  3.69k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (325:29): [True: 3.45k, False: 233]
  |  Branch (325:56): [True: 3.45k, False: 0]
  ------------------
  326|  3.45k|      {
  327|  3.45k|	bool matched = false;
  328|  3.45k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (328:10): [True: 3.37k, False: 87]
  ------------------
  329|  3.45k|	{
  330|     18|	  case 0x11005u:
  ------------------
  |  Branch (330:4): [True: 18, False: 3.43k]
  ------------------
  331|     18|	    matched = 0x11038u == buffer->cur (1).codepoint;
  332|     18|	    break;
  333|     13|	  case 0x1100Bu:
  ------------------
  |  Branch (333:4): [True: 13, False: 3.44k]
  ------------------
  334|     13|	    matched = 0x1103Eu == buffer->cur (1).codepoint;
  335|     13|	    break;
  336|     56|	  case 0x1100Fu:
  ------------------
  |  Branch (336:4): [True: 56, False: 3.40k]
  ------------------
  337|     56|	    matched = 0x11042u == buffer->cur (1).codepoint;
  338|     56|	    break;
  339|  3.45k|	}
  340|  3.45k|	(void) buffer->next_glyph ();
  341|  3.45k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (341:6): [True: 38, False: 3.41k]
  ------------------
  342|  3.45k|      }
  343|    233|      break;
  344|       |
  345|    233|    case HB_SCRIPT_KHOJKI:
  ------------------
  |  Branch (345:5): [True: 113, False: 4.28k]
  ------------------
  346|  1.76k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (346:29): [True: 1.65k, False: 113]
  |  Branch (346:56): [True: 1.65k, False: 0]
  ------------------
  347|  1.65k|      {
  348|  1.65k|	bool matched = false;
  349|  1.65k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (349:10): [True: 1.46k, False: 192]
  ------------------
  350|  1.65k|	{
  351|     88|	  case 0x11200u:
  ------------------
  |  Branch (351:4): [True: 88, False: 1.56k]
  ------------------
  352|     88|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (352:14): [True: 57, False: 31]
  ------------------
  353|     88|	    {
  354|     31|	      case 0x1122Cu: case 0x11231u: case 0x11233u:
  ------------------
  |  Branch (354:8): [True: 30, False: 58]
  |  Branch (354:23): [True: 1, False: 87]
  |  Branch (354:38): [True: 0, False: 88]
  ------------------
  355|     31|		matched = true;
  356|     31|		break;
  357|     88|	    }
  358|     88|	    break;
  359|     88|	  case 0x11206u:
  ------------------
  |  Branch (359:4): [True: 19, False: 1.63k]
  ------------------
  360|     19|	    matched = 0x1122Cu == buffer->cur (1).codepoint;
  361|     19|	    break;
  362|     63|	  case 0x1122Cu:
  ------------------
  |  Branch (362:4): [True: 63, False: 1.59k]
  ------------------
  363|     63|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (363:14): [True: 53, False: 10]
  ------------------
  364|     63|	    {
  365|     10|	      case 0x11230u: case 0x11231u:
  ------------------
  |  Branch (365:8): [True: 0, False: 63]
  |  Branch (365:23): [True: 10, False: 53]
  ------------------
  366|     10|		matched = true;
  367|     10|		break;
  368|     63|	    }
  369|     63|	    break;
  370|     63|	  case 0x11240u:
  ------------------
  |  Branch (370:4): [True: 22, False: 1.63k]
  ------------------
  371|     22|	    matched = 0x1122Eu == buffer->cur (1).codepoint;
  372|     22|	    break;
  373|  1.65k|	}
  374|  1.65k|	(void) buffer->next_glyph ();
  375|  1.65k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (375:6): [True: 41, False: 1.61k]
  ------------------
  376|  1.65k|      }
  377|    113|      break;
  378|       |
  379|    113|    case HB_SCRIPT_KHUDAWADI:
  ------------------
  |  Branch (379:5): [True: 32, False: 4.36k]
  ------------------
  380|    484|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (380:29): [True: 452, False: 32]
  |  Branch (380:56): [True: 452, False: 0]
  ------------------
  381|    452|      {
  382|    452|	bool matched = false;
  383|    452|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (383:10): [True: 378, False: 74]
  ------------------
  384|    452|	{
  385|     74|	  case 0x112B0u:
  ------------------
  |  Branch (385:4): [True: 74, False: 378]
  ------------------
  386|     74|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (386:14): [True: 46, False: 28]
  ------------------
  387|     74|	    {
  388|     28|	      case 0x112E0u: case 0x112E5u: case 0x112E6u: case 0x112E7u:
  ------------------
  |  Branch (388:8): [True: 21, False: 53]
  |  Branch (388:23): [True: 1, False: 73]
  |  Branch (388:38): [True: 1, False: 73]
  |  Branch (388:53): [True: 5, False: 69]
  ------------------
  389|     28|	      case 0x112E8u:
  ------------------
  |  Branch (389:8): [True: 0, False: 74]
  ------------------
  390|     28|		matched = true;
  391|     28|		break;
  392|     74|	    }
  393|     74|	    break;
  394|    452|	}
  395|    452|	(void) buffer->next_glyph ();
  396|    452|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (396:6): [True: 28, False: 424]
  ------------------
  397|    452|      }
  398|     32|      break;
  399|       |
  400|     73|    case HB_SCRIPT_TIRHUTA:
  ------------------
  |  Branch (400:5): [True: 73, False: 4.32k]
  ------------------
  401|  1.14k|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (401:29): [True: 1.07k, False: 73]
  |  Branch (401:56): [True: 1.07k, False: 0]
  ------------------
  402|  1.07k|      {
  403|  1.07k|	bool matched = false;
  404|  1.07k|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (404:10): [True: 946, False: 129]
  ------------------
  405|  1.07k|	{
  406|     17|	  case 0x11481u:
  ------------------
  |  Branch (406:4): [True: 17, False: 1.05k]
  ------------------
  407|     17|	    matched = 0x114B0u == buffer->cur (1).codepoint;
  408|     17|	    break;
  409|     66|	  case 0x1148Bu: case 0x1148Du:
  ------------------
  |  Branch (409:4): [True: 27, False: 1.04k]
  |  Branch (409:19): [True: 39, False: 1.03k]
  ------------------
  410|     66|	    matched = 0x114BAu == buffer->cur (1).codepoint;
  411|     66|	    break;
  412|     46|	  case 0x114AAu:
  ------------------
  |  Branch (412:4): [True: 46, False: 1.02k]
  ------------------
  413|     46|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (413:14): [True: 26, False: 20]
  ------------------
  414|     46|	    {
  415|     20|	      case 0x114B5u: case 0x114B6u:
  ------------------
  |  Branch (415:8): [True: 20, False: 26]
  |  Branch (415:23): [True: 0, False: 46]
  ------------------
  416|     20|		matched = true;
  417|     20|		break;
  418|     46|	    }
  419|     46|	    break;
  420|  1.07k|	}
  421|  1.07k|	(void) buffer->next_glyph ();
  422|  1.07k|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (422:6): [True: 20, False: 1.05k]
  ------------------
  423|  1.07k|      }
  424|     73|      break;
  425|       |
  426|     73|    case HB_SCRIPT_MODI:
  ------------------
  |  Branch (426:5): [True: 38, False: 4.35k]
  ------------------
  427|    578|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (427:29): [True: 540, False: 38]
  |  Branch (427:56): [True: 540, False: 0]
  ------------------
  428|    540|      {
  429|    540|	bool matched = false;
  430|    540|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (430:10): [True: 451, False: 89]
  ------------------
  431|    540|	{
  432|     89|	  case 0x11600u: case 0x11601u:
  ------------------
  |  Branch (432:4): [True: 82, False: 458]
  |  Branch (432:19): [True: 7, False: 533]
  ------------------
  433|     89|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (433:14): [True: 59, False: 30]
  ------------------
  434|     89|	    {
  435|     30|	      case 0x11639u: case 0x1163Au:
  ------------------
  |  Branch (435:8): [True: 5, False: 84]
  |  Branch (435:23): [True: 25, False: 64]
  ------------------
  436|     30|		matched = true;
  437|     30|		break;
  438|     89|	    }
  439|     89|	    break;
  440|    540|	}
  441|    540|	(void) buffer->next_glyph ();
  442|    540|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (442:6): [True: 30, False: 510]
  ------------------
  443|    540|      }
  444|     38|      break;
  445|       |
  446|     59|    case HB_SCRIPT_TAKRI:
  ------------------
  |  Branch (446:5): [True: 59, False: 4.33k]
  ------------------
  447|    902|      for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
  ------------------
  |  Branch (447:29): [True: 843, False: 59]
  |  Branch (447:56): [True: 843, False: 0]
  ------------------
  448|    843|      {
  449|    843|	bool matched = false;
  450|    843|	switch (buffer->cur ().codepoint)
  ------------------
  |  Branch (450:10): [True: 713, False: 130]
  ------------------
  451|    843|	{
  452|    110|	  case 0x11680u:
  ------------------
  |  Branch (452:4): [True: 110, False: 733]
  ------------------
  453|    110|	    switch (buffer->cur (1).codepoint)
  ------------------
  |  Branch (453:14): [True: 68, False: 42]
  ------------------
  454|    110|	    {
  455|     42|	      case 0x116ADu: case 0x116B4u: case 0x116B5u:
  ------------------
  |  Branch (455:8): [True: 3, False: 107]
  |  Branch (455:23): [True: 34, False: 76]
  |  Branch (455:38): [True: 5, False: 105]
  ------------------
  456|     42|		matched = true;
  457|     42|		break;
  458|    110|	    }
  459|    110|	    break;
  460|    110|	  case 0x11686u:
  ------------------
  |  Branch (460:4): [True: 20, False: 823]
  ------------------
  461|     20|	    matched = 0x116B2u == buffer->cur (1).codepoint;
  462|     20|	    break;
  463|    843|	}
  464|    843|	(void) buffer->next_glyph ();
  465|    843|	if (matched) _output_with_dotted_circle (buffer);
  ------------------
  |  Branch (465:6): [True: 42, False: 801]
  ------------------
  466|    843|      }
  467|     59|      break;
  468|       |
  469|  1.03k|    default:
  ------------------
  |  Branch (469:5): [True: 1.03k, False: 3.35k]
  ------------------
  470|  1.03k|      break;
  471|  4.39k|  }
  472|  4.39k|  buffer->sync ();
  473|  4.39k|}
hb-ot-shaper-vowel-constraints.cc:_ZL26_output_with_dotted_circleP11hb_buffer_t:
   32|    760|{
   33|    760|  _output_dotted_circle (buffer);
   34|    760|  (void) buffer->next_glyph ();
   35|    760|}
hb-ot-shaper-vowel-constraints.cc:_ZL21_output_dotted_circleP11hb_buffer_t:
   25|    760|{
   26|    760|  (void) buffer->output_glyph (0x25CCu);
   27|    760|  _hb_glyph_info_reset_continuation (&buffer->prev());
   28|    760|}

hb-ot-shape.cc:_ZL23hb_ot_shaper_categorizePK21hb_ot_shape_planner_t:
  178|  49.3k|{
  179|  49.3k|  switch ((hb_tag_t) planner->props.script)
  180|  49.3k|  {
  181|  40.9k|    default:
  ------------------
  |  Branch (181:5): [True: 40.9k, False: 8.37k]
  ------------------
  182|  40.9k|      return &_hb_ot_shaper_default;
  183|       |
  184|       |
  185|       |    /* Unicode-1.1 additions */
  186|  1.19k|    case HB_SCRIPT_ARABIC:
  ------------------
  |  Branch (186:5): [True: 1.19k, False: 48.1k]
  ------------------
  187|       |
  188|       |    /* Unicode-3.0 additions */
  189|  1.43k|    case HB_SCRIPT_SYRIAC:
  ------------------
  |  Branch (189:5): [True: 242, False: 49.0k]
  ------------------
  190|       |
  191|       |      /* For Arabic script, use the Arabic shaper even if no OT script tag was found.
  192|       |       * This is because we do fallback shaping for Arabic script (and not others).
  193|       |       * But note that Arabic shaping is applicable only to horizontal layout; for
  194|       |       * vertical text, just use the generic shaper instead. */
  195|  1.43k|      if ((planner->map.chosen_script[0] != HB_OT_TAG_DEFAULT_SCRIPT ||
  ------------------
  |  |   83|  1.43k|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|  2.86k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (195:12): [True: 1.42k, False: 10]
  ------------------
  196|  1.43k|	   planner->props.script == HB_SCRIPT_ARABIC) &&
  ------------------
  |  Branch (196:5): [True: 6, False: 4]
  ------------------
  197|  1.43k|	  HB_DIRECTION_IS_HORIZONTAL(planner->props.direction))
  ------------------
  |  |  271|  1.43k|#define HB_DIRECTION_IS_HORIZONTAL(dir)	((((unsigned int) (dir)) & ~1U) == 4)
  |  |  ------------------
  |  |  |  Branch (271:41): [True: 1.43k, False: 0]
  |  |  ------------------
  ------------------
  198|  1.43k|	return &_hb_ot_shaper_arabic;
  199|      4|      else
  200|      4|	return &_hb_ot_shaper_default;
  201|       |
  202|       |
  203|       |    /* Unicode-1.1 additions */
  204|    252|    case HB_SCRIPT_THAI:
  ------------------
  |  Branch (204:5): [True: 252, False: 49.0k]
  ------------------
  205|    281|    case HB_SCRIPT_LAO:
  ------------------
  |  Branch (205:5): [True: 29, False: 49.2k]
  ------------------
  206|       |
  207|    281|      return &_hb_ot_shaper_thai;
  208|       |
  209|       |
  210|       |    /* Unicode-1.1 additions */
  211|    596|    case HB_SCRIPT_HANGUL:
  ------------------
  |  Branch (211:5): [True: 596, False: 48.7k]
  ------------------
  212|       |
  213|    596|      return &_hb_ot_shaper_hangul;
  214|       |
  215|       |
  216|       |    /* Unicode-1.1 additions */
  217|    561|    case HB_SCRIPT_HEBREW:
  ------------------
  |  Branch (217:5): [True: 561, False: 48.7k]
  ------------------
  218|       |
  219|    561|      return &_hb_ot_shaper_hebrew;
  220|       |
  221|       |
  222|       |    /* Unicode-1.1 additions */
  223|    175|    case HB_SCRIPT_BENGALI:
  ------------------
  |  Branch (223:5): [True: 175, False: 49.1k]
  ------------------
  224|    651|    case HB_SCRIPT_DEVANAGARI:
  ------------------
  |  Branch (224:5): [True: 476, False: 48.8k]
  ------------------
  225|    803|    case HB_SCRIPT_GUJARATI:
  ------------------
  |  Branch (225:5): [True: 152, False: 49.1k]
  ------------------
  226|    986|    case HB_SCRIPT_GURMUKHI:
  ------------------
  |  Branch (226:5): [True: 183, False: 49.1k]
  ------------------
  227|  1.33k|    case HB_SCRIPT_KANNADA:
  ------------------
  |  Branch (227:5): [True: 353, False: 48.9k]
  ------------------
  228|  1.93k|    case HB_SCRIPT_MALAYALAM:
  ------------------
  |  Branch (228:5): [True: 595, False: 48.7k]
  ------------------
  229|  2.03k|    case HB_SCRIPT_ORIYA:
  ------------------
  |  Branch (229:5): [True: 102, False: 49.2k]
  ------------------
  230|  2.14k|    case HB_SCRIPT_TAMIL:
  ------------------
  |  Branch (230:5): [True: 104, False: 49.2k]
  ------------------
  231|  2.83k|    case HB_SCRIPT_TELUGU:
  ------------------
  |  Branch (231:5): [True: 690, False: 48.6k]
  ------------------
  232|       |
  233|       |      /* If the designer designed the font for the 'DFLT' script,
  234|       |       * (or we ended up arbitrarily pick 'latn'), use the default shaper.
  235|       |       * Otherwise, use the specific shaper.
  236|       |       *
  237|       |       * If it's indy3 tag, send to USE. */
  238|  2.83k|      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
  ------------------
  |  |  179|  5.66k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (238:11): [True: 1, False: 2.82k]
  ------------------
  239|  2.83k|	  planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
  ------------------
  |  |  179|  2.82k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (239:4): [True: 122, False: 2.70k]
  ------------------
  240|    123|	return &_hb_ot_shaper_default;
  241|  2.70k|      else if ((planner->map.chosen_script[0] & 0x000000FF) == '3')
  ------------------
  |  Branch (241:16): [True: 3, False: 2.70k]
  ------------------
  242|      3|	return &_hb_ot_shaper_use;
  243|  2.70k|      else
  244|  2.70k|	return &_hb_ot_shaper_indic;
  245|       |
  246|    262|    case HB_SCRIPT_KHMER:
  ------------------
  |  Branch (246:5): [True: 262, False: 49.0k]
  ------------------
  247|    262|	return &_hb_ot_shaper_khmer;
  248|       |
  249|    497|    case HB_SCRIPT_MYANMAR:
  ------------------
  |  Branch (249:5): [True: 497, False: 48.8k]
  ------------------
  250|       |      /* If the designer designed the font for the 'DFLT' script,
  251|       |       * (or we ended up arbitrarily pick 'latn'), use the default shaper.
  252|       |       * Otherwise, use the specific shaper.
  253|       |       *
  254|       |       * If designer designed for 'mymr' tag, also send to default
  255|       |       * shaper.  That's tag used from before Myanmar shaping spec
  256|       |       * was developed.  The shaping spec uses 'mym2' tag. */
  257|    497|      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
  ------------------
  |  |  179|    994|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (257:11): [True: 1, False: 496]
  ------------------
  258|    497|	  planner->map.chosen_script[0] == HB_TAG ('l','a','t','n') ||
  ------------------
  |  |  179|    993|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (258:4): [True: 33, False: 463]
  ------------------
  259|    497|	  planner->map.chosen_script[0] == HB_TAG ('m','y','m','r'))
  ------------------
  |  |  179|    463|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (259:4): [True: 0, False: 463]
  ------------------
  260|     34|	return &_hb_ot_shaper_default;
  261|    463|      else
  262|    463|	return &_hb_ot_shaper_myanmar;
  263|       |
  264|       |
  265|      0|#ifndef HB_NO_OT_SHAPER_MYANMAR_ZAWGYI
  266|      0|#define HB_SCRIPT_MYANMAR_ZAWGYI	((hb_script_t) HB_TAG ('Q','a','a','g'))
  267|      0|    case HB_SCRIPT_MYANMAR_ZAWGYI:
  ------------------
  |  |  266|      0|#define HB_SCRIPT_MYANMAR_ZAWGYI	((hb_script_t) HB_TAG ('Q','a','a','g'))
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (267:5): [True: 0, False: 49.3k]
  ------------------
  268|       |    /* https://github.com/harfbuzz/harfbuzz/issues/1162 */
  269|       |
  270|      0|      return &_hb_ot_shaper_myanmar_zawgyi;
  271|      0|#endif
  272|       |
  273|       |
  274|       |    /* Unicode-2.0 additions */
  275|    173|    case HB_SCRIPT_TIBETAN:
  ------------------
  |  Branch (275:5): [True: 173, False: 49.1k]
  ------------------
  276|       |
  277|       |    /* Unicode-3.0 additions */
  278|    389|    case HB_SCRIPT_MONGOLIAN:
  ------------------
  |  Branch (278:5): [True: 216, False: 49.1k]
  ------------------
  279|    575|    case HB_SCRIPT_SINHALA:
  ------------------
  |  Branch (279:5): [True: 186, False: 49.1k]
  ------------------
  280|       |
  281|       |    /* Unicode-3.2 additions */
  282|    577|    case HB_SCRIPT_BUHID:
  ------------------
  |  Branch (282:5): [True: 2, False: 49.3k]
  ------------------
  283|    584|    case HB_SCRIPT_HANUNOO:
  ------------------
  |  Branch (283:5): [True: 7, False: 49.3k]
  ------------------
  284|    606|    case HB_SCRIPT_TAGALOG:
  ------------------
  |  Branch (284:5): [True: 22, False: 49.2k]
  ------------------
  285|    608|    case HB_SCRIPT_TAGBANWA:
  ------------------
  |  Branch (285:5): [True: 2, False: 49.3k]
  ------------------
  286|       |
  287|       |    /* Unicode-4.0 additions */
  288|    649|    case HB_SCRIPT_LIMBU:
  ------------------
  |  Branch (288:5): [True: 41, False: 49.2k]
  ------------------
  289|    654|    case HB_SCRIPT_TAI_LE:
  ------------------
  |  Branch (289:5): [True: 5, False: 49.3k]
  ------------------
  290|       |
  291|       |    /* Unicode-4.1 additions */
  292|    779|    case HB_SCRIPT_BUGINESE:
  ------------------
  |  Branch (292:5): [True: 125, False: 49.1k]
  ------------------
  293|    790|    case HB_SCRIPT_KHAROSHTHI:
  ------------------
  |  Branch (293:5): [True: 11, False: 49.3k]
  ------------------
  294|    797|    case HB_SCRIPT_SYLOTI_NAGRI:
  ------------------
  |  Branch (294:5): [True: 7, False: 49.3k]
  ------------------
  295|    800|    case HB_SCRIPT_TIFINAGH:
  ------------------
  |  Branch (295:5): [True: 3, False: 49.3k]
  ------------------
  296|       |
  297|       |    /* Unicode-5.0 additions */
  298|    840|    case HB_SCRIPT_BALINESE:
  ------------------
  |  Branch (298:5): [True: 40, False: 49.2k]
  ------------------
  299|    894|    case HB_SCRIPT_NKO:
  ------------------
  |  Branch (299:5): [True: 54, False: 49.2k]
  ------------------
  300|    906|    case HB_SCRIPT_PHAGS_PA:
  ------------------
  |  Branch (300:5): [True: 12, False: 49.3k]
  ------------------
  301|       |
  302|       |    /* Unicode-5.1 additions */
  303|    913|    case HB_SCRIPT_CHAM:
  ------------------
  |  Branch (303:5): [True: 7, False: 49.3k]
  ------------------
  304|    917|    case HB_SCRIPT_KAYAH_LI:
  ------------------
  |  Branch (304:5): [True: 4, False: 49.3k]
  ------------------
  305|    949|    case HB_SCRIPT_LEPCHA:
  ------------------
  |  Branch (305:5): [True: 32, False: 49.2k]
  ------------------
  306|    951|    case HB_SCRIPT_REJANG:
  ------------------
  |  Branch (306:5): [True: 2, False: 49.3k]
  ------------------
  307|    953|    case HB_SCRIPT_SAURASHTRA:
  ------------------
  |  Branch (307:5): [True: 2, False: 49.3k]
  ------------------
  308|    961|    case HB_SCRIPT_SUNDANESE:
  ------------------
  |  Branch (308:5): [True: 8, False: 49.3k]
  ------------------
  309|       |
  310|       |    /* Unicode-5.2 additions */
  311|    984|    case HB_SCRIPT_EGYPTIAN_HIEROGLYPHS:
  ------------------
  |  Branch (311:5): [True: 23, False: 49.2k]
  ------------------
  312|    987|    case HB_SCRIPT_JAVANESE:
  ------------------
  |  Branch (312:5): [True: 3, False: 49.3k]
  ------------------
  313|    997|    case HB_SCRIPT_KAITHI:
  ------------------
  |  Branch (313:5): [True: 10, False: 49.3k]
  ------------------
  314|  1.00k|    case HB_SCRIPT_MEETEI_MAYEK:
  ------------------
  |  Branch (314:5): [True: 3, False: 49.3k]
  ------------------
  315|  1.06k|    case HB_SCRIPT_TAI_THAM:
  ------------------
  |  Branch (315:5): [True: 66, False: 49.2k]
  ------------------
  316|  1.07k|    case HB_SCRIPT_TAI_VIET:
  ------------------
  |  Branch (316:5): [True: 13, False: 49.3k]
  ------------------
  317|       |
  318|       |    /* Unicode-6.0 additions */
  319|  1.08k|    case HB_SCRIPT_BATAK:
  ------------------
  |  Branch (319:5): [True: 4, False: 49.3k]
  ------------------
  320|  1.32k|    case HB_SCRIPT_BRAHMI:
  ------------------
  |  Branch (320:5): [True: 241, False: 49.0k]
  ------------------
  321|  1.35k|    case HB_SCRIPT_MANDAIC:
  ------------------
  |  Branch (321:5): [True: 34, False: 49.2k]
  ------------------
  322|       |
  323|       |    /* Unicode-6.1 additions */
  324|  1.36k|    case HB_SCRIPT_CHAKMA:
  ------------------
  |  Branch (324:5): [True: 6, False: 49.3k]
  ------------------
  325|  1.36k|    case HB_SCRIPT_MIAO:
  ------------------
  |  Branch (325:5): [True: 4, False: 49.3k]
  ------------------
  326|  1.37k|    case HB_SCRIPT_SHARADA:
  ------------------
  |  Branch (326:5): [True: 11, False: 49.3k]
  ------------------
  327|  1.43k|    case HB_SCRIPT_TAKRI:
  ------------------
  |  Branch (327:5): [True: 59, False: 49.2k]
  ------------------
  328|       |
  329|       |    /* Unicode-7.0 additions */
  330|  1.43k|    case HB_SCRIPT_DUPLOYAN:
  ------------------
  |  Branch (330:5): [True: 1, False: 49.3k]
  ------------------
  331|  1.44k|    case HB_SCRIPT_GRANTHA:
  ------------------
  |  Branch (331:5): [True: 6, False: 49.3k]
  ------------------
  332|  1.56k|    case HB_SCRIPT_KHOJKI:
  ------------------
  |  Branch (332:5): [True: 115, False: 49.2k]
  ------------------
  333|  1.59k|    case HB_SCRIPT_KHUDAWADI:
  ------------------
  |  Branch (333:5): [True: 32, False: 49.2k]
  ------------------
  334|  1.59k|    case HB_SCRIPT_MAHAJANI:
  ------------------
  |  Branch (334:5): [True: 1, False: 49.3k]
  ------------------
  335|  1.60k|    case HB_SCRIPT_MANICHAEAN:
  ------------------
  |  Branch (335:5): [True: 11, False: 49.3k]
  ------------------
  336|  1.64k|    case HB_SCRIPT_MODI:
  ------------------
  |  Branch (336:5): [True: 38, False: 49.2k]
  ------------------
  337|  1.64k|    case HB_SCRIPT_PAHAWH_HMONG:
  ------------------
  |  Branch (337:5): [True: 2, False: 49.3k]
  ------------------
  338|  1.65k|    case HB_SCRIPT_PSALTER_PAHLAVI:
  ------------------
  |  Branch (338:5): [True: 8, False: 49.3k]
  ------------------
  339|  1.65k|    case HB_SCRIPT_SIDDHAM:
  ------------------
  |  Branch (339:5): [True: 1, False: 49.3k]
  ------------------
  340|  1.72k|    case HB_SCRIPT_TIRHUTA:
  ------------------
  |  Branch (340:5): [True: 73, False: 49.2k]
  ------------------
  341|       |
  342|       |    /* Unicode-8.0 additions */
  343|  1.73k|    case HB_SCRIPT_AHOM:
  ------------------
  |  Branch (343:5): [True: 7, False: 49.3k]
  ------------------
  344|  1.74k|    case HB_SCRIPT_MULTANI:
  ------------------
  |  Branch (344:5): [True: 9, False: 49.3k]
  ------------------
  345|       |
  346|       |    /* Unicode-9.0 additions */
  347|  1.75k|    case HB_SCRIPT_ADLAM:
  ------------------
  |  Branch (347:5): [True: 10, False: 49.3k]
  ------------------
  348|  1.76k|    case HB_SCRIPT_BHAIKSUKI:
  ------------------
  |  Branch (348:5): [True: 11, False: 49.3k]
  ------------------
  349|  1.76k|    case HB_SCRIPT_MARCHEN:
  ------------------
  |  Branch (349:5): [True: 1, False: 49.3k]
  ------------------
  350|  1.78k|    case HB_SCRIPT_NEWA:
  ------------------
  |  Branch (350:5): [True: 20, False: 49.2k]
  ------------------
  351|       |
  352|       |    /* Unicode-10.0 additions */
  353|  1.78k|    case HB_SCRIPT_MASARAM_GONDI:
  ------------------
  |  Branch (353:5): [True: 3, False: 49.3k]
  ------------------
  354|  1.79k|    case HB_SCRIPT_SOYOMBO:
  ------------------
  |  Branch (354:5): [True: 4, False: 49.3k]
  ------------------
  355|  1.80k|    case HB_SCRIPT_ZANABAZAR_SQUARE:
  ------------------
  |  Branch (355:5): [True: 11, False: 49.3k]
  ------------------
  356|       |
  357|       |    /* Unicode-11.0 additions */
  358|  1.81k|    case HB_SCRIPT_DOGRA:
  ------------------
  |  Branch (358:5): [True: 12, False: 49.3k]
  ------------------
  359|  1.81k|    case HB_SCRIPT_GUNJALA_GONDI:
  ------------------
  |  Branch (359:5): [True: 1, False: 49.3k]
  ------------------
  360|  1.84k|    case HB_SCRIPT_HANIFI_ROHINGYA:
  ------------------
  |  Branch (360:5): [True: 26, False: 49.2k]
  ------------------
  361|  1.84k|    case HB_SCRIPT_MAKASAR:
  ------------------
  |  Branch (361:5): [True: 2, False: 49.3k]
  ------------------
  362|  1.84k|    case HB_SCRIPT_MEDEFAIDRIN:
  ------------------
  |  Branch (362:5): [True: 5, False: 49.3k]
  ------------------
  363|  1.85k|    case HB_SCRIPT_OLD_SOGDIAN:
  ------------------
  |  Branch (363:5): [True: 5, False: 49.3k]
  ------------------
  364|  1.85k|    case HB_SCRIPT_SOGDIAN:
  ------------------
  |  Branch (364:5): [True: 5, False: 49.3k]
  ------------------
  365|       |
  366|       |    /* Unicode-12.0 additions */
  367|  1.85k|    case HB_SCRIPT_ELYMAIC:
  ------------------
  |  Branch (367:5): [True: 1, False: 49.3k]
  ------------------
  368|  1.86k|    case HB_SCRIPT_NANDINAGARI:
  ------------------
  |  Branch (368:5): [True: 2, False: 49.3k]
  ------------------
  369|  1.86k|    case HB_SCRIPT_NYIAKENG_PUACHUE_HMONG:
  ------------------
  |  Branch (369:5): [True: 2, False: 49.3k]
  ------------------
  370|  1.86k|    case HB_SCRIPT_WANCHO:
  ------------------
  |  Branch (370:5): [True: 2, False: 49.3k]
  ------------------
  371|       |
  372|       |    /* Unicode-13.0 additions */
  373|  1.87k|    case HB_SCRIPT_CHORASMIAN:
  ------------------
  |  Branch (373:5): [True: 7, False: 49.3k]
  ------------------
  374|  1.88k|    case HB_SCRIPT_DIVES_AKURU:
  ------------------
  |  Branch (374:5): [True: 10, False: 49.3k]
  ------------------
  375|  1.88k|    case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
  ------------------
  |  Branch (375:5): [True: 3, False: 49.3k]
  ------------------
  376|  1.89k|    case HB_SCRIPT_YEZIDI:
  ------------------
  |  Branch (376:5): [True: 5, False: 49.3k]
  ------------------
  377|       |
  378|       |    /* Unicode-14.0 additions */
  379|  1.89k|    case HB_SCRIPT_CYPRO_MINOAN:
  ------------------
  |  Branch (379:5): [True: 1, False: 49.3k]
  ------------------
  380|  1.89k|    case HB_SCRIPT_OLD_UYGHUR:
  ------------------
  |  Branch (380:5): [True: 7, False: 49.3k]
  ------------------
  381|  1.90k|    case HB_SCRIPT_TANGSA:
  ------------------
  |  Branch (381:5): [True: 6, False: 49.3k]
  ------------------
  382|  1.90k|    case HB_SCRIPT_TOTO:
  ------------------
  |  Branch (382:5): [True: 2, False: 49.3k]
  ------------------
  383|  1.90k|    case HB_SCRIPT_VITHKUQI:
  ------------------
  |  Branch (383:5): [True: 1, False: 49.3k]
  ------------------
  384|       |
  385|       |    /* Unicode-15.0 additions */
  386|  1.91k|    case HB_SCRIPT_KAWI:
  ------------------
  |  Branch (386:5): [True: 10, False: 49.3k]
  ------------------
  387|  1.91k|    case HB_SCRIPT_NAG_MUNDARI:
  ------------------
  |  Branch (387:5): [True: 1, False: 49.3k]
  ------------------
  388|       |
  389|       |      /* If the designer designed the font for the 'DFLT' script,
  390|       |       * (or we ended up arbitrarily pick 'latn'), use the default shaper.
  391|       |       * Otherwise, use the specific shaper.
  392|       |       * Note that for some simple scripts, there may not be *any*
  393|       |       * GSUB/GPOS needed, so there may be no scripts found! */
  394|  1.91k|      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
  ------------------
  |  |  179|  3.83k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (394:11): [True: 1, False: 1.91k]
  ------------------
  395|  1.91k|	  planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
  ------------------
  |  |  179|  1.91k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (395:4): [True: 72, False: 1.84k]
  ------------------
  396|     73|	return &_hb_ot_shaper_default;
  397|  1.84k|      else
  398|  1.84k|	return &_hb_ot_shaper_use;
  399|  49.3k|  }
  400|  49.3k|}

hb-ot-tag.cc:_ZL32hb_ot_tags_from_complex_languagePKcS0_PjS1_:
 1646|  49.3k|{
 1647|  49.3k|  if (limit - lang_str >= 7)
  ------------------
  |  Branch (1647:7): [True: 0, False: 49.3k]
  ------------------
 1648|      0|  {
 1649|      0|    const char *p = strchr (lang_str, '-');
 1650|      0|    if (!p || p >= limit || limit - p < 5) goto out;
  ------------------
  |  Branch (1650:9): [True: 0, False: 0]
  |  Branch (1650:15): [True: 0, False: 0]
  |  Branch (1650:29): [True: 0, False: 0]
  ------------------
 1651|      0|    if (subtag_matches (p, limit, "-fonnapa", 8))
  ------------------
  |  Branch (1651:9): [True: 0, False: 0]
  ------------------
 1652|      0|    {
 1653|       |      /* Undetermined; North American Phonetic Alphabet */
 1654|      0|      tags[0] = HB_TAG('A','P','P','H');  /* Phonetic transcription—Americanist conventions */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1655|      0|      *count = 1;
 1656|      0|      return true;
 1657|      0|    }
 1658|      0|    if (subtag_matches (p, limit, "-polyton", 8))
  ------------------
  |  Branch (1658:9): [True: 0, False: 0]
  ------------------
 1659|      0|    {
 1660|       |      /* Modern Greek (1453-); Polytonic Greek */
 1661|      0|      tags[0] = HB_TAG('P','G','R',' ');  /* Polytonic Greek */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1662|      0|      *count = 1;
 1663|      0|      return true;
 1664|      0|    }
 1665|      0|    if (subtag_matches (p, limit, "-arevmda", 8))
  ------------------
  |  Branch (1665:9): [True: 0, False: 0]
  ------------------
 1666|      0|    {
 1667|       |      /* Armenian; Western Armenian (retired code) */
 1668|      0|      tags[0] = HB_TAG('H','Y','E',' ');  /* Armenian */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1669|      0|      *count = 1;
 1670|      0|      return true;
 1671|      0|    }
 1672|      0|    if (subtag_matches (p, limit, "-provenc", 8))
  ------------------
  |  Branch (1672:9): [True: 0, False: 0]
  ------------------
 1673|      0|    {
 1674|       |      /* Occitan (post 1500); Provençal */
 1675|      0|      tags[0] = HB_TAG('P','R','O',' ');  /* Provençal / Old Provençal */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1676|      0|      *count = 1;
 1677|      0|      return true;
 1678|      0|    }
 1679|      0|    if (subtag_matches (p, limit, "-fonipa", 7))
  ------------------
  |  Branch (1679:9): [True: 0, False: 0]
  ------------------
 1680|      0|    {
 1681|       |      /* Undetermined; International Phonetic Alphabet */
 1682|      0|      tags[0] = HB_TAG('I','P','P','H');  /* Phonetic transcription—IPA conventions */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1683|      0|      *count = 1;
 1684|      0|      return true;
 1685|      0|    }
 1686|      0|    if (subtag_matches (p, limit, "-geok", 5))
  ------------------
  |  Branch (1686:9): [True: 0, False: 0]
  ------------------
 1687|      0|    {
 1688|       |      /* Undetermined; Khutsuri (Asomtavruli and Nuskhuri) */
 1689|      0|      tags[0] = HB_TAG('K','G','E',' ');  /* Khutsuri Georgian */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1690|      0|      *count = 1;
 1691|      0|      return true;
 1692|      0|    }
 1693|      0|    if (subtag_matches (p, limit, "-syre", 5))
  ------------------
  |  Branch (1693:9): [True: 0, False: 0]
  ------------------
 1694|      0|    {
 1695|       |      /* Undetermined; Syriac (Estrangelo variant) */
 1696|      0|      tags[0] = HB_TAG('S','Y','R','E');  /* Syriac, Estrangela script-variant (equivalent to ISO 15924 'Syre') */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1697|      0|      *count = 1;
 1698|      0|      return true;
 1699|      0|    }
 1700|      0|    if (subtag_matches (p, limit, "-syrj", 5))
  ------------------
  |  Branch (1700:9): [True: 0, False: 0]
  ------------------
 1701|      0|    {
 1702|       |      /* Undetermined; Syriac (Western variant) */
 1703|      0|      tags[0] = HB_TAG('S','Y','R','J');  /* Syriac, Western script-variant (equivalent to ISO 15924 'Syrj') */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1704|      0|      *count = 1;
 1705|      0|      return true;
 1706|      0|    }
 1707|      0|    if (subtag_matches (p, limit, "-syrn", 5))
  ------------------
  |  Branch (1707:9): [True: 0, False: 0]
  ------------------
 1708|      0|    {
 1709|       |      /* Undetermined; Syriac (Eastern variant) */
 1710|      0|      tags[0] = HB_TAG('S','Y','R','N');  /* Syriac, Eastern script-variant (equivalent to ISO 15924 'Syrn') */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1711|      0|      *count = 1;
 1712|      0|      return true;
 1713|      0|    }
 1714|      0|  }
 1715|  49.3k|out:
 1716|  49.3k|  switch (lang_str[0])
  ------------------
  |  Branch (1716:11): [True: 0, False: 49.3k]
  ------------------
 1717|  49.3k|  {
 1718|      0|  case 'a':
  ------------------
  |  Branch (1718:3): [True: 0, False: 49.3k]
  ------------------
 1719|      0|    if (0 == strcmp (&lang_str[1], "rt-lojban"))
  ------------------
  |  Branch (1719:9): [True: 0, False: 0]
  ------------------
 1720|      0|    {
 1721|       |      /* Lojban (retired code) */
 1722|      0|      tags[0] = HB_TAG('J','B','O',' ');  /* Lojban */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1723|      0|      *count = 1;
 1724|      0|      return true;
 1725|      0|    }
 1726|      0|    break;
 1727|  49.3k|  case 'c':
  ------------------
  |  Branch (1727:3): [True: 49.3k, False: 0]
  ------------------
 1728|  49.3k|    if (lang_matches (&lang_str[1], limit, "do-hant-hk", 10))
  ------------------
  |  Branch (1728:9): [True: 0, False: 49.3k]
  ------------------
 1729|      0|    {
 1730|       |      /* Min Dong Chinese; Han (Traditional variant); Hong Kong */
 1731|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1732|      0|      *count = 1;
 1733|      0|      return true;
 1734|      0|    }
 1735|  49.3k|    if (lang_matches (&lang_str[1], limit, "do-hant-mo", 10))
  ------------------
  |  Branch (1735:9): [True: 0, False: 49.3k]
  ------------------
 1736|      0|    {
 1737|       |      /* Min Dong Chinese; Han (Traditional variant); Macao */
 1738|      0|      unsigned int i;
 1739|      0|      hb_tag_t possible_tags[] = {
 1740|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1741|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1742|      0|      };
 1743|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1743:19): [True: 0, False: 0]
  |  Branch (1743:28): [True: 0, False: 0]
  ------------------
 1744|      0|	tags[i] = possible_tags[i];
 1745|      0|      *count = i;
 1746|      0|      return true;
 1747|      0|    }
 1748|  49.3k|    if (lang_matches (&lang_str[1], limit, "jy-hant-hk", 10))
  ------------------
  |  Branch (1748:9): [True: 0, False: 49.3k]
  ------------------
 1749|      0|    {
 1750|       |      /* Jinyu Chinese; Han (Traditional variant); Hong Kong */
 1751|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1752|      0|      *count = 1;
 1753|      0|      return true;
 1754|      0|    }
 1755|  49.3k|    if (lang_matches (&lang_str[1], limit, "jy-hant-mo", 10))
  ------------------
  |  Branch (1755:9): [True: 0, False: 49.3k]
  ------------------
 1756|      0|    {
 1757|       |      /* Jinyu Chinese; Han (Traditional variant); Macao */
 1758|      0|      unsigned int i;
 1759|      0|      hb_tag_t possible_tags[] = {
 1760|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1761|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1762|      0|      };
 1763|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1763:19): [True: 0, False: 0]
  |  Branch (1763:28): [True: 0, False: 0]
  ------------------
 1764|      0|	tags[i] = possible_tags[i];
 1765|      0|      *count = i;
 1766|      0|      return true;
 1767|      0|    }
 1768|  49.3k|    if (lang_matches (&lang_str[1], limit, "mn-hant-hk", 10))
  ------------------
  |  Branch (1768:9): [True: 0, False: 49.3k]
  ------------------
 1769|      0|    {
 1770|       |      /* Mandarin Chinese; Han (Traditional variant); Hong Kong */
 1771|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1772|      0|      *count = 1;
 1773|      0|      return true;
 1774|      0|    }
 1775|  49.3k|    if (lang_matches (&lang_str[1], limit, "mn-hant-mo", 10))
  ------------------
  |  Branch (1775:9): [True: 0, False: 49.3k]
  ------------------
 1776|      0|    {
 1777|       |      /* Mandarin Chinese; Han (Traditional variant); Macao */
 1778|      0|      unsigned int i;
 1779|      0|      hb_tag_t possible_tags[] = {
 1780|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1781|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1782|      0|      };
 1783|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1783:19): [True: 0, False: 0]
  |  Branch (1783:28): [True: 0, False: 0]
  ------------------
 1784|      0|	tags[i] = possible_tags[i];
 1785|      0|      *count = i;
 1786|      0|      return true;
 1787|      0|    }
 1788|  49.3k|    if (lang_matches (&lang_str[1], limit, "np-hant-hk", 10))
  ------------------
  |  Branch (1788:9): [True: 0, False: 49.3k]
  ------------------
 1789|      0|    {
 1790|       |      /* Northern Ping Chinese; Han (Traditional variant); Hong Kong */
 1791|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1792|      0|      *count = 1;
 1793|      0|      return true;
 1794|      0|    }
 1795|  49.3k|    if (lang_matches (&lang_str[1], limit, "np-hant-mo", 10))
  ------------------
  |  Branch (1795:9): [True: 0, False: 49.3k]
  ------------------
 1796|      0|    {
 1797|       |      /* Northern Ping Chinese; Han (Traditional variant); Macao */
 1798|      0|      unsigned int i;
 1799|      0|      hb_tag_t possible_tags[] = {
 1800|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1801|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1802|      0|      };
 1803|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1803:19): [True: 0, False: 0]
  |  Branch (1803:28): [True: 0, False: 0]
  ------------------
 1804|      0|	tags[i] = possible_tags[i];
 1805|      0|      *count = i;
 1806|      0|      return true;
 1807|      0|    }
 1808|  49.3k|    if (lang_matches (&lang_str[1], limit, "px-hant-hk", 10))
  ------------------
  |  Branch (1808:9): [True: 0, False: 49.3k]
  ------------------
 1809|      0|    {
 1810|       |      /* Pu-Xian Chinese; Han (Traditional variant); Hong Kong */
 1811|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1812|      0|      *count = 1;
 1813|      0|      return true;
 1814|      0|    }
 1815|  49.3k|    if (lang_matches (&lang_str[1], limit, "px-hant-mo", 10))
  ------------------
  |  Branch (1815:9): [True: 0, False: 49.3k]
  ------------------
 1816|      0|    {
 1817|       |      /* Pu-Xian Chinese; Han (Traditional variant); Macao */
 1818|      0|      unsigned int i;
 1819|      0|      hb_tag_t possible_tags[] = {
 1820|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1821|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1822|      0|      };
 1823|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1823:19): [True: 0, False: 0]
  |  Branch (1823:28): [True: 0, False: 0]
  ------------------
 1824|      0|	tags[i] = possible_tags[i];
 1825|      0|      *count = i;
 1826|      0|      return true;
 1827|      0|    }
 1828|  49.3k|    if (lang_matches (&lang_str[1], limit, "sp-hant-hk", 10))
  ------------------
  |  Branch (1828:9): [True: 0, False: 49.3k]
  ------------------
 1829|      0|    {
 1830|       |      /* Southern Ping Chinese; Han (Traditional variant); Hong Kong */
 1831|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1832|      0|      *count = 1;
 1833|      0|      return true;
 1834|      0|    }
 1835|  49.3k|    if (lang_matches (&lang_str[1], limit, "sp-hant-mo", 10))
  ------------------
  |  Branch (1835:9): [True: 0, False: 49.3k]
  ------------------
 1836|      0|    {
 1837|       |      /* Southern Ping Chinese; Han (Traditional variant); Macao */
 1838|      0|      unsigned int i;
 1839|      0|      hb_tag_t possible_tags[] = {
 1840|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1841|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1842|      0|      };
 1843|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1843:19): [True: 0, False: 0]
  |  Branch (1843:28): [True: 0, False: 0]
  ------------------
 1844|      0|	tags[i] = possible_tags[i];
 1845|      0|      *count = i;
 1846|      0|      return true;
 1847|      0|    }
 1848|  49.3k|    if (lang_matches (&lang_str[1], limit, "zh-hant-hk", 10))
  ------------------
  |  Branch (1848:9): [True: 0, False: 49.3k]
  ------------------
 1849|      0|    {
 1850|       |      /* Huizhou Chinese; Han (Traditional variant); Hong Kong */
 1851|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1852|      0|      *count = 1;
 1853|      0|      return true;
 1854|      0|    }
 1855|  49.3k|    if (lang_matches (&lang_str[1], limit, "zh-hant-mo", 10))
  ------------------
  |  Branch (1855:9): [True: 0, False: 49.3k]
  ------------------
 1856|      0|    {
 1857|       |      /* Huizhou Chinese; Han (Traditional variant); Macao */
 1858|      0|      unsigned int i;
 1859|      0|      hb_tag_t possible_tags[] = {
 1860|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1861|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1862|      0|      };
 1863|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1863:19): [True: 0, False: 0]
  |  Branch (1863:28): [True: 0, False: 0]
  ------------------
 1864|      0|	tags[i] = possible_tags[i];
 1865|      0|      *count = i;
 1866|      0|      return true;
 1867|      0|    }
 1868|  49.3k|    if (lang_matches (&lang_str[1], limit, "zo-hant-hk", 10))
  ------------------
  |  Branch (1868:9): [True: 0, False: 49.3k]
  ------------------
 1869|      0|    {
 1870|       |      /* Min Zhong Chinese; Han (Traditional variant); Hong Kong */
 1871|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1872|      0|      *count = 1;
 1873|      0|      return true;
 1874|      0|    }
 1875|  49.3k|    if (lang_matches (&lang_str[1], limit, "zo-hant-mo", 10))
  ------------------
  |  Branch (1875:9): [True: 0, False: 49.3k]
  ------------------
 1876|      0|    {
 1877|       |      /* Min Zhong Chinese; Han (Traditional variant); Macao */
 1878|      0|      unsigned int i;
 1879|      0|      hb_tag_t possible_tags[] = {
 1880|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1881|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1882|      0|      };
 1883|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (1883:19): [True: 0, False: 0]
  |  Branch (1883:28): [True: 0, False: 0]
  ------------------
 1884|      0|	tags[i] = possible_tags[i];
 1885|      0|      *count = i;
 1886|      0|      return true;
 1887|      0|    }
 1888|  49.3k|    if (lang_matches (&lang_str[1], limit, "do-hans", 7))
  ------------------
  |  Branch (1888:9): [True: 0, False: 49.3k]
  ------------------
 1889|      0|    {
 1890|       |      /* Min Dong Chinese; Han (Simplified variant) */
 1891|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1892|      0|      *count = 1;
 1893|      0|      return true;
 1894|      0|    }
 1895|  49.3k|    if (lang_matches (&lang_str[1], limit, "do-hant", 7))
  ------------------
  |  Branch (1895:9): [True: 0, False: 49.3k]
  ------------------
 1896|      0|    {
 1897|       |      /* Min Dong Chinese; Han (Traditional variant) */
 1898|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1899|      0|      *count = 1;
 1900|      0|      return true;
 1901|      0|    }
 1902|  49.3k|    if (lang_matches (&lang_str[1], limit, "jy-hans", 7))
  ------------------
  |  Branch (1902:9): [True: 0, False: 49.3k]
  ------------------
 1903|      0|    {
 1904|       |      /* Jinyu Chinese; Han (Simplified variant) */
 1905|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1906|      0|      *count = 1;
 1907|      0|      return true;
 1908|      0|    }
 1909|  49.3k|    if (lang_matches (&lang_str[1], limit, "jy-hant", 7))
  ------------------
  |  Branch (1909:9): [True: 0, False: 49.3k]
  ------------------
 1910|      0|    {
 1911|       |      /* Jinyu Chinese; Han (Traditional variant) */
 1912|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1913|      0|      *count = 1;
 1914|      0|      return true;
 1915|      0|    }
 1916|  49.3k|    if (lang_matches (&lang_str[1], limit, "mn-hans", 7))
  ------------------
  |  Branch (1916:9): [True: 0, False: 49.3k]
  ------------------
 1917|      0|    {
 1918|       |      /* Mandarin Chinese; Han (Simplified variant) */
 1919|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1920|      0|      *count = 1;
 1921|      0|      return true;
 1922|      0|    }
 1923|  49.3k|    if (lang_matches (&lang_str[1], limit, "mn-hant", 7))
  ------------------
  |  Branch (1923:9): [True: 0, False: 49.3k]
  ------------------
 1924|      0|    {
 1925|       |      /* Mandarin Chinese; Han (Traditional variant) */
 1926|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1927|      0|      *count = 1;
 1928|      0|      return true;
 1929|      0|    }
 1930|  49.3k|    if (lang_matches (&lang_str[1], limit, "np-hans", 7))
  ------------------
  |  Branch (1930:9): [True: 0, False: 49.3k]
  ------------------
 1931|      0|    {
 1932|       |      /* Northern Ping Chinese; Han (Simplified variant) */
 1933|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1934|      0|      *count = 1;
 1935|      0|      return true;
 1936|      0|    }
 1937|  49.3k|    if (lang_matches (&lang_str[1], limit, "np-hant", 7))
  ------------------
  |  Branch (1937:9): [True: 0, False: 49.3k]
  ------------------
 1938|      0|    {
 1939|       |      /* Northern Ping Chinese; Han (Traditional variant) */
 1940|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1941|      0|      *count = 1;
 1942|      0|      return true;
 1943|      0|    }
 1944|  49.3k|    if (lang_matches (&lang_str[1], limit, "px-hans", 7))
  ------------------
  |  Branch (1944:9): [True: 0, False: 49.3k]
  ------------------
 1945|      0|    {
 1946|       |      /* Pu-Xian Chinese; Han (Simplified variant) */
 1947|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1948|      0|      *count = 1;
 1949|      0|      return true;
 1950|      0|    }
 1951|  49.3k|    if (lang_matches (&lang_str[1], limit, "px-hant", 7))
  ------------------
  |  Branch (1951:9): [True: 0, False: 49.3k]
  ------------------
 1952|      0|    {
 1953|       |      /* Pu-Xian Chinese; Han (Traditional variant) */
 1954|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1955|      0|      *count = 1;
 1956|      0|      return true;
 1957|      0|    }
 1958|  49.3k|    if (lang_matches (&lang_str[1], limit, "sp-hans", 7))
  ------------------
  |  Branch (1958:9): [True: 0, False: 49.3k]
  ------------------
 1959|      0|    {
 1960|       |      /* Southern Ping Chinese; Han (Simplified variant) */
 1961|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1962|      0|      *count = 1;
 1963|      0|      return true;
 1964|      0|    }
 1965|  49.3k|    if (lang_matches (&lang_str[1], limit, "sp-hant", 7))
  ------------------
  |  Branch (1965:9): [True: 0, False: 49.3k]
  ------------------
 1966|      0|    {
 1967|       |      /* Southern Ping Chinese; Han (Traditional variant) */
 1968|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1969|      0|      *count = 1;
 1970|      0|      return true;
 1971|      0|    }
 1972|  49.3k|    if (lang_matches (&lang_str[1], limit, "zh-hans", 7))
  ------------------
  |  Branch (1972:9): [True: 0, False: 49.3k]
  ------------------
 1973|      0|    {
 1974|       |      /* Huizhou Chinese; Han (Simplified variant) */
 1975|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1976|      0|      *count = 1;
 1977|      0|      return true;
 1978|      0|    }
 1979|  49.3k|    if (lang_matches (&lang_str[1], limit, "zh-hant", 7))
  ------------------
  |  Branch (1979:9): [True: 0, False: 49.3k]
  ------------------
 1980|      0|    {
 1981|       |      /* Huizhou Chinese; Han (Traditional variant) */
 1982|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1983|      0|      *count = 1;
 1984|      0|      return true;
 1985|      0|    }
 1986|  49.3k|    if (lang_matches (&lang_str[1], limit, "zo-hans", 7))
  ------------------
  |  Branch (1986:9): [True: 0, False: 49.3k]
  ------------------
 1987|      0|    {
 1988|       |      /* Min Zhong Chinese; Han (Simplified variant) */
 1989|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1990|      0|      *count = 1;
 1991|      0|      return true;
 1992|      0|    }
 1993|  49.3k|    if (lang_matches (&lang_str[1], limit, "zo-hant", 7))
  ------------------
  |  Branch (1993:9): [True: 0, False: 49.3k]
  ------------------
 1994|      0|    {
 1995|       |      /* Min Zhong Chinese; Han (Traditional variant) */
 1996|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 1997|      0|      *count = 1;
 1998|      0|      return true;
 1999|      0|    }
 2000|  49.3k|    if (0 == strncmp (&lang_str[1], "do-", 3)
  ------------------
  |  Branch (2000:9): [True: 0, False: 49.3k]
  ------------------
 2001|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2001:5): [True: 0, False: 0]
  ------------------
 2002|      0|    {
 2003|       |      /* Min Dong Chinese; Hong Kong */
 2004|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2005|      0|      *count = 1;
 2006|      0|      return true;
 2007|      0|    }
 2008|  49.3k|    if (0 == strncmp (&lang_str[1], "do-", 3)
  ------------------
  |  Branch (2008:9): [True: 0, False: 49.3k]
  ------------------
 2009|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2009:5): [True: 0, False: 0]
  ------------------
 2010|      0|    {
 2011|       |      /* Min Dong Chinese; Macao */
 2012|      0|      unsigned int i;
 2013|      0|      hb_tag_t possible_tags[] = {
 2014|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2015|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2016|      0|      };
 2017|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2017:19): [True: 0, False: 0]
  |  Branch (2017:28): [True: 0, False: 0]
  ------------------
 2018|      0|	tags[i] = possible_tags[i];
 2019|      0|      *count = i;
 2020|      0|      return true;
 2021|      0|    }
 2022|  49.3k|    if (0 == strncmp (&lang_str[1], "do-", 3)
  ------------------
  |  Branch (2022:9): [True: 0, False: 49.3k]
  ------------------
 2023|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2023:5): [True: 0, False: 0]
  ------------------
 2024|      0|    {
 2025|       |      /* Min Dong Chinese; Taiwan, Province of China */
 2026|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2027|      0|      *count = 1;
 2028|      0|      return true;
 2029|      0|    }
 2030|  49.3k|    if (0 == strncmp (&lang_str[1], "jy-", 3)
  ------------------
  |  Branch (2030:9): [True: 0, False: 49.3k]
  ------------------
 2031|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2031:5): [True: 0, False: 0]
  ------------------
 2032|      0|    {
 2033|       |      /* Jinyu Chinese; Hong Kong */
 2034|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2035|      0|      *count = 1;
 2036|      0|      return true;
 2037|      0|    }
 2038|  49.3k|    if (0 == strncmp (&lang_str[1], "jy-", 3)
  ------------------
  |  Branch (2038:9): [True: 0, False: 49.3k]
  ------------------
 2039|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2039:5): [True: 0, False: 0]
  ------------------
 2040|      0|    {
 2041|       |      /* Jinyu Chinese; Macao */
 2042|      0|      unsigned int i;
 2043|      0|      hb_tag_t possible_tags[] = {
 2044|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2045|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2046|      0|      };
 2047|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2047:19): [True: 0, False: 0]
  |  Branch (2047:28): [True: 0, False: 0]
  ------------------
 2048|      0|	tags[i] = possible_tags[i];
 2049|      0|      *count = i;
 2050|      0|      return true;
 2051|      0|    }
 2052|  49.3k|    if (0 == strncmp (&lang_str[1], "jy-", 3)
  ------------------
  |  Branch (2052:9): [True: 0, False: 49.3k]
  ------------------
 2053|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2053:5): [True: 0, False: 0]
  ------------------
 2054|      0|    {
 2055|       |      /* Jinyu Chinese; Taiwan, Province of China */
 2056|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2057|      0|      *count = 1;
 2058|      0|      return true;
 2059|      0|    }
 2060|  49.3k|    if (0 == strncmp (&lang_str[1], "mn-", 3)
  ------------------
  |  Branch (2060:9): [True: 0, False: 49.3k]
  ------------------
 2061|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2061:5): [True: 0, False: 0]
  ------------------
 2062|      0|    {
 2063|       |      /* Mandarin Chinese; Hong Kong */
 2064|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2065|      0|      *count = 1;
 2066|      0|      return true;
 2067|      0|    }
 2068|  49.3k|    if (0 == strncmp (&lang_str[1], "mn-", 3)
  ------------------
  |  Branch (2068:9): [True: 0, False: 49.3k]
  ------------------
 2069|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2069:5): [True: 0, False: 0]
  ------------------
 2070|      0|    {
 2071|       |      /* Mandarin Chinese; Macao */
 2072|      0|      unsigned int i;
 2073|      0|      hb_tag_t possible_tags[] = {
 2074|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2075|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2076|      0|      };
 2077|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2077:19): [True: 0, False: 0]
  |  Branch (2077:28): [True: 0, False: 0]
  ------------------
 2078|      0|	tags[i] = possible_tags[i];
 2079|      0|      *count = i;
 2080|      0|      return true;
 2081|      0|    }
 2082|  49.3k|    if (0 == strncmp (&lang_str[1], "mn-", 3)
  ------------------
  |  Branch (2082:9): [True: 0, False: 49.3k]
  ------------------
 2083|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2083:5): [True: 0, False: 0]
  ------------------
 2084|      0|    {
 2085|       |      /* Mandarin Chinese; Taiwan, Province of China */
 2086|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2087|      0|      *count = 1;
 2088|      0|      return true;
 2089|      0|    }
 2090|  49.3k|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2090:9): [True: 0, False: 49.3k]
  ------------------
 2091|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2091:5): [True: 0, False: 0]
  ------------------
 2092|      0|    {
 2093|       |      /* Northern Ping Chinese; Hong Kong */
 2094|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2095|      0|      *count = 1;
 2096|      0|      return true;
 2097|      0|    }
 2098|  49.3k|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2098:9): [True: 0, False: 49.3k]
  ------------------
 2099|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2099:5): [True: 0, False: 0]
  ------------------
 2100|      0|    {
 2101|       |      /* Northern Ping Chinese; Macao */
 2102|      0|      unsigned int i;
 2103|      0|      hb_tag_t possible_tags[] = {
 2104|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2105|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2106|      0|      };
 2107|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2107:19): [True: 0, False: 0]
  |  Branch (2107:28): [True: 0, False: 0]
  ------------------
 2108|      0|	tags[i] = possible_tags[i];
 2109|      0|      *count = i;
 2110|      0|      return true;
 2111|      0|    }
 2112|  49.3k|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2112:9): [True: 0, False: 49.3k]
  ------------------
 2113|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2113:5): [True: 0, False: 0]
  ------------------
 2114|      0|    {
 2115|       |      /* Northern Ping Chinese; Taiwan, Province of China */
 2116|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2117|      0|      *count = 1;
 2118|      0|      return true;
 2119|      0|    }
 2120|  49.3k|    if (0 == strncmp (&lang_str[1], "px-", 3)
  ------------------
  |  Branch (2120:9): [True: 0, False: 49.3k]
  ------------------
 2121|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2121:5): [True: 0, False: 0]
  ------------------
 2122|      0|    {
 2123|       |      /* Pu-Xian Chinese; Hong Kong */
 2124|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2125|      0|      *count = 1;
 2126|      0|      return true;
 2127|      0|    }
 2128|  49.3k|    if (0 == strncmp (&lang_str[1], "px-", 3)
  ------------------
  |  Branch (2128:9): [True: 0, False: 49.3k]
  ------------------
 2129|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2129:5): [True: 0, False: 0]
  ------------------
 2130|      0|    {
 2131|       |      /* Pu-Xian Chinese; Macao */
 2132|      0|      unsigned int i;
 2133|      0|      hb_tag_t possible_tags[] = {
 2134|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2135|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2136|      0|      };
 2137|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2137:19): [True: 0, False: 0]
  |  Branch (2137:28): [True: 0, False: 0]
  ------------------
 2138|      0|	tags[i] = possible_tags[i];
 2139|      0|      *count = i;
 2140|      0|      return true;
 2141|      0|    }
 2142|  49.3k|    if (0 == strncmp (&lang_str[1], "px-", 3)
  ------------------
  |  Branch (2142:9): [True: 0, False: 49.3k]
  ------------------
 2143|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2143:5): [True: 0, False: 0]
  ------------------
 2144|      0|    {
 2145|       |      /* Pu-Xian Chinese; Taiwan, Province of China */
 2146|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2147|      0|      *count = 1;
 2148|      0|      return true;
 2149|      0|    }
 2150|  49.3k|    if (0 == strncmp (&lang_str[1], "sp-", 3)
  ------------------
  |  Branch (2150:9): [True: 0, False: 49.3k]
  ------------------
 2151|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2151:5): [True: 0, False: 0]
  ------------------
 2152|      0|    {
 2153|       |      /* Southern Ping Chinese; Hong Kong */
 2154|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2155|      0|      *count = 1;
 2156|      0|      return true;
 2157|      0|    }
 2158|  49.3k|    if (0 == strncmp (&lang_str[1], "sp-", 3)
  ------------------
  |  Branch (2158:9): [True: 0, False: 49.3k]
  ------------------
 2159|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2159:5): [True: 0, False: 0]
  ------------------
 2160|      0|    {
 2161|       |      /* Southern Ping Chinese; Macao */
 2162|      0|      unsigned int i;
 2163|      0|      hb_tag_t possible_tags[] = {
 2164|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2165|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2166|      0|      };
 2167|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2167:19): [True: 0, False: 0]
  |  Branch (2167:28): [True: 0, False: 0]
  ------------------
 2168|      0|	tags[i] = possible_tags[i];
 2169|      0|      *count = i;
 2170|      0|      return true;
 2171|      0|    }
 2172|  49.3k|    if (0 == strncmp (&lang_str[1], "sp-", 3)
  ------------------
  |  Branch (2172:9): [True: 0, False: 49.3k]
  ------------------
 2173|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2173:5): [True: 0, False: 0]
  ------------------
 2174|      0|    {
 2175|       |      /* Southern Ping Chinese; Taiwan, Province of China */
 2176|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2177|      0|      *count = 1;
 2178|      0|      return true;
 2179|      0|    }
 2180|  49.3k|    if (0 == strncmp (&lang_str[1], "zh-", 3)
  ------------------
  |  Branch (2180:9): [True: 0, False: 49.3k]
  ------------------
 2181|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2181:5): [True: 0, False: 0]
  ------------------
 2182|      0|    {
 2183|       |      /* Huizhou Chinese; Hong Kong */
 2184|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2185|      0|      *count = 1;
 2186|      0|      return true;
 2187|      0|    }
 2188|  49.3k|    if (0 == strncmp (&lang_str[1], "zh-", 3)
  ------------------
  |  Branch (2188:9): [True: 0, False: 49.3k]
  ------------------
 2189|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2189:5): [True: 0, False: 0]
  ------------------
 2190|      0|    {
 2191|       |      /* Huizhou Chinese; Macao */
 2192|      0|      unsigned int i;
 2193|      0|      hb_tag_t possible_tags[] = {
 2194|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2195|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2196|      0|      };
 2197|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2197:19): [True: 0, False: 0]
  |  Branch (2197:28): [True: 0, False: 0]
  ------------------
 2198|      0|	tags[i] = possible_tags[i];
 2199|      0|      *count = i;
 2200|      0|      return true;
 2201|      0|    }
 2202|  49.3k|    if (0 == strncmp (&lang_str[1], "zh-", 3)
  ------------------
  |  Branch (2202:9): [True: 0, False: 49.3k]
  ------------------
 2203|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2203:5): [True: 0, False: 0]
  ------------------
 2204|      0|    {
 2205|       |      /* Huizhou Chinese; Taiwan, Province of China */
 2206|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2207|      0|      *count = 1;
 2208|      0|      return true;
 2209|      0|    }
 2210|  49.3k|    if (0 == strncmp (&lang_str[1], "zo-", 3)
  ------------------
  |  Branch (2210:9): [True: 0, False: 49.3k]
  ------------------
 2211|  49.3k|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2211:5): [True: 0, False: 0]
  ------------------
 2212|      0|    {
 2213|       |      /* Min Zhong Chinese; Hong Kong */
 2214|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2215|      0|      *count = 1;
 2216|      0|      return true;
 2217|      0|    }
 2218|  49.3k|    if (0 == strncmp (&lang_str[1], "zo-", 3)
  ------------------
  |  Branch (2218:9): [True: 0, False: 49.3k]
  ------------------
 2219|  49.3k|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2219:5): [True: 0, False: 0]
  ------------------
 2220|      0|    {
 2221|       |      /* Min Zhong Chinese; Macao */
 2222|      0|      unsigned int i;
 2223|      0|      hb_tag_t possible_tags[] = {
 2224|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2225|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2226|      0|      };
 2227|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2227:19): [True: 0, False: 0]
  |  Branch (2227:28): [True: 0, False: 0]
  ------------------
 2228|      0|	tags[i] = possible_tags[i];
 2229|      0|      *count = i;
 2230|      0|      return true;
 2231|      0|    }
 2232|  49.3k|    if (0 == strncmp (&lang_str[1], "zo-", 3)
  ------------------
  |  Branch (2232:9): [True: 0, False: 49.3k]
  ------------------
 2233|  49.3k|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2233:5): [True: 0, False: 0]
  ------------------
 2234|      0|    {
 2235|       |      /* Min Zhong Chinese; Taiwan, Province of China */
 2236|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2237|      0|      *count = 1;
 2238|      0|      return true;
 2239|      0|    }
 2240|  49.3k|    break;
 2241|  49.3k|  case 'g':
  ------------------
  |  Branch (2241:3): [True: 0, False: 49.3k]
  ------------------
 2242|      0|    if (lang_matches (&lang_str[1], limit, "an-hant-hk", 10))
  ------------------
  |  Branch (2242:9): [True: 0, False: 0]
  ------------------
 2243|      0|    {
 2244|       |      /* Gan Chinese; Han (Traditional variant); Hong Kong */
 2245|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2246|      0|      *count = 1;
 2247|      0|      return true;
 2248|      0|    }
 2249|      0|    if (lang_matches (&lang_str[1], limit, "an-hant-mo", 10))
  ------------------
  |  Branch (2249:9): [True: 0, False: 0]
  ------------------
 2250|      0|    {
 2251|       |      /* Gan Chinese; Han (Traditional variant); Macao */
 2252|      0|      unsigned int i;
 2253|      0|      hb_tag_t possible_tags[] = {
 2254|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2255|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2256|      0|      };
 2257|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2257:19): [True: 0, False: 0]
  |  Branch (2257:28): [True: 0, False: 0]
  ------------------
 2258|      0|	tags[i] = possible_tags[i];
 2259|      0|      *count = i;
 2260|      0|      return true;
 2261|      0|    }
 2262|      0|    if (lang_matches (&lang_str[1], limit, "an-hans", 7))
  ------------------
  |  Branch (2262:9): [True: 0, False: 0]
  ------------------
 2263|      0|    {
 2264|       |      /* Gan Chinese; Han (Simplified variant) */
 2265|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2266|      0|      *count = 1;
 2267|      0|      return true;
 2268|      0|    }
 2269|      0|    if (lang_matches (&lang_str[1], limit, "an-hant", 7))
  ------------------
  |  Branch (2269:9): [True: 0, False: 0]
  ------------------
 2270|      0|    {
 2271|       |      /* Gan Chinese; Han (Traditional variant) */
 2272|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2273|      0|      *count = 1;
 2274|      0|      return true;
 2275|      0|    }
 2276|      0|    if (lang_matches (&lang_str[1], limit, "a-latg", 6))
  ------------------
  |  Branch (2276:9): [True: 0, False: 0]
  ------------------
 2277|      0|    {
 2278|       |      /* Irish; Latin (Gaelic variant) */
 2279|      0|      tags[0] = HB_TAG('I','R','T',' ');  /* Irish Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2280|      0|      *count = 1;
 2281|      0|      return true;
 2282|      0|    }
 2283|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2283:9): [True: 0, False: 0]
  ------------------
 2284|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2284:5): [True: 0, False: 0]
  ------------------
 2285|      0|    {
 2286|       |      /* Gan Chinese; Hong Kong */
 2287|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2288|      0|      *count = 1;
 2289|      0|      return true;
 2290|      0|    }
 2291|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2291:9): [True: 0, False: 0]
  ------------------
 2292|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2292:5): [True: 0, False: 0]
  ------------------
 2293|      0|    {
 2294|       |      /* Gan Chinese; Macao */
 2295|      0|      unsigned int i;
 2296|      0|      hb_tag_t possible_tags[] = {
 2297|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2298|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2299|      0|      };
 2300|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2300:19): [True: 0, False: 0]
  |  Branch (2300:28): [True: 0, False: 0]
  ------------------
 2301|      0|	tags[i] = possible_tags[i];
 2302|      0|      *count = i;
 2303|      0|      return true;
 2304|      0|    }
 2305|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2305:9): [True: 0, False: 0]
  ------------------
 2306|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2306:5): [True: 0, False: 0]
  ------------------
 2307|      0|    {
 2308|       |      /* Gan Chinese; Taiwan, Province of China */
 2309|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2310|      0|      *count = 1;
 2311|      0|      return true;
 2312|      0|    }
 2313|      0|    break;
 2314|      0|  case 'h':
  ------------------
  |  Branch (2314:3): [True: 0, False: 49.3k]
  ------------------
 2315|      0|    if (lang_matches (&lang_str[1], limit, "ak-hant-hk", 10))
  ------------------
  |  Branch (2315:9): [True: 0, False: 0]
  ------------------
 2316|      0|    {
 2317|       |      /* Hakka Chinese; Han (Traditional variant); Hong Kong */
 2318|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2319|      0|      *count = 1;
 2320|      0|      return true;
 2321|      0|    }
 2322|      0|    if (lang_matches (&lang_str[1], limit, "ak-hant-mo", 10))
  ------------------
  |  Branch (2322:9): [True: 0, False: 0]
  ------------------
 2323|      0|    {
 2324|       |      /* Hakka Chinese; Han (Traditional variant); Macao */
 2325|      0|      unsigned int i;
 2326|      0|      hb_tag_t possible_tags[] = {
 2327|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2328|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2329|      0|      };
 2330|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2330:19): [True: 0, False: 0]
  |  Branch (2330:28): [True: 0, False: 0]
  ------------------
 2331|      0|	tags[i] = possible_tags[i];
 2332|      0|      *count = i;
 2333|      0|      return true;
 2334|      0|    }
 2335|      0|    if (lang_matches (&lang_str[1], limit, "sn-hant-hk", 10))
  ------------------
  |  Branch (2335:9): [True: 0, False: 0]
  ------------------
 2336|      0|    {
 2337|       |      /* Xiang Chinese; Han (Traditional variant); Hong Kong */
 2338|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2339|      0|      *count = 1;
 2340|      0|      return true;
 2341|      0|    }
 2342|      0|    if (lang_matches (&lang_str[1], limit, "sn-hant-mo", 10))
  ------------------
  |  Branch (2342:9): [True: 0, False: 0]
  ------------------
 2343|      0|    {
 2344|       |      /* Xiang Chinese; Han (Traditional variant); Macao */
 2345|      0|      unsigned int i;
 2346|      0|      hb_tag_t possible_tags[] = {
 2347|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2348|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2349|      0|      };
 2350|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2350:19): [True: 0, False: 0]
  |  Branch (2350:28): [True: 0, False: 0]
  ------------------
 2351|      0|	tags[i] = possible_tags[i];
 2352|      0|      *count = i;
 2353|      0|      return true;
 2354|      0|    }
 2355|      0|    if (lang_matches (&lang_str[1], limit, "ak-hans", 7))
  ------------------
  |  Branch (2355:9): [True: 0, False: 0]
  ------------------
 2356|      0|    {
 2357|       |      /* Hakka Chinese; Han (Simplified variant) */
 2358|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2359|      0|      *count = 1;
 2360|      0|      return true;
 2361|      0|    }
 2362|      0|    if (lang_matches (&lang_str[1], limit, "ak-hant", 7))
  ------------------
  |  Branch (2362:9): [True: 0, False: 0]
  ------------------
 2363|      0|    {
 2364|       |      /* Hakka Chinese; Han (Traditional variant) */
 2365|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2366|      0|      *count = 1;
 2367|      0|      return true;
 2368|      0|    }
 2369|      0|    if (lang_matches (&lang_str[1], limit, "sn-hans", 7))
  ------------------
  |  Branch (2369:9): [True: 0, False: 0]
  ------------------
 2370|      0|    {
 2371|       |      /* Xiang Chinese; Han (Simplified variant) */
 2372|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2373|      0|      *count = 1;
 2374|      0|      return true;
 2375|      0|    }
 2376|      0|    if (lang_matches (&lang_str[1], limit, "sn-hant", 7))
  ------------------
  |  Branch (2376:9): [True: 0, False: 0]
  ------------------
 2377|      0|    {
 2378|       |      /* Xiang Chinese; Han (Traditional variant) */
 2379|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2380|      0|      *count = 1;
 2381|      0|      return true;
 2382|      0|    }
 2383|      0|    if (0 == strncmp (&lang_str[1], "ak-", 3)
  ------------------
  |  Branch (2383:9): [True: 0, False: 0]
  ------------------
 2384|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2384:5): [True: 0, False: 0]
  ------------------
 2385|      0|    {
 2386|       |      /* Hakka Chinese; Hong Kong */
 2387|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2388|      0|      *count = 1;
 2389|      0|      return true;
 2390|      0|    }
 2391|      0|    if (0 == strncmp (&lang_str[1], "ak-", 3)
  ------------------
  |  Branch (2391:9): [True: 0, False: 0]
  ------------------
 2392|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2392:5): [True: 0, False: 0]
  ------------------
 2393|      0|    {
 2394|       |      /* Hakka Chinese; Macao */
 2395|      0|      unsigned int i;
 2396|      0|      hb_tag_t possible_tags[] = {
 2397|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2398|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2399|      0|      };
 2400|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2400:19): [True: 0, False: 0]
  |  Branch (2400:28): [True: 0, False: 0]
  ------------------
 2401|      0|	tags[i] = possible_tags[i];
 2402|      0|      *count = i;
 2403|      0|      return true;
 2404|      0|    }
 2405|      0|    if (0 == strncmp (&lang_str[1], "ak-", 3)
  ------------------
  |  Branch (2405:9): [True: 0, False: 0]
  ------------------
 2406|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2406:5): [True: 0, False: 0]
  ------------------
 2407|      0|    {
 2408|       |      /* Hakka Chinese; Taiwan, Province of China */
 2409|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2410|      0|      *count = 1;
 2411|      0|      return true;
 2412|      0|    }
 2413|      0|    if (0 == strncmp (&lang_str[1], "sn-", 3)
  ------------------
  |  Branch (2413:9): [True: 0, False: 0]
  ------------------
 2414|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2414:5): [True: 0, False: 0]
  ------------------
 2415|      0|    {
 2416|       |      /* Xiang Chinese; Hong Kong */
 2417|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2418|      0|      *count = 1;
 2419|      0|      return true;
 2420|      0|    }
 2421|      0|    if (0 == strncmp (&lang_str[1], "sn-", 3)
  ------------------
  |  Branch (2421:9): [True: 0, False: 0]
  ------------------
 2422|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2422:5): [True: 0, False: 0]
  ------------------
 2423|      0|    {
 2424|       |      /* Xiang Chinese; Macao */
 2425|      0|      unsigned int i;
 2426|      0|      hb_tag_t possible_tags[] = {
 2427|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2428|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2429|      0|      };
 2430|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2430:19): [True: 0, False: 0]
  |  Branch (2430:28): [True: 0, False: 0]
  ------------------
 2431|      0|	tags[i] = possible_tags[i];
 2432|      0|      *count = i;
 2433|      0|      return true;
 2434|      0|    }
 2435|      0|    if (0 == strncmp (&lang_str[1], "sn-", 3)
  ------------------
  |  Branch (2435:9): [True: 0, False: 0]
  ------------------
 2436|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2436:5): [True: 0, False: 0]
  ------------------
 2437|      0|    {
 2438|       |      /* Xiang Chinese; Taiwan, Province of China */
 2439|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2440|      0|      *count = 1;
 2441|      0|      return true;
 2442|      0|    }
 2443|      0|    break;
 2444|      0|  case 'i':
  ------------------
  |  Branch (2444:3): [True: 0, False: 49.3k]
  ------------------
 2445|      0|    if (0 == strcmp (&lang_str[1], "-navajo"))
  ------------------
  |  Branch (2445:9): [True: 0, False: 0]
  ------------------
 2446|      0|    {
 2447|       |      /* Navajo (retired code) */
 2448|      0|      unsigned int i;
 2449|      0|      hb_tag_t possible_tags[] = {
 2450|      0|	HB_TAG('N','A','V',' '),  /* Navajo */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2451|      0|	HB_TAG('A','T','H',' '),  /* Athapaskan */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2452|      0|      };
 2453|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2453:19): [True: 0, False: 0]
  |  Branch (2453:28): [True: 0, False: 0]
  ------------------
 2454|      0|	tags[i] = possible_tags[i];
 2455|      0|      *count = i;
 2456|      0|      return true;
 2457|      0|    }
 2458|      0|    if (0 == strcmp (&lang_str[1], "-hak"))
  ------------------
  |  Branch (2458:9): [True: 0, False: 0]
  ------------------
 2459|      0|    {
 2460|       |      /* Hakka (retired code) */
 2461|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2462|      0|      *count = 1;
 2463|      0|      return true;
 2464|      0|    }
 2465|      0|    if (0 == strcmp (&lang_str[1], "-lux"))
  ------------------
  |  Branch (2465:9): [True: 0, False: 0]
  ------------------
 2466|      0|    {
 2467|       |      /* Luxembourgish (retired code) */
 2468|      0|      tags[0] = HB_TAG('L','T','Z',' ');  /* Luxembourgish */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2469|      0|      *count = 1;
 2470|      0|      return true;
 2471|      0|    }
 2472|      0|    break;
 2473|      0|  case 'l':
  ------------------
  |  Branch (2473:3): [True: 0, False: 49.3k]
  ------------------
 2474|      0|    if (lang_matches (&lang_str[1], limit, "zh-hans", 7))
  ------------------
  |  Branch (2474:9): [True: 0, False: 0]
  ------------------
 2475|      0|    {
 2476|       |      /* Literary Chinese; Han (Simplified variant) */
 2477|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2478|      0|      *count = 1;
 2479|      0|      return true;
 2480|      0|    }
 2481|      0|    break;
 2482|      0|  case 'm':
  ------------------
  |  Branch (2482:3): [True: 0, False: 49.3k]
  ------------------
 2483|      0|    if (lang_matches (&lang_str[1], limit, "np-hant-hk", 10))
  ------------------
  |  Branch (2483:9): [True: 0, False: 0]
  ------------------
 2484|      0|    {
 2485|       |      /* Min Bei Chinese; Han (Traditional variant); Hong Kong */
 2486|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2487|      0|      *count = 1;
 2488|      0|      return true;
 2489|      0|    }
 2490|      0|    if (lang_matches (&lang_str[1], limit, "np-hant-mo", 10))
  ------------------
  |  Branch (2490:9): [True: 0, False: 0]
  ------------------
 2491|      0|    {
 2492|       |      /* Min Bei Chinese; Han (Traditional variant); Macao */
 2493|      0|      unsigned int i;
 2494|      0|      hb_tag_t possible_tags[] = {
 2495|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2496|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2497|      0|      };
 2498|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2498:19): [True: 0, False: 0]
  |  Branch (2498:28): [True: 0, False: 0]
  ------------------
 2499|      0|	tags[i] = possible_tags[i];
 2500|      0|      *count = i;
 2501|      0|      return true;
 2502|      0|    }
 2503|      0|    if (lang_matches (&lang_str[1], limit, "np-hans", 7))
  ------------------
  |  Branch (2503:9): [True: 0, False: 0]
  ------------------
 2504|      0|    {
 2505|       |      /* Min Bei Chinese; Han (Simplified variant) */
 2506|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2507|      0|      *count = 1;
 2508|      0|      return true;
 2509|      0|    }
 2510|      0|    if (lang_matches (&lang_str[1], limit, "np-hant", 7))
  ------------------
  |  Branch (2510:9): [True: 0, False: 0]
  ------------------
 2511|      0|    {
 2512|       |      /* Min Bei Chinese; Han (Traditional variant) */
 2513|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2514|      0|      *count = 1;
 2515|      0|      return true;
 2516|      0|    }
 2517|      0|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2517:9): [True: 0, False: 0]
  ------------------
 2518|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2518:5): [True: 0, False: 0]
  ------------------
 2519|      0|    {
 2520|       |      /* Min Bei Chinese; Hong Kong */
 2521|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2522|      0|      *count = 1;
 2523|      0|      return true;
 2524|      0|    }
 2525|      0|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2525:9): [True: 0, False: 0]
  ------------------
 2526|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2526:5): [True: 0, False: 0]
  ------------------
 2527|      0|    {
 2528|       |      /* Min Bei Chinese; Macao */
 2529|      0|      unsigned int i;
 2530|      0|      hb_tag_t possible_tags[] = {
 2531|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2532|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2533|      0|      };
 2534|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2534:19): [True: 0, False: 0]
  |  Branch (2534:28): [True: 0, False: 0]
  ------------------
 2535|      0|	tags[i] = possible_tags[i];
 2536|      0|      *count = i;
 2537|      0|      return true;
 2538|      0|    }
 2539|      0|    if (0 == strncmp (&lang_str[1], "np-", 3)
  ------------------
  |  Branch (2539:9): [True: 0, False: 0]
  ------------------
 2540|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2540:5): [True: 0, False: 0]
  ------------------
 2541|      0|    {
 2542|       |      /* Min Bei Chinese; Taiwan, Province of China */
 2543|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2544|      0|      *count = 1;
 2545|      0|      return true;
 2546|      0|    }
 2547|      0|    if (0 == strncmp (&lang_str[1], "nw-", 3)
  ------------------
  |  Branch (2547:9): [True: 0, False: 0]
  ------------------
 2548|      0|	&& subtag_matches (lang_str, limit, "-th", 3))
  ------------------
  |  Branch (2548:5): [True: 0, False: 0]
  ------------------
 2549|      0|    {
 2550|       |      /* Mon; Thailand */
 2551|      0|      tags[0] = HB_TAG('M','O','N','T');  /* Thailand Mon */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2552|      0|      *count = 1;
 2553|      0|      return true;
 2554|      0|    }
 2555|      0|    break;
 2556|      0|  case 'n':
  ------------------
  |  Branch (2556:3): [True: 0, False: 49.3k]
  ------------------
 2557|      0|    if (lang_matches (&lang_str[1], limit, "an-hant-hk", 10))
  ------------------
  |  Branch (2557:9): [True: 0, False: 0]
  ------------------
 2558|      0|    {
 2559|       |      /* Min Nan Chinese; Han (Traditional variant); Hong Kong */
 2560|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2561|      0|      *count = 1;
 2562|      0|      return true;
 2563|      0|    }
 2564|      0|    if (lang_matches (&lang_str[1], limit, "an-hant-mo", 10))
  ------------------
  |  Branch (2564:9): [True: 0, False: 0]
  ------------------
 2565|      0|    {
 2566|       |      /* Min Nan Chinese; Han (Traditional variant); Macao */
 2567|      0|      unsigned int i;
 2568|      0|      hb_tag_t possible_tags[] = {
 2569|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2570|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2571|      0|      };
 2572|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2572:19): [True: 0, False: 0]
  |  Branch (2572:28): [True: 0, False: 0]
  ------------------
 2573|      0|	tags[i] = possible_tags[i];
 2574|      0|      *count = i;
 2575|      0|      return true;
 2576|      0|    }
 2577|      0|    if (lang_matches (&lang_str[1], limit, "an-hans", 7))
  ------------------
  |  Branch (2577:9): [True: 0, False: 0]
  ------------------
 2578|      0|    {
 2579|       |      /* Min Nan Chinese; Han (Simplified variant) */
 2580|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2581|      0|      *count = 1;
 2582|      0|      return true;
 2583|      0|    }
 2584|      0|    if (lang_matches (&lang_str[1], limit, "an-hant", 7))
  ------------------
  |  Branch (2584:9): [True: 0, False: 0]
  ------------------
 2585|      0|    {
 2586|       |      /* Min Nan Chinese; Han (Traditional variant) */
 2587|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2588|      0|      *count = 1;
 2589|      0|      return true;
 2590|      0|    }
 2591|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2591:9): [True: 0, False: 0]
  ------------------
 2592|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2592:5): [True: 0, False: 0]
  ------------------
 2593|      0|    {
 2594|       |      /* Min Nan Chinese; Hong Kong */
 2595|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2596|      0|      *count = 1;
 2597|      0|      return true;
 2598|      0|    }
 2599|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2599:9): [True: 0, False: 0]
  ------------------
 2600|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2600:5): [True: 0, False: 0]
  ------------------
 2601|      0|    {
 2602|       |      /* Min Nan Chinese; Macao */
 2603|      0|      unsigned int i;
 2604|      0|      hb_tag_t possible_tags[] = {
 2605|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2606|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2607|      0|      };
 2608|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2608:19): [True: 0, False: 0]
  |  Branch (2608:28): [True: 0, False: 0]
  ------------------
 2609|      0|	tags[i] = possible_tags[i];
 2610|      0|      *count = i;
 2611|      0|      return true;
 2612|      0|    }
 2613|      0|    if (0 == strncmp (&lang_str[1], "an-", 3)
  ------------------
  |  Branch (2613:9): [True: 0, False: 0]
  ------------------
 2614|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2614:5): [True: 0, False: 0]
  ------------------
 2615|      0|    {
 2616|       |      /* Min Nan Chinese; Taiwan, Province of China */
 2617|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2618|      0|      *count = 1;
 2619|      0|      return true;
 2620|      0|    }
 2621|      0|    if (0 == strcmp (&lang_str[1], "o-bok"))
  ------------------
  |  Branch (2621:9): [True: 0, False: 0]
  ------------------
 2622|      0|    {
 2623|       |      /* Norwegian Bokmal (retired code) */
 2624|      0|      tags[0] = HB_TAG('N','O','R',' ');  /* Norwegian */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2625|      0|      *count = 1;
 2626|      0|      return true;
 2627|      0|    }
 2628|      0|    if (0 == strcmp (&lang_str[1], "o-nyn"))
  ------------------
  |  Branch (2628:9): [True: 0, False: 0]
  ------------------
 2629|      0|    {
 2630|       |      /* Norwegian Nynorsk (retired code) */
 2631|      0|      tags[0] = HB_TAG('N','Y','N',' ');  /* Norwegian Nynorsk (Nynorsk, Norwegian) */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2632|      0|      *count = 1;
 2633|      0|      return true;
 2634|      0|    }
 2635|      0|    break;
 2636|      0|  case 'r':
  ------------------
  |  Branch (2636:3): [True: 0, False: 49.3k]
  ------------------
 2637|      0|    if (0 == strncmp (&lang_str[1], "o-", 2)
  ------------------
  |  Branch (2637:9): [True: 0, False: 0]
  ------------------
 2638|      0|	&& subtag_matches (lang_str, limit, "-md", 3))
  ------------------
  |  Branch (2638:5): [True: 0, False: 0]
  ------------------
 2639|      0|    {
 2640|       |      /* Romanian; Moldova */
 2641|      0|      unsigned int i;
 2642|      0|      hb_tag_t possible_tags[] = {
 2643|      0|	HB_TAG('M','O','L',' '),  /* Moldavian */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2644|      0|	HB_TAG('R','O','M',' '),  /* Romanian */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2645|      0|      };
 2646|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2646:19): [True: 0, False: 0]
  |  Branch (2646:28): [True: 0, False: 0]
  ------------------
 2647|      0|	tags[i] = possible_tags[i];
 2648|      0|      *count = i;
 2649|      0|      return true;
 2650|      0|    }
 2651|      0|    break;
 2652|      0|  case 'w':
  ------------------
  |  Branch (2652:3): [True: 0, False: 49.3k]
  ------------------
 2653|      0|    if (lang_matches (&lang_str[1], limit, "uu-hant-hk", 10))
  ------------------
  |  Branch (2653:9): [True: 0, False: 0]
  ------------------
 2654|      0|    {
 2655|       |      /* Wu Chinese; Han (Traditional variant); Hong Kong */
 2656|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2657|      0|      *count = 1;
 2658|      0|      return true;
 2659|      0|    }
 2660|      0|    if (lang_matches (&lang_str[1], limit, "uu-hant-mo", 10))
  ------------------
  |  Branch (2660:9): [True: 0, False: 0]
  ------------------
 2661|      0|    {
 2662|       |      /* Wu Chinese; Han (Traditional variant); Macao */
 2663|      0|      unsigned int i;
 2664|      0|      hb_tag_t possible_tags[] = {
 2665|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2666|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2667|      0|      };
 2668|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2668:19): [True: 0, False: 0]
  |  Branch (2668:28): [True: 0, False: 0]
  ------------------
 2669|      0|	tags[i] = possible_tags[i];
 2670|      0|      *count = i;
 2671|      0|      return true;
 2672|      0|    }
 2673|      0|    if (lang_matches (&lang_str[1], limit, "uu-hans", 7))
  ------------------
  |  Branch (2673:9): [True: 0, False: 0]
  ------------------
 2674|      0|    {
 2675|       |      /* Wu Chinese; Han (Simplified variant) */
 2676|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2677|      0|      *count = 1;
 2678|      0|      return true;
 2679|      0|    }
 2680|      0|    if (lang_matches (&lang_str[1], limit, "uu-hant", 7))
  ------------------
  |  Branch (2680:9): [True: 0, False: 0]
  ------------------
 2681|      0|    {
 2682|       |      /* Wu Chinese; Han (Traditional variant) */
 2683|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2684|      0|      *count = 1;
 2685|      0|      return true;
 2686|      0|    }
 2687|      0|    if (0 == strncmp (&lang_str[1], "uu-", 3)
  ------------------
  |  Branch (2687:9): [True: 0, False: 0]
  ------------------
 2688|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2688:5): [True: 0, False: 0]
  ------------------
 2689|      0|    {
 2690|       |      /* Wu Chinese; Hong Kong */
 2691|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2692|      0|      *count = 1;
 2693|      0|      return true;
 2694|      0|    }
 2695|      0|    if (0 == strncmp (&lang_str[1], "uu-", 3)
  ------------------
  |  Branch (2695:9): [True: 0, False: 0]
  ------------------
 2696|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2696:5): [True: 0, False: 0]
  ------------------
 2697|      0|    {
 2698|       |      /* Wu Chinese; Macao */
 2699|      0|      unsigned int i;
 2700|      0|      hb_tag_t possible_tags[] = {
 2701|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2702|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2703|      0|      };
 2704|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2704:19): [True: 0, False: 0]
  |  Branch (2704:28): [True: 0, False: 0]
  ------------------
 2705|      0|	tags[i] = possible_tags[i];
 2706|      0|      *count = i;
 2707|      0|      return true;
 2708|      0|    }
 2709|      0|    if (0 == strncmp (&lang_str[1], "uu-", 3)
  ------------------
  |  Branch (2709:9): [True: 0, False: 0]
  ------------------
 2710|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2710:5): [True: 0, False: 0]
  ------------------
 2711|      0|    {
 2712|       |      /* Wu Chinese; Taiwan, Province of China */
 2713|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2714|      0|      *count = 1;
 2715|      0|      return true;
 2716|      0|    }
 2717|      0|    break;
 2718|      0|  case 'y':
  ------------------
  |  Branch (2718:3): [True: 0, False: 49.3k]
  ------------------
 2719|      0|    if (lang_matches (&lang_str[1], limit, "ue-hans", 7))
  ------------------
  |  Branch (2719:9): [True: 0, False: 0]
  ------------------
 2720|      0|    {
 2721|       |      /* Yue Chinese; Han (Simplified variant) */
 2722|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2723|      0|      *count = 1;
 2724|      0|      return true;
 2725|      0|    }
 2726|      0|    break;
 2727|      0|  case 'z':
  ------------------
  |  Branch (2727:3): [True: 0, False: 49.3k]
  ------------------
 2728|      0|    if (lang_matches (&lang_str[1], limit, "h-hant-hk", 9))
  ------------------
  |  Branch (2728:9): [True: 0, False: 0]
  ------------------
 2729|      0|    {
 2730|       |      /* Chinese [macrolanguage]; Han (Traditional variant); Hong Kong */
 2731|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2732|      0|      *count = 1;
 2733|      0|      return true;
 2734|      0|    }
 2735|      0|    if (lang_matches (&lang_str[1], limit, "h-hant-mo", 9))
  ------------------
  |  Branch (2735:9): [True: 0, False: 0]
  ------------------
 2736|      0|    {
 2737|       |      /* Chinese [macrolanguage]; Han (Traditional variant); Macao */
 2738|      0|      unsigned int i;
 2739|      0|      hb_tag_t possible_tags[] = {
 2740|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2741|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2742|      0|      };
 2743|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2743:19): [True: 0, False: 0]
  |  Branch (2743:28): [True: 0, False: 0]
  ------------------
 2744|      0|	tags[i] = possible_tags[i];
 2745|      0|      *count = i;
 2746|      0|      return true;
 2747|      0|    }
 2748|      0|    if (0 == strcmp (&lang_str[1], "h-min-nan"))
  ------------------
  |  Branch (2748:9): [True: 0, False: 0]
  ------------------
 2749|      0|    {
 2750|       |      /* Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo (retired code) */
 2751|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2752|      0|      *count = 1;
 2753|      0|      return true;
 2754|      0|    }
 2755|      0|    if (lang_matches (&lang_str[1], limit, "h-hans", 6))
  ------------------
  |  Branch (2755:9): [True: 0, False: 0]
  ------------------
 2756|      0|    {
 2757|       |      /* Chinese [macrolanguage]; Han (Simplified variant) */
 2758|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2759|      0|      *count = 1;
 2760|      0|      return true;
 2761|      0|    }
 2762|      0|    if (lang_matches (&lang_str[1], limit, "h-hant", 6))
  ------------------
  |  Branch (2762:9): [True: 0, False: 0]
  ------------------
 2763|      0|    {
 2764|       |      /* Chinese [macrolanguage]; Han (Traditional variant) */
 2765|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2766|      0|      *count = 1;
 2767|      0|      return true;
 2768|      0|    }
 2769|      0|    if (0 == strcmp (&lang_str[1], "h-min"))
  ------------------
  |  Branch (2769:9): [True: 0, False: 0]
  ------------------
 2770|      0|    {
 2771|       |      /* Min, Fuzhou, Hokkien, Amoy, or Taiwanese (retired code) */
 2772|      0|      tags[0] = HB_TAG('Z','H','S',' ');  /* Chinese, Simplified */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2773|      0|      *count = 1;
 2774|      0|      return true;
 2775|      0|    }
 2776|      0|    if (0 == strncmp (&lang_str[1], "h-", 2)
  ------------------
  |  Branch (2776:9): [True: 0, False: 0]
  ------------------
 2777|      0|	&& subtag_matches (lang_str, limit, "-hk", 3))
  ------------------
  |  Branch (2777:5): [True: 0, False: 0]
  ------------------
 2778|      0|    {
 2779|       |      /* Chinese [macrolanguage]; Hong Kong */
 2780|      0|      tags[0] = HB_TAG('Z','H','H',' ');  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2781|      0|      *count = 1;
 2782|      0|      return true;
 2783|      0|    }
 2784|      0|    if (0 == strncmp (&lang_str[1], "h-", 2)
  ------------------
  |  Branch (2784:9): [True: 0, False: 0]
  ------------------
 2785|      0|	&& subtag_matches (lang_str, limit, "-mo", 3))
  ------------------
  |  Branch (2785:5): [True: 0, False: 0]
  ------------------
 2786|      0|    {
 2787|       |      /* Chinese [macrolanguage]; Macao */
 2788|      0|      unsigned int i;
 2789|      0|      hb_tag_t possible_tags[] = {
 2790|      0|	HB_TAG('Z','H','T','M'),  /* Chinese, Traditional, Macao SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2791|      0|	HB_TAG('Z','H','H',' '),  /* Chinese, Traditional, Hong Kong SAR */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2792|      0|      };
 2793|      0|      for (i = 0; i < 2 && i < *count; i++)
  ------------------
  |  Branch (2793:19): [True: 0, False: 0]
  |  Branch (2793:28): [True: 0, False: 0]
  ------------------
 2794|      0|	tags[i] = possible_tags[i];
 2795|      0|      *count = i;
 2796|      0|      return true;
 2797|      0|    }
 2798|      0|    if (0 == strncmp (&lang_str[1], "h-", 2)
  ------------------
  |  Branch (2798:9): [True: 0, False: 0]
  ------------------
 2799|      0|	&& subtag_matches (lang_str, limit, "-tw", 3))
  ------------------
  |  Branch (2799:5): [True: 0, False: 0]
  ------------------
 2800|      0|    {
 2801|       |      /* Chinese [macrolanguage]; Taiwan, Province of China */
 2802|      0|      tags[0] = HB_TAG('Z','H','T',' ');  /* Chinese, Traditional */
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
 2803|      0|      *count = 1;
 2804|      0|      return true;
 2805|      0|    }
 2806|      0|    break;
 2807|  49.3k|  }
 2808|  49.3k|  return false;
 2809|  49.3k|}

hb_ot_tags_from_script_and_language:
  436|  49.3k|{
  437|  49.3k|  bool needs_script = true;
  438|       |
  439|  49.3k|  if (language == HB_LANGUAGE_INVALID)
  ------------------
  |  |  334|  49.3k|#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
  ------------------
  |  Branch (439:7): [True: 0, False: 49.3k]
  ------------------
  440|      0|  {
  441|      0|    if (language_count && language_tags && *language_count)
  ------------------
  |  Branch (441:9): [True: 0, False: 0]
  |  Branch (441:27): [True: 0, False: 0]
  |  Branch (441:44): [True: 0, False: 0]
  ------------------
  442|      0|      *language_count = 0;
  443|      0|  }
  444|  49.3k|  else
  445|  49.3k|  {
  446|  49.3k|    const char *lang_str, *s, *limit, *private_use_subtag;
  447|  49.3k|    bool needs_language;
  448|       |
  449|  49.3k|    lang_str = hb_language_to_string (language);
  450|  49.3k|    limit = nullptr;
  451|  49.3k|    private_use_subtag = nullptr;
  452|  49.3k|    if (lang_str[0] == 'x' && lang_str[1] == '-')
  ------------------
  |  Branch (452:9): [True: 0, False: 49.3k]
  |  Branch (452:31): [True: 0, False: 0]
  ------------------
  453|      0|    {
  454|      0|      private_use_subtag = lang_str;
  455|  49.3k|    } else {
  456|  49.3k|      for (s = lang_str + 1; *s; s++)
  ------------------
  |  Branch (456:30): [True: 0, False: 49.3k]
  ------------------
  457|      0|      {
  458|      0|	if (s[-1] == '-' && s[1] == '-')
  ------------------
  |  Branch (458:6): [True: 0, False: 0]
  |  Branch (458:22): [True: 0, False: 0]
  ------------------
  459|      0|	{
  460|      0|	  if (s[0] == 'x')
  ------------------
  |  Branch (460:8): [True: 0, False: 0]
  ------------------
  461|      0|	  {
  462|      0|	    private_use_subtag = s;
  463|      0|	    if (!limit)
  ------------------
  |  Branch (463:10): [True: 0, False: 0]
  ------------------
  464|      0|	      limit = s - 1;
  465|      0|	    break;
  466|      0|	  } else if (!limit)
  ------------------
  |  Branch (466:15): [True: 0, False: 0]
  ------------------
  467|      0|	  {
  468|      0|	    limit = s - 1;
  469|      0|	  }
  470|      0|	}
  471|      0|      }
  472|  49.3k|      if (!limit)
  ------------------
  |  Branch (472:11): [True: 49.3k, False: 0]
  ------------------
  473|  49.3k|	limit = s;
  474|  49.3k|    }
  475|       |
  476|  49.3k|    needs_script = !parse_private_use_subtag (private_use_subtag, script_count, script_tags, "-hbsc", TOLOWER);
  477|  49.3k|    needs_language = !parse_private_use_subtag (private_use_subtag, language_count, language_tags, "-hbot", TOUPPER);
  478|       |
  479|  49.3k|    if (needs_language && language_count && language_tags && *language_count)
  ------------------
  |  Branch (479:9): [True: 49.3k, False: 0]
  |  Branch (479:27): [True: 49.3k, False: 0]
  |  Branch (479:45): [True: 49.3k, False: 0]
  |  Branch (479:62): [True: 49.3k, False: 0]
  ------------------
  480|  49.3k|      hb_ot_tags_from_language (lang_str, limit, language_count, language_tags);
  481|  49.3k|  }
  482|       |
  483|  49.3k|  if (needs_script && script_count && script_tags && *script_count)
  ------------------
  |  Branch (483:7): [True: 49.3k, False: 0]
  |  Branch (483:23): [True: 49.3k, False: 0]
  |  Branch (483:39): [True: 49.3k, False: 0]
  |  Branch (483:54): [True: 49.3k, False: 0]
  ------------------
  484|  49.3k|    hb_ot_all_tags_from_script (script, script_count, script_tags);
  485|  49.3k|}
hb-ot-tag.cc:_ZL24parse_private_use_subtagPKcPjS1_S0_PFhhE:
  372|  98.6k|{
  373|       |#ifdef HB_NO_LANGUAGE_PRIVATE_SUBTAG
  374|       |  return false;
  375|       |#endif
  376|       |
  377|  98.6k|  if (!(private_use_subtag && count && tags && *count)) return false;
  ------------------
  |  Branch (377:9): [True: 0, False: 98.6k]
  |  Branch (377:31): [True: 0, False: 0]
  |  Branch (377:40): [True: 0, False: 0]
  |  Branch (377:48): [True: 0, False: 0]
  ------------------
  378|       |
  379|      0|  const char *s = strstr (private_use_subtag, prefix);
  380|      0|  if (!s) return false;
  ------------------
  |  Branch (380:7): [True: 0, False: 0]
  ------------------
  381|       |
  382|      0|  char tag[4];
  383|      0|  int i;
  384|      0|  s += strlen (prefix);
  385|      0|  if (s[0] == '-') {
  ------------------
  |  Branch (385:7): [True: 0, False: 0]
  ------------------
  386|      0|    s += 1;
  387|      0|    char c;
  388|      0|    for (i = 0; i < 8 && ISHEX (s[i]); i++)
  ------------------
  |  Branch (388:17): [True: 0, False: 0]
  |  Branch (388:26): [True: 0, False: 0]
  ------------------
  389|      0|    {
  390|      0|      c = FROMHEX (s[i]);
  391|      0|      if (i % 2 == 0)
  ------------------
  |  Branch (391:11): [True: 0, False: 0]
  ------------------
  392|      0|	tag[i / 2] = c << 4;
  393|      0|      else
  394|      0|	tag[i / 2] += c;
  395|      0|    }
  396|      0|    if (i != 8) return false;
  ------------------
  |  Branch (396:9): [True: 0, False: 0]
  ------------------
  397|      0|  } else {
  398|      0|    for (i = 0; i < 4 && ISALNUM (s[i]); i++)
  ------------------
  |  Branch (398:17): [True: 0, False: 0]
  |  Branch (398:26): [True: 0, False: 0]
  ------------------
  399|      0|      tag[i] = normalize (s[i]);
  400|      0|    if (!i) return false;
  ------------------
  |  Branch (400:9): [True: 0, False: 0]
  ------------------
  401|       |
  402|      0|    for (; i < 4; i++)
  ------------------
  |  Branch (402:12): [True: 0, False: 0]
  ------------------
  403|      0|      tag[i] = ' ';
  404|      0|  }
  405|      0|  tags[0] = HB_TAG (tag[0], tag[1], tag[2], tag[3]);
  ------------------
  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  406|      0|  if ((tags[0] & 0xDFDFDFDF) == HB_OT_TAG_DEFAULT_SCRIPT)
  ------------------
  |  |   83|      0|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (406:7): [True: 0, False: 0]
  ------------------
  407|      0|    tags[0] ^= ~0xDFDFDFDF;
  408|      0|  *count = 1;
  409|      0|  return true;
  410|      0|}
hb-ot-tag.cc:_ZL24hb_ot_tags_from_languagePKcS0_PjS1_:
  287|  49.3k|{
  288|       |
  289|  49.3k|#ifndef HB_NO_LANGUAGE_LONG
  290|       |  /* Check for matches of multiple subtags. */
  291|  49.3k|  if (hb_ot_tags_from_complex_language (lang_str, limit, count, tags))
  ------------------
  |  Branch (291:7): [True: 0, False: 49.3k]
  ------------------
  292|      0|    return;
  293|  49.3k|#endif
  294|       |
  295|       |  /* Find a language matching in the first component. */
  296|  49.3k|#ifndef HB_NO_LANGUAGE_LONG
  297|  49.3k|  const char *s; s = strchr (lang_str, '-');
  298|  49.3k|#endif
  299|  49.3k|  {
  300|  49.3k|#ifndef HB_NO_LANGUAGE_LONG
  301|  49.3k|    if (s && limit - lang_str >= 6)
  ------------------
  |  Branch (301:9): [True: 0, False: 49.3k]
  |  Branch (301:14): [True: 0, False: 0]
  ------------------
  302|      0|    {
  303|      0|      const char *extlang_end = strchr (s + 1, '-');
  304|       |      /* If there is an extended language tag, use it. */
  305|      0|      if (3 == (extlang_end ? extlang_end - s - 1 : strlen (s + 1)) &&
  ------------------
  |  Branch (305:11): [True: 0, False: 0]
  |  Branch (305:17): [True: 0, False: 0]
  ------------------
  306|      0|	  ISALPHA (s[1]))
  ------------------
  |  Branch (306:4): [True: 0, False: 0]
  ------------------
  307|      0|	lang_str = s + 1;
  308|      0|    }
  309|  49.3k|#endif
  310|  49.3k|    const LangTag *ot_languages = nullptr;
  311|  49.3k|    unsigned ot_languages_len = 0;
  312|  49.3k|    const char *dash = strchr (lang_str, '-');
  313|  49.3k|    unsigned first_len = dash ? dash - lang_str : limit - lang_str;
  ------------------
  |  Branch (313:26): [True: 0, False: 49.3k]
  ------------------
  314|  49.3k|    if (first_len == 2)
  ------------------
  |  Branch (314:9): [True: 0, False: 49.3k]
  ------------------
  315|      0|    {
  316|      0|      ot_languages = ot_languages2;
  317|      0|      ot_languages_len = ARRAY_LENGTH (ot_languages2);
  318|      0|    }
  319|  49.3k|#ifndef HB_NO_LANGUAGE_LONG
  320|  49.3k|    else if (first_len == 3)
  ------------------
  |  Branch (320:14): [True: 0, False: 49.3k]
  ------------------
  321|      0|    {
  322|      0|      ot_languages = ot_languages3;
  323|      0|      ot_languages_len = ARRAY_LENGTH (ot_languages3);
  324|      0|    }
  325|  49.3k|#endif
  326|       |
  327|  49.3k|    hb_tag_t lang_tag = hb_tag_from_string (lang_str, first_len);
  328|       |
  329|  49.3k|    static hb_atomic_int_t last_tag_idx; /* Poor man's cache. */
  330|  49.3k|    unsigned tag_idx = last_tag_idx;
  331|       |
  332|  49.3k|    if (likely (tag_idx < ot_languages_len && ot_languages[tag_idx].language == lang_tag) ||
  ------------------
  |  |  258|  98.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 49.3k]
  |  |  |  Branch (258:45): [True: 0, False: 49.3k]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (332:9): [True: 0, False: 49.3k]
  ------------------
  333|  49.3k|	hb_sorted_array (ot_languages, ot_languages_len).bfind (lang_tag, &tag_idx))
  ------------------
  |  Branch (333:2): [True: 0, False: 49.3k]
  ------------------
  334|      0|    {
  335|      0|      last_tag_idx = tag_idx;
  336|      0|      unsigned int i;
  337|      0|      while (tag_idx != 0 &&
  ------------------
  |  Branch (337:14): [True: 0, False: 0]
  ------------------
  338|      0|	     ot_languages[tag_idx].language == ot_languages[tag_idx - 1].language)
  ------------------
  |  Branch (338:7): [True: 0, False: 0]
  ------------------
  339|      0|	tag_idx--;
  340|      0|      for (i = 0;
  341|      0|	   i < *count &&
  ------------------
  |  Branch (341:5): [True: 0, False: 0]
  ------------------
  342|      0|	   tag_idx + i < ot_languages_len &&
  ------------------
  |  Branch (342:5): [True: 0, False: 0]
  ------------------
  343|      0|	   ot_languages[tag_idx + i].tag != HB_TAG_NONE &&
  ------------------
  |  |  197|      0|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (343:5): [True: 0, False: 0]
  ------------------
  344|      0|	   ot_languages[tag_idx + i].language == ot_languages[tag_idx].language;
  ------------------
  |  Branch (344:5): [True: 0, False: 0]
  ------------------
  345|      0|	   i++)
  346|      0|	tags[i] = ot_languages[tag_idx + i].tag;
  347|      0|      *count = i;
  348|      0|      return;
  349|      0|    }
  350|  49.3k|  }
  351|       |
  352|  49.3k|#ifndef HB_NO_LANGUAGE_LONG
  353|  49.3k|  if (!s)
  ------------------
  |  Branch (353:7): [True: 49.3k, False: 0]
  ------------------
  354|  49.3k|    s = lang_str + strlen (lang_str);
  355|  49.3k|  if (s - lang_str == 3) {
  ------------------
  |  Branch (355:7): [True: 0, False: 49.3k]
  ------------------
  356|       |    /* Assume it's ISO-639-3 and upper-case and use it. */
  357|      0|    tags[0] = hb_tag_from_string (lang_str, s - lang_str) & ~0x20202000u;
  358|      0|    *count = 1;
  359|      0|    return;
  360|      0|  }
  361|  49.3k|#endif
  362|       |
  363|  49.3k|  *count = 0;
  364|  49.3k|}
hb-ot-tag.cc:_ZL12lang_matchesPKcS0_S0_j:
  227|  1.57M|{
  228|       |  /* Same as hb_language_matches(); duplicated. */
  229|       |
  230|  1.57M|  if (likely ((unsigned) (limit - lang_str) < spec_len))
  ------------------
  |  |  258|  1.57M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.57M, False: 0]
  |  |  ------------------
  ------------------
  231|  1.57M|    return false;
  232|       |
  233|      0|  return strncmp (lang_str, spec, spec_len) == 0 &&
  ------------------
  |  Branch (233:10): [True: 0, False: 0]
  ------------------
  234|      0|	 (lang_str[spec_len] == '\0' || lang_str[spec_len] == '-');
  ------------------
  |  Branch (234:4): [True: 0, False: 0]
  |  Branch (234:34): [True: 0, False: 0]
  ------------------
  235|  1.57M|}
hb-ot-tag.cc:_ZL26hb_ot_all_tags_from_script11hb_script_tPjS0_:
  158|  49.3k|{
  159|  49.3k|  unsigned int i = 0;
  160|       |
  161|  49.3k|  hb_tag_t new_tag = hb_ot_new_tag_from_script (script);
  162|  49.3k|  if (unlikely (new_tag != HB_OT_TAG_DEFAULT_SCRIPT))
  ------------------
  |  |  259|  49.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.32k, False: 45.9k]
  |  |  ------------------
  ------------------
  163|  3.32k|  {
  164|       |    /* HB_SCRIPT_MYANMAR maps to 'mym2', but there is no 'mym3'. */
  165|  3.32k|    if (new_tag != HB_TAG('m','y','m','2'))
  ------------------
  |  |  179|  3.32k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (165:9): [True: 2.83k, False: 497]
  ------------------
  166|  2.83k|      tags[i++] = new_tag | '3';
  167|  3.32k|    if (*count > i)
  ------------------
  |  Branch (167:9): [True: 3.32k, False: 0]
  ------------------
  168|  3.32k|      tags[i++] = new_tag;
  169|  3.32k|  }
  170|       |
  171|  49.3k|  if (*count > i)
  ------------------
  |  Branch (171:7): [True: 49.3k, False: 0]
  ------------------
  172|  49.3k|  {
  173|  49.3k|    hb_tag_t old_tag = hb_ot_old_tag_from_script (script);
  174|  49.3k|    if (old_tag != HB_OT_TAG_DEFAULT_SCRIPT)
  ------------------
  |  |   83|  49.3k|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|  49.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (174:9): [True: 49.0k, False: 254]
  ------------------
  175|  49.0k|      tags[i++] = old_tag;
  176|  49.3k|  }
  177|       |
  178|  49.3k|  *count = i;
  179|  49.3k|}
hb-ot-tag.cc:_ZL25hb_ot_new_tag_from_script11hb_script_t:
   85|  49.3k|{
   86|  49.3k|  switch ((hb_tag_t) script) {
  ------------------
  |  Branch (86:11): [True: 45.9k, False: 3.32k]
  ------------------
   87|    175|    case HB_SCRIPT_BENGALI:		return HB_TAG('b','n','g','2');
  ------------------
  |  |  179|    175|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (87:5): [True: 175, False: 49.1k]
  ------------------
   88|    476|    case HB_SCRIPT_DEVANAGARI:		return HB_TAG('d','e','v','2');
  ------------------
  |  |  179|    476|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (88:5): [True: 476, False: 48.8k]
  ------------------
   89|    152|    case HB_SCRIPT_GUJARATI:		return HB_TAG('g','j','r','2');
  ------------------
  |  |  179|    152|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (89:5): [True: 152, False: 49.1k]
  ------------------
   90|    183|    case HB_SCRIPT_GURMUKHI:		return HB_TAG('g','u','r','2');
  ------------------
  |  |  179|    183|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (90:5): [True: 183, False: 49.1k]
  ------------------
   91|    353|    case HB_SCRIPT_KANNADA:		return HB_TAG('k','n','d','2');
  ------------------
  |  |  179|    353|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (91:5): [True: 353, False: 48.9k]
  ------------------
   92|    595|    case HB_SCRIPT_MALAYALAM:		return HB_TAG('m','l','m','2');
  ------------------
  |  |  179|    595|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (92:5): [True: 595, False: 48.7k]
  ------------------
   93|    102|    case HB_SCRIPT_ORIYA:		return HB_TAG('o','r','y','2');
  ------------------
  |  |  179|    102|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (93:5): [True: 102, False: 49.2k]
  ------------------
   94|    104|    case HB_SCRIPT_TAMIL:		return HB_TAG('t','m','l','2');
  ------------------
  |  |  179|    104|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (94:5): [True: 104, False: 49.2k]
  ------------------
   95|    690|    case HB_SCRIPT_TELUGU:		return HB_TAG('t','e','l','2');
  ------------------
  |  |  179|    690|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (95:5): [True: 690, False: 48.6k]
  ------------------
   96|    497|    case HB_SCRIPT_MYANMAR:		return HB_TAG('m','y','m','2');
  ------------------
  |  |  179|    497|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (96:5): [True: 497, False: 48.8k]
  ------------------
   97|  49.3k|  }
   98|       |
   99|  45.9k|  return HB_OT_TAG_DEFAULT_SCRIPT;
  ------------------
  |  |   83|  45.9k|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|  45.9k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  100|  49.3k|}
hb-ot-tag.cc:_ZL25hb_ot_old_tag_from_script11hb_script_t:
   38|  49.3k|{
   39|       |  /* This seems to be accurate as of end of 2012. */
   40|       |
   41|  49.3k|  switch ((hb_tag_t) script)
  ------------------
  |  Branch (41:11): [True: 48.9k, False: 398]
  ------------------
   42|  49.3k|  {
   43|    254|    case HB_SCRIPT_INVALID:		return HB_OT_TAG_DEFAULT_SCRIPT;
  ------------------
  |  |   83|    254|#define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
  |  |  ------------------
  |  |  |  |  179|    254|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (43:5): [True: 254, False: 49.0k]
  ------------------
   44|      0|    case HB_SCRIPT_MATH:		return HB_OT_TAG_MATH_SCRIPT;
  ------------------
  |  |   64|      0|#define HB_OT_TAG_MATH_SCRIPT HB_TAG('m','a','t','h')
  |  |  ------------------
  |  |  |  |  179|      0|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  |  Branch (44:5): [True: 0, False: 49.3k]
  ------------------
   45|       |
   46|       |    /* KATAKANA and HIRAGANA both map to 'kana' */
   47|      7|    case HB_SCRIPT_HIRAGANA:		return HB_TAG('k','a','n','a');
  ------------------
  |  |  179|      7|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (47:5): [True: 7, False: 49.3k]
  ------------------
   48|       |
   49|       |    /* Spaces at the end are preserved, unlike ISO 15924 */
   50|     29|    case HB_SCRIPT_LAO:			return HB_TAG('l','a','o',' ');
  ------------------
  |  |  179|     29|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (50:5): [True: 29, False: 49.2k]
  ------------------
   51|     46|    case HB_SCRIPT_YI:			return HB_TAG('y','i',' ',' ');
  ------------------
  |  |  179|     46|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (51:5): [True: 46, False: 49.2k]
  ------------------
   52|       |    /* Unicode-5.0 additions */
   53|     54|    case HB_SCRIPT_NKO:			return HB_TAG('n','k','o',' ');
  ------------------
  |  |  179|     54|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (53:5): [True: 54, False: 49.2k]
  ------------------
   54|       |    /* Unicode-5.1 additions */
   55|      8|    case HB_SCRIPT_VAI:			return HB_TAG('v','a','i',' ');
  ------------------
  |  |  179|      8|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  |  Branch (55:5): [True: 8, False: 49.3k]
  ------------------
   56|  49.3k|  }
   57|       |
   58|       |  /* Else, just change first char to lowercase and return */
   59|  48.9k|  return ((hb_tag_t) script) | 0x20000000u;
   60|  49.3k|}

_ZNK2OT4avar12unmap_coordsEPij:
  217|  33.2k|  {
  218|  33.2k|    unsigned int count = hb_min (coords_length, axisCount);
  219|       |
  220|  33.2k|    const SegmentMaps *map = &firstAxisSegmentMaps;
  221|  34.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (221:30): [True: 1.35k, False: 33.2k]
  ------------------
  222|  1.35k|    {
  223|  1.35k|      coords[i] = map->unmap (coords[i]);
  224|  1.35k|      map = &StructAfter<SegmentMaps> (*map);
  225|  1.35k|    }
  226|  33.2k|  }
_ZNK2OT11SegmentMaps5unmapEi:
  123|  1.35k|  int unmap (int value) const { return map (value, 1, 0); }
_ZNK2OT11SegmentMaps3mapEijj:
   88|  1.35k|  {
   89|  1.35k|#define fromCoord coords[from_offset].to_int ()
   90|  1.35k|#define toCoord coords[to_offset].to_int ()
   91|       |    /* The following special-cases are not part of OpenType, which requires
   92|       |     * that at least -1, 0, and +1 must be mapped. But we include these as
   93|       |     * part of a better error recovery scheme. */
   94|  1.35k|    if (len < 2)
  ------------------
  |  Branch (94:9): [True: 1.02k, False: 337]
  ------------------
   95|  1.02k|    {
   96|  1.02k|      if (!len)
  ------------------
  |  Branch (96:11): [True: 808, False: 214]
  ------------------
   97|    808|	return value;
   98|    214|      else /* len == 1*/
   99|    214|	return value - arrayZ[0].fromCoord + arrayZ[0].toCoord;
  ------------------
  |  |   89|    214|#define fromCoord coords[from_offset].to_int ()
  ------------------
              	return value - arrayZ[0].fromCoord + arrayZ[0].toCoord;
  ------------------
  |  |   90|    214|#define toCoord coords[to_offset].to_int ()
  ------------------
  100|  1.02k|    }
  101|       |
  102|    337|    if (value <= arrayZ[0].fromCoord)
  ------------------
  |  |   89|    337|#define fromCoord coords[from_offset].to_int ()
  ------------------
  |  Branch (102:9): [True: 170, False: 167]
  ------------------
  103|    170|      return value - arrayZ[0].fromCoord + arrayZ[0].toCoord;
  ------------------
  |  |   89|    170|#define fromCoord coords[from_offset].to_int ()
  ------------------
                    return value - arrayZ[0].fromCoord + arrayZ[0].toCoord;
  ------------------
  |  |   90|    170|#define toCoord coords[to_offset].to_int ()
  ------------------
  104|       |
  105|    167|    unsigned int i;
  106|    167|    unsigned int count = len - 1;
  107|    990|    for (i = 1; i < count && value > arrayZ[i].fromCoord; i++)
  ------------------
  |  |   89|    954|#define fromCoord coords[from_offset].to_int ()
  ------------------
  |  Branch (107:17): [True: 954, False: 36]
  |  Branch (107:30): [True: 823, False: 131]
  ------------------
  108|    823|      ;
  109|       |
  110|    167|    if (value >= arrayZ[i].fromCoord)
  ------------------
  |  |   89|    167|#define fromCoord coords[from_offset].to_int ()
  ------------------
  |  Branch (110:9): [True: 34, False: 133]
  ------------------
  111|     34|      return value - arrayZ[i].fromCoord + arrayZ[i].toCoord;
  ------------------
  |  |   89|     34|#define fromCoord coords[from_offset].to_int ()
  ------------------
                    return value - arrayZ[i].fromCoord + arrayZ[i].toCoord;
  ------------------
  |  |   90|     34|#define toCoord coords[to_offset].to_int ()
  ------------------
  112|       |
  113|    133|    if (unlikely (arrayZ[i-1].fromCoord == arrayZ[i].fromCoord))
  ------------------
  |  |  259|    133|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 133]
  |  |  ------------------
  ------------------
  114|      0|      return arrayZ[i-1].toCoord;
  ------------------
  |  |   90|      0|#define toCoord coords[to_offset].to_int ()
  ------------------
  115|       |
  116|    133|    int denom = arrayZ[i].fromCoord - arrayZ[i-1].fromCoord;
  ------------------
  |  |   89|    133|#define fromCoord coords[from_offset].to_int ()
  ------------------
                  int denom = arrayZ[i].fromCoord - arrayZ[i-1].fromCoord;
  ------------------
  |  |   89|    133|#define fromCoord coords[from_offset].to_int ()
  ------------------
  117|    133|    return roundf (arrayZ[i-1].toCoord + ((float) (arrayZ[i].toCoord - arrayZ[i-1].toCoord) *
  ------------------
  |  |  207|    133|#define roundf(x) _hb_roundf(x)
  ------------------
  118|    133|					  (value - arrayZ[i-1].fromCoord)) / denom);
  119|    133|#undef toCoord
  120|    133|#undef fromCoord
  121|    133|  }
_ZNK2OT4avar8sanitizeEP21hb_sanitize_context_t:
  142|    589|  {
  143|    589|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    589|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  144|    589|    if (!(version.sanitize (c) &&
  ------------------
  |  Branch (144:11): [True: 588, False: 1]
  ------------------
  145|    589|	  (version.major == 1
  ------------------
  |  Branch (145:5): [True: 285, False: 303]
  ------------------
  146|    588|#ifndef HB_NO_AVAR2
  147|    588|	   || version.major == 2
  ------------------
  |  Branch (147:8): [True: 109, False: 194]
  ------------------
  148|    588|#endif
  149|    588|	   ) &&
  150|    589|	  c->check_struct (this)))
  ------------------
  |  Branch (150:4): [True: 392, False: 2]
  ------------------
  151|    197|      return_trace (false);
  ------------------
  |  |  349|    197|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    197|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  152|       |
  153|    392|    const SegmentMaps *map = &firstAxisSegmentMaps;
  154|    392|    unsigned int count = axisCount;
  155|  7.08k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (155:30): [True: 6.85k, False: 223]
  ------------------
  156|  6.85k|    {
  157|  6.85k|      if (unlikely (!map->sanitize (c)))
  ------------------
  |  |  259|  6.85k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 169, False: 6.68k]
  |  |  ------------------
  ------------------
  158|    169|	return_trace (false);
  ------------------
  |  |  349|    169|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    169|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  159|  6.68k|      map = &StructAfter<SegmentMaps> (*map);
  160|  6.68k|    }
  161|       |
  162|    223|#ifndef HB_NO_AVAR2
  163|    223|    if (version.major < 2)
  ------------------
  |  Branch (163:9): [True: 128, False: 95]
  ------------------
  164|    128|      return_trace (true);
  ------------------
  |  |  349|    128|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    128|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  165|       |
  166|     95|    const auto &v2 = * (const avarV2Tail *) map;
  167|     95|    if (unlikely (!v2.sanitize (c, this)))
  ------------------
  |  |  259|     95|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36, False: 59]
  |  |  ------------------
  ------------------
  168|     36|      return_trace (false);
  ------------------
  |  |  349|     36|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  169|     59|#endif
  170|       |
  171|     59|    return_trace (true);
  ------------------
  |  |  349|     59|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     59|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  172|     95|  }
_ZNK2OT10avarV2Tail8sanitizeEP21hb_sanitize_context_tPKv:
   52|     95|  {
   53|     95|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     95|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   54|     95|    return_trace (varIdxMap.sanitize (c, base) &&
  ------------------
  |  |  349|    168|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     95|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 73, False: 22]
  |  |  |  Branch (349:45): [True: 59, False: 14]
  |  |  ------------------
  ------------------
   55|     95|		  varStore.sanitize (c, base));
   56|     95|  }
_ZNK2OT4avar10map_coordsEPij:
  175|  66.6k|  {
  176|  66.6k|    unsigned int count = hb_min (coords_length, axisCount);
  177|       |
  178|  66.6k|    const SegmentMaps *map = &firstAxisSegmentMaps;
  179|  66.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (179:30): [True: 0, False: 66.6k]
  ------------------
  180|      0|    {
  181|      0|      coords[i] = map->map (coords[i]);
  182|      0|      map = &StructAfter<SegmentMaps> (*map);
  183|      0|    }
  184|       |
  185|  66.6k|#ifndef HB_NO_AVAR2
  186|  66.6k|    if (version.major < 2)
  ------------------
  |  Branch (186:9): [True: 66.6k, False: 64]
  ------------------
  187|  66.6k|      return;
  188|       |
  189|  1.79k|    for (; count < axisCount; count++)
  ------------------
  |  Branch (189:12): [True: 1.73k, False: 64]
  ------------------
  190|  1.73k|      map = &StructAfter<SegmentMaps> (*map);
  191|       |
  192|     64|    const auto &v2 = * (const avarV2Tail *) map;
  193|       |
  194|     64|    const auto &varidx_map = this+v2.varIdxMap;
  195|     64|    const auto &var_store = this+v2.varStore;
  196|     64|    auto *var_store_cache = var_store.create_cache ();
  197|       |
  198|     64|    hb_vector_t<int> out;
  199|     64|    out.alloc (coords_length);
  200|     64|    for (unsigned i = 0; i < coords_length; i++)
  ------------------
  |  Branch (200:26): [True: 0, False: 64]
  ------------------
  201|      0|    {
  202|      0|      int v = coords[i];
  203|      0|      uint32_t varidx = varidx_map.map (i);
  204|      0|      float delta = var_store.get_delta (varidx, coords, coords_length, var_store_cache);
  205|      0|      v += roundf (delta);
  ------------------
  |  |  207|      0|#define roundf(x) _hb_roundf(x)
  ------------------
  206|      0|      v = hb_clamp (v, -(1<<14), +(1<<14));
  207|      0|      out.push (v);
  208|      0|    }
  209|     64|    for (unsigned i = 0; i < coords_length; i++)
  ------------------
  |  Branch (209:26): [True: 0, False: 64]
  ------------------
  210|      0|      coords[i] = out[i];
  211|       |
  212|     64|    OT::VariationStore::destroy_cache (var_store_cache);
  213|     64|#endif
  214|     64|  }

_ZNK2OT18TupleVariationData8has_dataEv:
  561|  19.1k|  bool has_data () const { return tupleVarCount; }
_ZN2OT18TupleVariationData18get_tuple_iteratorE10hb_array_tIKcEjPKvR11hb_vector_tIjLb0EEPNS0_16tuple_iterator_tE:
  454|  14.7k|  {
  455|  14.7k|    iterator->init (var_data_bytes, axis_count, table_base);
  456|  14.7k|    if (!iterator->get_shared_indices (shared_indices))
  ------------------
  |  Branch (456:9): [True: 1.24k, False: 13.5k]
  ------------------
  457|  1.24k|      return false;
  458|  13.5k|    return iterator->is_valid ();
  459|  14.7k|  }
_ZN2OT18TupleVariationData16tuple_iterator_t4initE10hb_array_tIKcEjPKv:
  397|  14.7k|    {
  398|  14.7k|      var_data_bytes = var_data_bytes_;
  399|  14.7k|      var_data = var_data_bytes_.as<TupleVariationData> ();
  400|  14.7k|      index = 0;
  401|  14.7k|      axis_count = axis_count_;
  402|  14.7k|      current_tuple = &var_data->get_tuple_var_header ();
  403|  14.7k|      data_offset = 0;
  404|  14.7k|      table_base = table_base_;
  405|  14.7k|    }
_ZNK2OT18TupleVariationData20get_tuple_var_headerEv:
  392|  14.7k|  { return StructAfter<TupleVariationHeader> (data); }
_ZN2OT18TupleVariationData16tuple_iterator_t18get_shared_indicesER11hb_vector_tIjLb0EE:
  408|  14.7k|    {
  409|  14.7k|      if (var_data->has_shared_point_numbers ())
  ------------------
  |  Branch (409:11): [True: 3.70k, False: 11.0k]
  ------------------
  410|  3.70k|      {
  411|  3.70k|        const HBUINT8 *base = &(table_base+var_data->data);
  412|  3.70k|        const HBUINT8 *p = base;
  413|  3.70k|        if (!unpack_points (p, shared_indices, (const HBUINT8 *) (var_data_bytes.arrayZ + var_data_bytes.length))) return false;
  ------------------
  |  Branch (413:13): [True: 1.24k, False: 2.45k]
  ------------------
  414|  2.45k|        data_offset = p - base;
  415|  2.45k|      }
  416|  13.5k|      return true;
  417|  14.7k|    }
_ZNK2OT18TupleVariationData24has_shared_point_numbersEv:
  461|  14.7k|  bool has_shared_point_numbers () const { return tupleVarCount.has_shared_point_numbers (); }
_ZNK2OT18TupleVariationData13TupleVarCount24has_shared_point_numbersEv:
  566|  14.7k|    bool has_shared_point_numbers () const { return ((*this) & SharedPointNumbers); }
_ZNK2OT18TupleVariationData16tuple_iterator_t8is_validEv:
  420|  90.8k|    {
  421|  90.8k|      return (index < var_data->tupleVarCount.get_count ()) &&
  ------------------
  |  Branch (421:14): [True: 89.3k, False: 1.51k]
  ------------------
  422|  90.8k|             var_data_bytes.check_range (current_tuple, TupleVariationHeader::min_size) &&
  ------------------
  |  Branch (422:14): [True: 88.6k, False: 613]
  ------------------
  423|  90.8k|             var_data_bytes.check_range (current_tuple, hb_max (current_tuple->get_data_size (),
  ------------------
  |  Branch (423:14): [True: 84.8k, False: 3.88k]
  ------------------
  424|  88.6k|                                                                current_tuple->get_size (axis_count)));
  425|  90.8k|    }
_ZNK2OT18TupleVariationData13TupleVarCount9get_countEv:
  567|  90.8k|    unsigned int get_count () const { return (*this) & CountMask; }
_ZNK2OT20TupleVariationHeader8get_sizeEj:
  245|   165k|  { return min_size + get_all_tuples (axis_count).get_size (); }
_ZNK2OT20TupleVariationHeader14get_all_tuplesEj:
  339|   202k|  { return StructAfter<UnsizedArrayOf<F2DOT14>> (tupleIndex).as_array ((has_peak () + has_intermediate () * 2) * axis_count); }
_ZNK2OT20TupleVariationHeader8has_peakEv:
  320|   310k|  bool           has_peak () const { return tupleIndex & TuppleIndex::EmbeddedPeakTuple; }
_ZNK2OT20TupleVariationHeader16has_intermediateEv:
  321|   272k|  bool   has_intermediate () const { return tupleIndex & TuppleIndex::IntermediateRegion; }
_ZNK2OT20TupleVariationHeader16calculate_scalarE10hb_array_tIiEjS1_IKNS_7HBFixedINS_7IntTypeIsLj2EEELj14EEEEPK11hb_vector_tIiLb0EE:
  255|  84.8k|  {
  256|  84.8k|    const F2DOT14 *peak_tuple;
  257|       |
  258|  84.8k|    unsigned start_idx = 0;
  259|  84.8k|    unsigned end_idx = coord_count;
  260|       |
  261|  84.8k|    if (has_peak ())
  ------------------
  |  Branch (261:9): [True: 12.4k, False: 72.3k]
  ------------------
  262|  12.4k|      peak_tuple = get_peak_tuple (coord_count).arrayZ;
  263|  72.3k|    else
  264|  72.3k|    {
  265|  72.3k|      unsigned int index = get_index ();
  266|  72.3k|      if (unlikely ((index + 1) * coord_count > shared_tuples.length))
  ------------------
  |  |  259|  72.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 13.0k, False: 59.3k]
  |  |  ------------------
  ------------------
  267|  13.0k|        return 0.f;
  268|  59.3k|      peak_tuple = shared_tuples.sub_array (coord_count * index, coord_count).arrayZ;
  269|       |
  270|  59.3k|      if (shared_tuple_active_idx)
  ------------------
  |  Branch (270:11): [True: 59.3k, False: 0]
  ------------------
  271|  59.3k|      {
  272|  59.3k|	if (unlikely (index >= shared_tuple_active_idx->length))
  ------------------
  |  |  259|  59.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 953, False: 58.3k]
  |  |  ------------------
  ------------------
  273|    953|	  return 0.f;
  274|  58.3k|	int v = (*shared_tuple_active_idx).arrayZ[index];
  275|  58.3k|	if (v != -1)
  ------------------
  |  Branch (275:6): [True: 3.95k, False: 54.4k]
  ------------------
  276|  3.95k|	{
  277|  3.95k|	  start_idx = v;
  278|  3.95k|	  end_idx = start_idx + 1;
  279|  3.95k|	}
  280|  58.3k|      }
  281|  59.3k|    }
  282|       |
  283|  70.8k|    const F2DOT14 *start_tuple = nullptr;
  284|  70.8k|    const F2DOT14 *end_tuple = nullptr;
  285|  70.8k|    bool has_interm = has_intermediate ();
  286|  70.8k|    if (has_interm)
  ------------------
  |  Branch (286:9): [True: 11.8k, False: 58.9k]
  ------------------
  287|  11.8k|    {
  288|  11.8k|      start_tuple = get_start_tuple (coord_count).arrayZ;
  289|  11.8k|      end_tuple = get_end_tuple (coord_count).arrayZ;
  290|  11.8k|    }
  291|       |
  292|  70.8k|    float scalar = 1.f;
  293|   200k|    for (unsigned int i = start_idx; i < end_idx; i++)
  ------------------
  |  Branch (293:38): [True: 187k, False: 12.5k]
  ------------------
  294|   187k|    {
  295|   187k|      int peak = peak_tuple[i].to_int ();
  296|   187k|      if (!peak) continue;
  ------------------
  |  Branch (296:11): [True: 76.6k, False: 110k]
  ------------------
  297|       |
  298|   110k|      int v = coords[i];
  299|   110k|      if (v == peak) continue;
  ------------------
  |  Branch (299:11): [True: 338, False: 110k]
  ------------------
  300|       |
  301|   110k|      if (has_interm)
  ------------------
  |  Branch (301:11): [True: 52.0k, False: 58.5k]
  ------------------
  302|  52.0k|      {
  303|  52.0k|        int start = start_tuple[i].to_int ();
  304|  52.0k|        int end = end_tuple[i].to_int ();
  305|  52.0k|        if (unlikely (start > peak || peak > end ||
  ------------------
  |  |  259|   159k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 47.5k, False: 4.48k]
  |  |  |  Branch (259:47): [True: 21.3k, False: 30.7k]
  |  |  |  Branch (259:47): [True: 24.6k, False: 6.14k]
  |  |  |  Branch (259:47): [True: 4.18k, False: 1.95k]
  |  |  |  Branch (259:47): [True: 1.66k, False: 2.52k]
  |  |  |  Branch (259:47): [True: 1.66k, False: 0]
  |  |  ------------------
  ------------------
  306|  52.0k|                      (start < 0 && end > 0 && peak))) continue;
  307|  4.48k|        if (v < start || v > end) return 0.f;
  ------------------
  |  Branch (307:13): [True: 277, False: 4.20k]
  |  Branch (307:26): [True: 1.04k, False: 3.15k]
  ------------------
  308|  3.15k|        if (v < peak)
  ------------------
  |  Branch (308:13): [True: 1.16k, False: 1.99k]
  ------------------
  309|  1.16k|        { if (peak != start) scalar *= (float) (v - start) / (peak - start); }
  ------------------
  |  Branch (309:15): [True: 1.16k, False: 0]
  ------------------
  310|  1.99k|        else
  311|  1.99k|        { if (peak != end) scalar *= (float) (end - v) / (end - peak); }
  ------------------
  |  Branch (311:15): [True: 1.99k, False: 0]
  ------------------
  312|  3.15k|      }
  313|  58.5k|      else if (!v || v < hb_min (0, peak) || v > hb_max (0, peak)) return 0.f;
  ------------------
  |  Branch (313:16): [True: 3.79k, False: 54.7k]
  |  Branch (313:16): [True: 56.8k, False: 1.67k]
  |  Branch (313:22): [True: 29.6k, False: 25.1k]
  |  Branch (313:46): [True: 23.4k, False: 1.67k]
  ------------------
  314|  1.67k|      else
  315|  1.67k|        scalar *= (float) v / peak;
  316|   110k|    }
  317|  12.5k|    return scalar;
  318|  70.8k|  }
_ZNK2OT20TupleVariationHeader14get_peak_tupleEj:
  341|  12.4k|  { return get_all_tuples (axis_count).sub_array (0, axis_count); }
_ZNK2OT20TupleVariationHeader9get_indexEv:
  323|  72.3k|  unsigned      get_index () const { return tupleIndex & TuppleIndex::TupleIndexMask; }
_ZNK2OT20TupleVariationHeader15get_start_tupleEj:
  343|  11.8k|  { return get_all_tuples (axis_count).sub_array (has_peak () * axis_count, axis_count); }
_ZNK2OT20TupleVariationHeader13get_end_tupleEj:
  345|  11.8k|  { return get_all_tuples (axis_count).sub_array (has_peak () * axis_count + axis_count, axis_count); }
_ZNK2OT18TupleVariationData16tuple_iterator_t19get_serialized_dataEv:
  436|  12.2k|    { return &(table_base+var_data->data) + data_offset; }
_ZNK2OT20TupleVariationHeader13get_data_sizeEv:
  247|   178k|  unsigned get_data_size () const { return varDataSize; }
_ZNK2OT20TupleVariationHeader18has_private_pointsEv:
  322|  10.9k|  bool has_private_points () const { return tupleIndex & TuppleIndex::PrivatePointNumbers; }
_ZN2OT18TupleVariationData13unpack_pointsERPKNS_7IntTypeIhLj1EEER11hb_vector_tIjLb0EES4_:
  466|  12.7k|  {
  467|  12.7k|    enum packed_point_flag_t
  468|  12.7k|    {
  469|  12.7k|      POINTS_ARE_WORDS     = 0x80,
  470|  12.7k|      POINT_RUN_COUNT_MASK = 0x7F
  471|  12.7k|    };
  472|       |
  473|  12.7k|    if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|  12.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 466, False: 12.2k]
  |  |  ------------------
  ------------------
  474|       |
  475|  12.2k|    unsigned count = *p++;
  476|  12.2k|    if (count & POINTS_ARE_WORDS)
  ------------------
  |  Branch (476:9): [True: 2.03k, False: 10.2k]
  ------------------
  477|  2.03k|    {
  478|  2.03k|      if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|  2.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 206, False: 1.82k]
  |  |  ------------------
  ------------------
  479|  1.82k|      count = ((count & POINT_RUN_COUNT_MASK) << 8) | *p++;
  480|  1.82k|    }
  481|  12.0k|    if (unlikely (!points.resize (count, false))) return false;
  ------------------
  |  |  259|  12.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 274, False: 11.8k]
  |  |  ------------------
  ------------------
  482|       |
  483|  11.8k|    unsigned n = 0;
  484|  11.8k|    unsigned i = 0;
  485|   668k|    while (i < count)
  ------------------
  |  Branch (485:12): [True: 659k, False: 9.22k]
  ------------------
  486|   659k|    {
  487|   659k|      if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|   659k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 203, False: 659k]
  |  |  ------------------
  ------------------
  488|   659k|      unsigned control = *p++;
  489|   659k|      unsigned run_count = (control & POINT_RUN_COUNT_MASK) + 1;
  490|   659k|      unsigned stop = i + run_count;
  491|   659k|      if (unlikely (stop > count)) return false;
  ------------------
  |  |  259|   659k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 831, False: 658k]
  |  |  ------------------
  ------------------
  492|   658k|      if (control & POINTS_ARE_WORDS)
  ------------------
  |  Branch (492:11): [True: 9.83k, False: 648k]
  ------------------
  493|  9.83k|      {
  494|  9.83k|        if (unlikely (p + run_count * HBUINT16::static_size > end)) return false;
  ------------------
  |  |  259|  9.83k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 443, False: 9.39k]
  |  |  ------------------
  ------------------
  495|   870k|        for (; i < stop; i++)
  ------------------
  |  Branch (495:16): [True: 860k, False: 9.39k]
  ------------------
  496|   860k|        {
  497|   860k|          n += *(const HBUINT16 *)p;
  498|   860k|          points.arrayZ[i] = n;
  499|   860k|          p += HBUINT16::static_size;
  500|   860k|        }
  501|  9.39k|      }
  502|   648k|      else
  503|   648k|      {
  504|   648k|        if (unlikely (p + run_count > end)) return false;
  ------------------
  |  |  259|   648k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.11k, False: 647k]
  |  |  ------------------
  ------------------
  505|  2.33M|        for (; i < stop; i++)
  ------------------
  |  Branch (505:16): [True: 1.68M, False: 647k]
  ------------------
  506|  1.68M|        {
  507|  1.68M|          n += *p++;
  508|  1.68M|          points.arrayZ[i] = n;
  509|  1.68M|        }
  510|   647k|      }
  511|   658k|    }
  512|  9.22k|    return true;
  513|  11.8k|  }
_ZN2OT18TupleVariationData13unpack_deltasERPKNS_7IntTypeIhLj1EEER11hb_vector_tIiLb0EES4_:
  518|  14.9k|  {
  519|  14.9k|    enum packed_delta_flag_t
  520|  14.9k|    {
  521|  14.9k|      DELTAS_ARE_ZERO      = 0x80,
  522|  14.9k|      DELTAS_ARE_WORDS     = 0x40,
  523|  14.9k|      DELTA_RUN_COUNT_MASK = 0x3F
  524|  14.9k|    };
  525|       |
  526|  14.9k|    unsigned i = 0;
  527|  14.9k|    unsigned count = deltas.length;
  528|   107k|    while (i < count)
  ------------------
  |  Branch (528:12): [True: 95.7k, False: 11.5k]
  ------------------
  529|  95.7k|    {
  530|  95.7k|      if (unlikely (p + 1 > end)) return false;
  ------------------
  |  |  259|  95.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 521, False: 95.2k]
  |  |  ------------------
  ------------------
  531|  95.2k|      unsigned control = *p++;
  532|  95.2k|      unsigned run_count = (control & DELTA_RUN_COUNT_MASK) + 1;
  533|  95.2k|      unsigned stop = i + run_count;
  534|  95.2k|      if (unlikely (stop > count)) return false;
  ------------------
  |  |  259|  95.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.34k, False: 93.9k]
  |  |  ------------------
  ------------------
  535|  93.9k|      if (control & DELTAS_ARE_ZERO)
  ------------------
  |  Branch (535:11): [True: 1.38k, False: 92.5k]
  ------------------
  536|  1.38k|      {
  537|  36.7k|        for (; i < stop; i++)
  ------------------
  |  Branch (537:16): [True: 35.3k, False: 1.38k]
  ------------------
  538|  35.3k|          deltas.arrayZ[i] = 0;
  539|  1.38k|      }
  540|  92.5k|      else if (control & DELTAS_ARE_WORDS)
  ------------------
  |  Branch (540:16): [True: 4.53k, False: 88.0k]
  ------------------
  541|  4.53k|      {
  542|  4.53k|        if (unlikely (p + run_count * HBUINT16::static_size > end)) return false;
  ------------------
  |  |  259|  4.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 768, False: 3.76k]
  |  |  ------------------
  ------------------
  543|  16.8k|        for (; i < stop; i++)
  ------------------
  |  Branch (543:16): [True: 13.0k, False: 3.76k]
  ------------------
  544|  13.0k|        {
  545|  13.0k|          deltas.arrayZ[i] = * (const HBINT16 *) p;
  546|  13.0k|          p += HBUINT16::static_size;
  547|  13.0k|        }
  548|  3.76k|      }
  549|  88.0k|      else
  550|  88.0k|      {
  551|  88.0k|        if (unlikely (p + run_count > end)) return false;
  ------------------
  |  |  259|  88.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 740, False: 87.2k]
  |  |  ------------------
  ------------------
  552|   211k|        for (; i < stop; i++)
  ------------------
  |  Branch (552:16): [True: 124k, False: 87.2k]
  ------------------
  553|   124k|        {
  554|   124k|          deltas.arrayZ[i] = * (const HBINT8 *) p++;
  555|   124k|        }
  556|  87.2k|      }
  557|  93.9k|    }
  558|  11.5k|    return true;
  559|  14.9k|  }
_ZN2OT18TupleVariationData16tuple_iterator_t12move_to_nextEv:
  428|  77.2k|    {
  429|  77.2k|      data_offset += current_tuple->get_data_size ();
  430|  77.2k|      current_tuple = &current_tuple->get_next (axis_count);
  431|  77.2k|      index++;
  432|  77.2k|      return is_valid ();
  433|  77.2k|    }
_ZNK2OT20TupleVariationHeader8get_nextEj:
  250|  77.2k|  { return StructAtOffset<TupleVariationHeader> (this, get_size (axis_count)); }
_ZNK2OT16DeltaSetIndexMap8sanitizeEP21hb_sanitize_context_t:
  191|  2.92k|  {
  192|  2.92k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  2.92k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  193|  2.92k|    if (!u.format.sanitize (c)) return_trace (false);
  ------------------
  |  |  349|  1.20k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (193:9): [True: 1.20k, False: 1.71k]
  ------------------
  194|  1.71k|    switch (u.format) {
  195|  1.02k|    case 0: return_trace (u.format0.sanitize (c));
  ------------------
  |  |  349|  1.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (195:5): [True: 1.02k, False: 692]
  ------------------
  196|    344|    case 1: return_trace (u.format1.sanitize (c));
  ------------------
  |  |  349|    344|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    344|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (196:5): [True: 344, False: 1.37k]
  ------------------
  197|    348|    default:return_trace (true);
  ------------------
  |  |  349|    348|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    348|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  |  Branch (197:5): [True: 348, False: 1.36k]
  ------------------
  198|  1.71k|    }
  199|  1.71k|  }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeItLj2EEEE8sanitizeEP21hb_sanitize_context_t:
  119|  1.02k|  {
  120|  1.02k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.02k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  121|  1.02k|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|  2.02k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.02k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.00k, False: 20]
  |  |  |  Branch (349:45): [True: 937, False: 67]
  |  |  ------------------
  ------------------
  122|  1.02k|                  c->check_range (mapDataZ.arrayZ,
  123|  1.02k|                                  mapCount,
  124|  1.02k|                                  get_width ()));
  125|  1.02k|  }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeItLj2EEEE9get_widthEv:
  114|   240k|  unsigned get_width () const           { return ((entryFormat >> 4) & 3) + 1; }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeIjLj4EEEE8sanitizeEP21hb_sanitize_context_t:
  119|    344|  {
  120|    344|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    344|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  121|    344|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    668|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    344|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 324, False: 20]
  |  |  |  Branch (349:45): [True: 180, False: 144]
  |  |  ------------------
  ------------------
  122|    344|                  c->check_range (mapDataZ.arrayZ,
  123|    344|                                  mapCount,
  124|    344|                                  get_width ()));
  125|    344|  }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeIjLj4EEEE9get_widthEv:
  114|  3.48k|  unsigned get_width () const           { return ((entryFormat >> 4) & 3) + 1; }
_ZNK2OT16DeltaSetIndexMap3mapEj:
  155|  1.35M|  {
  156|  1.35M|    switch (u.format) {
  157|  1.32M|    case 0: return (u.format0.map (v));
  ------------------
  |  Branch (157:5): [True: 1.32M, False: 30.4k]
  ------------------
  158|  5.76k|    case 1: return (u.format1.map (v));
  ------------------
  |  Branch (158:5): [True: 5.76k, False: 1.35M]
  ------------------
  159|  24.6k|    default:return v;
  ------------------
  |  Branch (159:5): [True: 24.6k, False: 1.33M]
  ------------------
  160|  1.35M|    }
  161|  1.35M|  }
_ZN2OT17VarStoreInstancerC2EPKNS_14VariationStoreEPKNS_16DeltaSetIndexMapE10hb_array_tIiE:
  227|  27.2k|    varStore (varStore), varIdxMap (varIdxMap), coords (coords) {}
_ZNK2OT17VarStoreInstancercvbEv:
  229|    429|  operator bool () const { return varStore && bool (coords); }
  ------------------
  |  Branch (229:35): [True: 429, False: 0]
  |  Branch (229:47): [True: 0, False: 429]
  ------------------
_ZNK2OT17VarStoreInstancerclEjt:
  234|  1.35M|  { return varStore->get_delta (varIdxMap ? varIdxMap->map (VarIdx::add (varIdx, offset)) : varIdx + offset, coords); }
  ------------------
  |  Branch (234:33): [True: 1.35M, False: 0]
  ------------------
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeItLj2EEEE3mapEj:
   86|  1.32M|  {
   87|       |    /* If count is zero, pass value unchanged.  This takes
   88|       |     * care of direct mapping for advance map. */
   89|  1.32M|    if (!mapCount)
  ------------------
  |  Branch (89:9): [True: 1.08M, False: 239k]
  ------------------
   90|  1.08M|      return v;
   91|       |
   92|   239k|    if (v >= mapCount)
  ------------------
  |  Branch (92:9): [True: 224k, False: 14.7k]
  ------------------
   93|   224k|      v = mapCount - 1;
   94|       |
   95|   239k|    unsigned int u = 0;
   96|   239k|    { /* Fetch it. */
   97|   239k|      unsigned int w = get_width ();
   98|   239k|      const HBUINT8 *p = mapDataZ.arrayZ + w * v;
   99|   696k|      for (; w; w--)
  ------------------
  |  Branch (99:14): [True: 457k, False: 239k]
  ------------------
  100|   457k|        u = (u << 8) + *p++;
  101|   239k|    }
  102|       |
  103|   239k|    { /* Repack it. */
  104|   239k|      unsigned int n = get_inner_bit_count ();
  105|   239k|      unsigned int outer = u >> n;
  106|   239k|      unsigned int inner = u & ((1 << n) - 1);
  107|   239k|      u = (outer<<16) | inner;
  108|   239k|    }
  109|       |
  110|   239k|    return u;
  111|  1.32M|  }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeIjLj4EEEE3mapEj:
   86|  5.76k|  {
   87|       |    /* If count is zero, pass value unchanged.  This takes
   88|       |     * care of direct mapping for advance map. */
   89|  5.76k|    if (!mapCount)
  ------------------
  |  Branch (89:9): [True: 2.60k, False: 3.16k]
  ------------------
   90|  2.60k|      return v;
   91|       |
   92|  3.16k|    if (v >= mapCount)
  ------------------
  |  Branch (92:9): [True: 2.82k, False: 335]
  ------------------
   93|  2.82k|      v = mapCount - 1;
   94|       |
   95|  3.16k|    unsigned int u = 0;
   96|  3.16k|    { /* Fetch it. */
   97|  3.16k|      unsigned int w = get_width ();
   98|  3.16k|      const HBUINT8 *p = mapDataZ.arrayZ + w * v;
   99|  7.11k|      for (; w; w--)
  ------------------
  |  Branch (99:14): [True: 3.94k, False: 3.16k]
  ------------------
  100|  3.94k|        u = (u << 8) + *p++;
  101|  3.16k|    }
  102|       |
  103|  3.16k|    { /* Repack it. */
  104|  3.16k|      unsigned int n = get_inner_bit_count ();
  105|  3.16k|      unsigned int outer = u >> n;
  106|  3.16k|      unsigned int inner = u & ((1 << n) - 1);
  107|  3.16k|      u = (outer<<16) | inner;
  108|  3.16k|    }
  109|       |
  110|  3.16k|    return u;
  111|  5.76k|  }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeItLj2EEEE19get_inner_bit_countEv:
  115|   239k|  unsigned get_inner_bit_count () const { return (entryFormat & 0xF) + 1; }
_ZNK2OT24DeltaSetIndexMapFormat01INS_7IntTypeIjLj4EEEE19get_inner_bit_countEv:
  115|  3.16k|  unsigned get_inner_bit_count () const { return (entryFormat & 0xF) + 1; }

_ZNK2OT4fvar8get_axesEv:
  437|  7.43k|  { return hb_array (&(this+firstAxis), axisCount); }
_ZNK2OT4fvar22unnormalize_axis_valueEji:
  317|  5.39k|  { return get_axes ()[axis_index].unnormalize_axis_value (v); }
_ZNK2OT10AxisRecord22unnormalize_axis_valueEi:
  198|  5.39k|  {
  199|  5.39k|    float min_value, default_value, max_value;
  200|  5.39k|    get_coordinates (min_value, default_value, max_value);
  201|       |
  202|  5.39k|    if (v == 0)
  ------------------
  |  Branch (202:9): [True: 57, False: 5.33k]
  ------------------
  203|     57|      return default_value;
  204|  5.33k|    else if (v < 0)
  ------------------
  |  Branch (204:14): [True: 3.75k, False: 1.58k]
  ------------------
  205|  3.75k|      return v * (default_value - min_value) / 16384.f + default_value;
  206|  1.58k|    else
  207|  1.58k|      return v * (max_value - default_value) / 16384.f + default_value;
  208|  5.39k|  }
_ZNK2OT10AxisRecord15get_coordinatesERfS1_S1_:
  219|  5.39k|  {
  220|  5.39k|    default_ = defaultValue.to_float ();
  221|       |    /* Ensure order, to simplify client math. */
  222|  5.39k|    min = hb_min (default_, minValue.to_float ());
  223|  5.39k|    max = hb_max (default_, maxValue.to_float ());
  224|  5.39k|  }
_ZNK2OT4fvar8sanitizeEP21hb_sanitize_context_t:
  253|  1.19k|  {
  254|  1.19k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.19k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  255|  1.19k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  13.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.19k, False: 2]
  |  |  |  Branch (349:45): [True: 1.11k, False: 78]
  |  |  |  Branch (349:45): [True: 1.11k, False: 1]
  |  |  |  Branch (349:45): [True: 1.10k, False: 4]
  |  |  |  Branch (349:45): [True: 1.10k, False: 5]
  |  |  |  Branch (349:45): [True: 1.09k, False: 6]
  |  |  |  Branch (349:45): [True: 1.09k, False: 8]
  |  |  ------------------
  ------------------
  256|  1.19k|		  likely (version.major == 1) &&
  257|  1.19k|		  c->check_struct (this) &&
  258|  1.19k|		  axisSize == 20 && /* Assumed in our code. */
  259|  1.19k|		  instanceSize >= axisCount * 4 + 4 &&
  260|  1.19k|		  get_axes ().sanitize (c) &&
  261|  1.19k|		  c->check_range (get_instance (0), instanceCount, instanceSize));
  262|  1.19k|  }
_ZNK2OT4fvar12get_instanceEj:
  440|  1.09k|  {
  441|  1.09k|    if (unlikely (i >= instanceCount)) return nullptr;
  ------------------
  |  |  259|  1.09k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 162, False: 936]
  |  |  ------------------
  ------------------
  442|    936|   return &StructAtOffset<InstanceRecord> (&StructAfter<InstanceRecord> (get_axes ()),
  443|    936|					   i * instanceSize);
  444|  1.09k|  }
_ZNK2OT4fvar14get_axis_countEv:
  264|  99.9k|  unsigned int get_axis_count () const { return axisCount; }
_ZNK2OT4fvar14get_axis_infosEjPjP21hb_ot_var_axis_info_t:
  284|  33.3k|  {
  285|  33.3k|    if (axes_count)
  ------------------
  |  Branch (285:9): [True: 0, False: 33.3k]
  ------------------
  286|      0|    {
  287|      0|      hb_array_t<const AxisRecord> arr = get_axes ().sub_array (start_offset, axes_count);
  288|      0|      for (unsigned i = 0; i < arr.length; ++i)
  ------------------
  |  Branch (288:28): [True: 0, False: 0]
  ------------------
  289|      0|	arr[i].get_axis_info (start_offset + i, &axes_array[i]);
  290|      0|    }
  291|  33.3k|    return axisCount;
  292|  33.3k|  }

_ZNK2OT4gvar13accelerator_t22apply_deltas_to_pointsEj10hb_array_tIiES2_INS_15contour_point_tEE:
  295|   185k|    {
  296|   185k|      if (!coords) return true;
  ------------------
  |  Branch (296:11): [True: 63.7k, False: 121k]
  ------------------
  297|       |
  298|   121k|      if (unlikely (glyph >= glyphCount)) return true;
  ------------------
  |  |  259|   121k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 102k, False: 19.1k]
  |  |  ------------------
  ------------------
  299|       |
  300|  19.1k|      hb_bytes_t var_data_bytes = table->get_glyph_var_data_bytes (table.get_blob (), glyphCount, glyph);
  301|  19.1k|      if (!var_data_bytes.as<GlyphVariationData> ()->has_data ()) return true;
  ------------------
  |  Branch (301:11): [True: 4.33k, False: 14.7k]
  ------------------
  302|  14.7k|      hb_vector_t<unsigned int> shared_indices;
  303|  14.7k|      GlyphVariationData::tuple_iterator_t iterator;
  304|  14.7k|      if (!GlyphVariationData::get_tuple_iterator (var_data_bytes, table->axisCount,
  ------------------
  |  Branch (304:11): [True: 2.55k, False: 12.2k]
  ------------------
  305|  14.7k|						   var_data_bytes.arrayZ,
  306|  14.7k|						   shared_indices, &iterator))
  307|  2.55k|	return true; /* so isn't applied at all */
  308|       |
  309|       |      /* Save original points for inferred delta calculation */
  310|  12.2k|      contour_point_vector_t orig_points_vec; // Populated lazily
  311|  12.2k|      auto orig_points = orig_points_vec.as_array ();
  312|       |
  313|       |      /* flag is used to indicate referenced point */
  314|  12.2k|      contour_point_vector_t deltas_vec; // Populated lazily
  315|  12.2k|      auto deltas = deltas_vec.as_array ();
  316|       |
  317|  12.2k|      hb_vector_t<unsigned> end_points; // Populated lazily
  318|       |
  319|  12.2k|      unsigned num_coords = table->axisCount;
  320|  12.2k|      hb_array_t<const F2DOT14> shared_tuples = (table+table->sharedTuples).as_array (table->sharedTupleCount * num_coords);
  321|       |
  322|  12.2k|      hb_vector_t<unsigned int> private_indices;
  323|  12.2k|      hb_vector_t<int> x_deltas;
  324|  12.2k|      hb_vector_t<int> y_deltas;
  325|  12.2k|      bool flush = false;
  326|  12.2k|      do
  327|  84.8k|      {
  328|  84.8k|	float scalar = iterator.current_tuple->calculate_scalar (coords, num_coords, shared_tuples,
  329|  84.8k|								 &shared_tuple_active_idx);
  330|  84.8k|	if (scalar == 0.f) continue;
  ------------------
  |  Branch (330:6): [True: 72.5k, False: 12.2k]
  ------------------
  331|  12.2k|	const HBUINT8 *p = iterator.get_serialized_data ();
  332|  12.2k|	unsigned int length = iterator.current_tuple->get_data_size ();
  333|  12.2k|	if (unlikely (!iterator.var_data_bytes.check_range (p, length)))
  ------------------
  |  |  259|  12.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 941, False: 11.3k]
  |  |  ------------------
  ------------------
  334|    941|	  return false;
  335|       |
  336|  11.3k|	if (!deltas)
  ------------------
  |  Branch (336:6): [True: 9.63k, False: 1.69k]
  ------------------
  337|  9.63k|	{
  338|  9.63k|	  if (unlikely (!deltas_vec.resize (points.length, false))) return false;
  ------------------
  |  |  259|  9.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 336, False: 9.29k]
  |  |  ------------------
  ------------------
  339|  9.29k|	  deltas = deltas_vec.as_array ();
  340|  9.29k|	  hb_memset (deltas.arrayZ, 0, deltas.get_size ()); // Faster than vector resize
  341|  9.29k|	}
  342|       |
  343|  10.9k|	const HBUINT8 *end = p + length;
  344|       |
  345|  10.9k|	bool has_private_points = iterator.current_tuple->has_private_points ();
  346|  10.9k|	if (has_private_points &&
  ------------------
  |  Branch (346:6): [True: 9.06k, False: 1.92k]
  ------------------
  347|  10.9k|	    !GlyphVariationData::unpack_points (p, private_indices, end))
  ------------------
  |  Branch (347:6): [True: 2.29k, False: 6.77k]
  ------------------
  348|  2.29k|	  return false;
  349|  8.69k|	const hb_array_t<unsigned int> &indices = has_private_points ? private_indices : shared_indices;
  ------------------
  |  Branch (349:44): [True: 6.77k, False: 1.92k]
  ------------------
  350|       |
  351|  8.69k|	bool apply_to_all = (indices.length == 0);
  352|  8.69k|	unsigned int num_deltas = apply_to_all ? points.length : indices.length;
  ------------------
  |  Branch (352:28): [True: 3.31k, False: 5.38k]
  ------------------
  353|  8.69k|	if (unlikely (!x_deltas.resize (num_deltas, false))) return false;
  ------------------
  |  |  259|  8.69k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 238, False: 8.45k]
  |  |  ------------------
  ------------------
  354|  8.45k|	if (unlikely (!GlyphVariationData::unpack_deltas (p, x_deltas, end))) return false;
  ------------------
  |  |  259|  8.45k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.80k, False: 6.65k]
  |  |  ------------------
  ------------------
  355|  6.65k|	if (unlikely (!y_deltas.resize (num_deltas, false))) return false;
  ------------------
  |  |  259|  6.65k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 212, False: 6.44k]
  |  |  ------------------
  ------------------
  356|  6.44k|	if (unlikely (!GlyphVariationData::unpack_deltas (p, y_deltas, end))) return false;
  ------------------
  |  |  259|  6.44k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.56k, False: 4.87k]
  |  |  ------------------
  ------------------
  357|       |
  358|  4.87k|	if (!apply_to_all)
  ------------------
  |  Branch (358:6): [True: 3.36k, False: 1.51k]
  ------------------
  359|  3.36k|	{
  360|  3.36k|	  if (!orig_points)
  ------------------
  |  Branch (360:8): [True: 3.06k, False: 305]
  ------------------
  361|  3.06k|	  {
  362|  3.06k|	    orig_points_vec.extend (points);
  363|  3.06k|	    if (unlikely (orig_points_vec.in_error ())) return false;
  ------------------
  |  |  259|  3.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 107, False: 2.95k]
  |  |  ------------------
  ------------------
  364|  2.95k|	    orig_points = orig_points_vec.as_array ();
  365|  2.95k|	  }
  366|       |
  367|  3.25k|	  if (flush)
  ------------------
  |  Branch (367:8): [True: 305, False: 2.95k]
  ------------------
  368|    305|	  {
  369|    305|	    unsigned count = points.length;
  370|  4.47k|	    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (370:31): [True: 4.16k, False: 305]
  ------------------
  371|  4.16k|	      points.arrayZ[i].translate (deltas.arrayZ[i]);
  372|    305|	    flush = false;
  373|       |
  374|    305|	  }
  375|  3.25k|	  hb_memset (deltas.arrayZ, 0, deltas.get_size ());
  376|  3.25k|	}
  377|       |
  378|  4.77k|	if (HB_OPTIMIZE_SIZE_VAL)
  ------------------
  |  |  200|  4.77k|#define HB_OPTIMIZE_SIZE_VAL 0
  |  |  ------------------
  |  |  |  Branch (200:30): [Folded - Ignored]
  |  |  ------------------
  ------------------
  379|      0|	{
  380|      0|	  for (unsigned int i = 0; i < num_deltas; i++)
  ------------------
  |  Branch (380:29): [True: 0, False: 0]
  ------------------
  381|      0|	  {
  382|      0|	    unsigned int pt_index;
  383|      0|	    if (apply_to_all)
  ------------------
  |  Branch (383:10): [True: 0, False: 0]
  ------------------
  384|      0|	      pt_index = i;
  385|      0|	    else
  386|      0|	    {
  387|      0|	      pt_index = indices[i];
  388|      0|	      if (unlikely (pt_index >= deltas.length)) continue;
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  389|      0|	    }
  390|      0|	    auto &delta = deltas.arrayZ[pt_index];
  391|      0|	    delta.flag = 1;	/* this point is referenced, i.e., explicit deltas specified */
  392|      0|	    delta.x += x_deltas.arrayZ[i] * scalar;
  393|      0|	    delta.y += y_deltas.arrayZ[i] * scalar;
  394|      0|	  }
  395|      0|	}
  396|  4.77k|	else
  397|  4.77k|	{
  398|       |	  /* Ouch. Four cases... for optimization. */
  399|  4.77k|	  if (scalar != 1.0f)
  ------------------
  |  Branch (399:8): [True: 1.28k, False: 3.48k]
  ------------------
  400|  1.28k|	  {
  401|  1.28k|	    if (apply_to_all)
  ------------------
  |  Branch (401:10): [True: 275, False: 1.00k]
  ------------------
  402|  1.75k|	      for (unsigned int i = 0; i < num_deltas; i++)
  ------------------
  |  Branch (402:33): [True: 1.47k, False: 275]
  ------------------
  403|  1.47k|	      {
  404|  1.47k|		unsigned int pt_index = i;
  405|  1.47k|		auto &delta = deltas.arrayZ[pt_index];
  406|  1.47k|		delta.x += x_deltas.arrayZ[i] * scalar;
  407|  1.47k|		delta.y += y_deltas.arrayZ[i] * scalar;
  408|  1.47k|	      }
  409|  1.00k|	    else
  410|  2.84k|	      for (unsigned int i = 0; i < num_deltas; i++)
  ------------------
  |  Branch (410:33): [True: 1.83k, False: 1.00k]
  ------------------
  411|  1.83k|	      {
  412|  1.83k|		unsigned int pt_index = indices[i];
  413|  1.83k|		if (unlikely (pt_index >= deltas.length)) continue;
  ------------------
  |  |  259|  1.83k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 590, False: 1.24k]
  |  |  ------------------
  ------------------
  414|  1.24k|		auto &delta = deltas.arrayZ[pt_index];
  415|  1.24k|		delta.flag = 1;	/* this point is referenced, i.e., explicit deltas specified */
  416|  1.24k|		delta.x += x_deltas.arrayZ[i] * scalar;
  417|  1.24k|		delta.y += y_deltas.arrayZ[i] * scalar;
  418|  1.24k|	      }
  419|  1.28k|	  }
  420|  3.48k|	  else
  421|  3.48k|	  {
  422|  3.48k|	    if (apply_to_all)
  ------------------
  |  Branch (422:10): [True: 1.23k, False: 2.25k]
  ------------------
  423|  8.93k|	      for (unsigned int i = 0; i < num_deltas; i++)
  ------------------
  |  Branch (423:33): [True: 7.69k, False: 1.23k]
  ------------------
  424|  7.69k|	      {
  425|  7.69k|		unsigned int pt_index = i;
  426|  7.69k|		auto &delta = deltas.arrayZ[pt_index];
  427|  7.69k|		delta.x += x_deltas.arrayZ[i];
  428|  7.69k|		delta.y += y_deltas.arrayZ[i];
  429|  7.69k|	      }
  430|  2.25k|	    else
  431|  6.77k|	      for (unsigned int i = 0; i < num_deltas; i++)
  ------------------
  |  Branch (431:33): [True: 4.52k, False: 2.25k]
  ------------------
  432|  4.52k|	      {
  433|  4.52k|		unsigned int pt_index = indices[i];
  434|  4.52k|		if (unlikely (pt_index >= deltas.length)) continue;
  ------------------
  |  |  259|  4.52k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.49k, False: 3.02k]
  |  |  ------------------
  ------------------
  435|  3.02k|		auto &delta = deltas.arrayZ[pt_index];
  436|  3.02k|		delta.flag = 1;	/* this point is referenced, i.e., explicit deltas specified */
  437|  3.02k|		delta.x += x_deltas.arrayZ[i];
  438|  3.02k|		delta.y += y_deltas.arrayZ[i];
  439|  3.02k|	      }
  440|  3.48k|	  }
  441|  4.77k|	}
  442|       |
  443|       |	/* infer deltas for unreferenced points */
  444|  4.77k|	if (!apply_to_all)
  ------------------
  |  Branch (444:6): [True: 3.25k, False: 1.51k]
  ------------------
  445|  3.25k|	{
  446|  3.25k|	  if (!end_points)
  ------------------
  |  Branch (446:8): [True: 3.11k, False: 148]
  ------------------
  447|  3.11k|	  {
  448|  3.11k|	    unsigned count = points.length;
  449|  1.36M|	    for (unsigned i = 0; i < count; ++i)
  ------------------
  |  Branch (449:27): [True: 1.36M, False: 3.11k]
  ------------------
  450|  1.36M|	      if (points.arrayZ[i].is_end_point)
  ------------------
  |  Branch (450:12): [True: 1.15k, False: 1.36M]
  ------------------
  451|  1.15k|		end_points.push (i);
  452|  3.11k|	    if (unlikely (end_points.in_error ())) return false;
  ------------------
  |  |  259|  3.11k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20, False: 3.09k]
  |  |  ------------------
  ------------------
  453|  3.11k|	  }
  454|       |
  455|  3.23k|	  unsigned start_point = 0;
  456|  3.23k|	  for (unsigned end_point : end_points)
  ------------------
  |  Branch (456:28): [True: 1.26k, False: 3.23k]
  ------------------
  457|  1.26k|	  {
  458|       |	    /* Check the number of unreferenced points in a contour. If no unref points or no ref points, nothing to do. */
  459|  1.26k|	    unsigned unref_count = 0;
  460|  14.2k|	    for (unsigned i = start_point; i < end_point + 1; i++)
  ------------------
  |  Branch (460:37): [True: 13.0k, False: 1.26k]
  ------------------
  461|  13.0k|	      unref_count += deltas.arrayZ[i].flag;
  462|  1.26k|	    unref_count = (end_point - start_point + 1) - unref_count;
  463|       |
  464|  1.26k|	    unsigned j = start_point;
  465|  1.26k|	    if (unref_count == 0 || unref_count > end_point - start_point)
  ------------------
  |  Branch (465:10): [True: 26, False: 1.23k]
  |  Branch (465:30): [True: 271, False: 968]
  ------------------
  466|    297|	      goto no_more_gaps;
  467|       |
  468|    968|	    for (;;)
  469|  1.15k|	    {
  470|       |	      /* Locate the next gap of unreferenced points between two referenced points prev and next.
  471|       |	       * Note that a gap may wrap around at left (start_point) and/or at right (end_point).
  472|       |	       */
  473|  1.15k|	      unsigned int prev, next, i;
  474|  1.15k|	      for (;;)
  475|  3.12k|	      {
  476|  3.12k|		i = j;
  477|  3.12k|		j = next_index (i, start_point, end_point);
  478|  3.12k|		if (deltas.arrayZ[i].flag && !deltas.arrayZ[j].flag) break;
  ------------------
  |  Branch (478:7): [True: 1.23k, False: 1.88k]
  |  Branch (478:32): [True: 1.15k, False: 77]
  ------------------
  479|  3.12k|	      }
  480|  1.15k|	      prev = j = i;
  481|  1.15k|	      for (;;)
  482|  12.0k|	      {
  483|  12.0k|		i = j;
  484|  12.0k|		j = next_index (i, start_point, end_point);
  485|  12.0k|		if (!deltas.arrayZ[i].flag && deltas.arrayZ[j].flag) break;
  ------------------
  |  Branch (485:7): [True: 10.8k, False: 1.15k]
  |  Branch (485:33): [True: 1.15k, False: 9.68k]
  ------------------
  486|  12.0k|	      }
  487|  1.15k|	      next = j;
  488|       |	      /* Infer deltas for all unref points in the gap between prev and next */
  489|  1.15k|	      i = prev;
  490|  1.15k|	      for (;;)
  491|  11.0k|	      {
  492|  11.0k|		i = next_index (i, start_point, end_point);
  493|  11.0k|		if (i == next) break;
  ------------------
  |  Branch (493:7): [True: 191, False: 10.8k]
  ------------------
  494|  10.8k|		deltas.arrayZ[i].x = infer_delta (orig_points, deltas, i, prev, next, &contour_point_t::x);
  495|  10.8k|		deltas.arrayZ[i].y = infer_delta (orig_points, deltas, i, prev, next, &contour_point_t::y);
  496|  10.8k|		if (--unref_count == 0) goto no_more_gaps;
  ------------------
  |  Branch (496:7): [True: 968, False: 9.87k]
  ------------------
  497|  10.8k|	      }
  498|  1.15k|	    }
  499|  1.26k|	  no_more_gaps:
  500|  1.26k|	    start_point = end_point + 1;
  501|  1.26k|	  }
  502|  3.23k|	}
  503|       |
  504|  4.75k|	flush = true;
  505|       |
  506|  77.2k|      } while (iterator.move_to_next ());
  ------------------
  |  Branch (506:16): [True: 72.5k, False: 4.70k]
  ------------------
  507|       |
  508|  4.70k|      if (flush)
  ------------------
  |  Branch (508:11): [True: 3.05k, False: 1.64k]
  ------------------
  509|  3.05k|      {
  510|  3.05k|        unsigned count = points.length;
  511|  35.7k|	for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (511:27): [True: 32.6k, False: 3.05k]
  ------------------
  512|  32.6k|	  points.arrayZ[i].translate (deltas.arrayZ[i]);
  513|  3.05k|      }
  514|       |
  515|  4.70k|      return true;
  516|  12.2k|    }
_ZNK2OT4gvar24get_glyph_var_data_bytesEP9hb_blob_tjj:
  204|  19.1k|  {
  205|  19.1k|    unsigned start_offset = get_offset (glyph_count, glyph);
  206|  19.1k|    unsigned end_offset = get_offset (glyph_count, glyph+1);
  207|  19.1k|    if (unlikely (end_offset < start_offset)) return hb_bytes_t ();
  ------------------
  |  |  259|  19.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.21k, False: 16.8k]
  |  |  ------------------
  ------------------
  208|  16.8k|    unsigned length = end_offset - start_offset;
  209|  16.8k|    hb_bytes_t var_data = blob->as_bytes ().sub_array (((unsigned) dataZ) + start_offset, length);
  210|  16.8k|    return likely (var_data.length >= GlyphVariationData::min_size) ? var_data : hb_bytes_t ();
  ------------------
  |  |  258|  16.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 15.1k, False: 1.79k]
  |  |  ------------------
  ------------------
  211|  19.1k|  }
_ZNK2OT4gvar10get_offsetEjj:
  216|  38.2k|  {
  217|  38.2k|    if (unlikely (i > glyph_count)) return 0;
  ------------------
  |  |  259|  38.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 38.2k]
  |  |  ------------------
  ------------------
  218|  38.2k|    _hb_compiler_memory_r_barrier ();
  ------------------
  |  |  121|  38.2k|#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory")
  ------------------
  219|  38.2k|    return is_long_offset () ? get_long_offset_array ()[i] : get_short_offset_array ()[i] * 2;
  ------------------
  |  Branch (219:12): [True: 13.9k, False: 24.2k]
  ------------------
  220|  38.2k|  }
_ZNK2OT4gvar14is_long_offsetEv:
  213|  38.7k|  bool is_long_offset () const { return flags & 1; }
_ZNK2OT4gvar21get_long_offset_arrayEv:
  222|  14.0k|  const HBUINT32 * get_long_offset_array () const { return (const HBUINT32 *) &offsetZ; }
_ZNK2OT4gvar22get_short_offset_arrayEv:
  223|  24.6k|  const HBUINT16 *get_short_offset_array () const { return (const HBUINT16 *) &offsetZ; }
_ZN2OT15contour_point_t9translateERKS0_:
   53|  2.71M|  void translate (const contour_point_t &p) { x += p.x; y += p.y; }
_ZN2OT4gvar13accelerator_t10next_indexEjjj:
  289|  26.1k|    { return (i >= end) ? start : (i + 1); }
  ------------------
  |  Branch (289:14): [True: 2.03k, False: 24.1k]
  ------------------
_ZN2OT4gvar13accelerator_t11infer_deltaE10hb_array_tINS_15contour_point_tEES4_jjjMS3_f:
  269|  21.6k|    {
  270|  21.6k|      float target_val = points.arrayZ[target].*m;
  271|  21.6k|      float prev_val = points.arrayZ[prev].*m;
  272|  21.6k|      float next_val = points.arrayZ[next].*m;
  273|  21.6k|      float prev_delta =  deltas.arrayZ[prev].*m;
  274|  21.6k|      float next_delta =  deltas.arrayZ[next].*m;
  275|       |
  276|  21.6k|      if (prev_val == next_val)
  ------------------
  |  Branch (276:11): [True: 15.9k, False: 5.73k]
  ------------------
  277|  15.9k|	return (prev_delta == next_delta) ? prev_delta : 0.f;
  ------------------
  |  Branch (277:9): [True: 14.4k, False: 1.52k]
  ------------------
  278|  5.73k|      else if (target_val <= hb_min (prev_val, next_val))
  ------------------
  |  Branch (278:16): [True: 1.94k, False: 3.79k]
  ------------------
  279|  1.94k|	return (prev_val < next_val) ? prev_delta : next_delta;
  ------------------
  |  Branch (279:9): [True: 901, False: 1.04k]
  ------------------
  280|  3.79k|      else if (target_val >= hb_max (prev_val, next_val))
  ------------------
  |  Branch (280:16): [True: 2.15k, False: 1.63k]
  ------------------
  281|  2.15k|	return (prev_val > next_val) ? prev_delta : next_delta;
  ------------------
  |  Branch (281:9): [True: 1.13k, False: 1.02k]
  ------------------
  282|       |
  283|       |      /* linear interpolation */
  284|  1.63k|      float r = (target_val - prev_val) / (next_val - prev_val);
  285|  1.63k|      return prev_delta + r * (next_delta - prev_delta);
  286|  21.6k|    }
_ZN2OT15contour_point_t9transformERA4_Kf:
   48|  3.03M|  {
   49|  3.03M|    float x_ = x * matrix[0] + y * matrix[2];
   50|  3.03M|	  y  = x * matrix[1] + y * matrix[3];
   51|  3.03M|    x  = x_;
   52|  3.03M|  }
_ZN2OT15contour_point_t4initEffb:
   45|   235k|  { flag = 0; x = x_; y = y_; is_end_point = is_end_point_; }
_ZN2OT22contour_point_vector_t6extendERK10hb_array_tINS_15contour_point_tEE:
   65|   149k|  {
   66|   149k|    unsigned int old_len = length;
   67|   149k|    if (unlikely (!resize (old_len + a.length, false)))
  ------------------
  |  |  259|   149k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 205, False: 149k]
  |  |  ------------------
  ------------------
   68|    205|      return;
   69|   149k|    auto arrayZ = this->arrayZ + old_len;
   70|   149k|    unsigned count = a.length;
   71|   149k|    hb_memcpy (arrayZ, a.arrayZ, count * sizeof (arrayZ[0]));
   72|   149k|  }
_ZN2OT18gvar_accelerator_tC2EP9hb_face_t:
  555|  32.1k|  gvar_accelerator_t (hb_face_t *face) : gvar::accelerator_t (face) {}
_ZN2OT4gvar13accelerator_tC2EP9hb_face_t:
  229|  32.1k|    {
  230|  32.1k|      table = hb_sanitize_context_t ().reference_table<gvar> (face);
  231|       |      /* If sanitize failed, set glyphCount to 0. */
  232|  32.1k|      glyphCount = table->version.to_int () ? face->get_num_glyphs () : 0;
  ------------------
  |  Branch (232:20): [True: 522, False: 31.6k]
  ------------------
  233|       |
  234|       |      /* For shared tuples that only have one axis active, shared the index of
  235|       |       * that axis as a cache. This will speed up caclulate_scalar() a lot
  236|       |       * for fonts with lots of axes and many "monovar" tuples. */
  237|  32.1k|      hb_array_t<const F2DOT14> shared_tuples = (table+table->sharedTuples).as_array (table->sharedTupleCount * table->axisCount);
  238|  32.1k|      unsigned count = table->sharedTupleCount;
  239|  32.1k|      if (unlikely (!shared_tuple_active_idx.resize (count, false))) return;
  ------------------
  |  |  259|  32.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 7, False: 32.1k]
  |  |  ------------------
  ------------------
  240|  32.1k|      unsigned axis_count = table->axisCount;
  241|   136k|      for (unsigned i = 0; i < count; i++)
  ------------------
  |  Branch (241:28): [True: 104k, False: 32.1k]
  ------------------
  242|   104k|      {
  243|   104k|	hb_array_t<const F2DOT14> tuple = shared_tuples.sub_array (axis_count * i, axis_count);
  244|   104k|	int idx = -1;
  245|   107k|	for (unsigned j = 0; j < axis_count; j++)
  ------------------
  |  Branch (245:23): [True: 3.72k, False: 103k]
  ------------------
  246|  3.72k|	{
  247|  3.72k|	  const F2DOT14 &peak = tuple.arrayZ[j];
  248|  3.72k|	  if (peak.to_int () != 0)
  ------------------
  |  Branch (248:8): [True: 2.82k, False: 899]
  ------------------
  249|  2.82k|	  {
  250|  2.82k|	    if (idx != -1)
  ------------------
  |  Branch (250:10): [True: 1.05k, False: 1.77k]
  ------------------
  251|  1.05k|	    {
  252|  1.05k|	      idx = -1;
  253|  1.05k|	      break;
  254|  1.05k|	    }
  255|  1.77k|	    idx = j;
  256|  1.77k|	  }
  257|  3.72k|	}
  258|   104k|	shared_tuple_active_idx.arrayZ[i] = idx;
  259|   104k|      }
  260|  32.1k|    }
_ZNK2OT4gvar8sanitizeEP21hb_sanitize_context_t:
   94|    813|  { return sanitize_shallow (c); }
_ZNK2OT4gvar16sanitize_shallowEP21hb_sanitize_context_t:
   83|    813|  {
   84|    813|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    813|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   85|    813|    return_trace (c->check_struct (this) && (version.major == 1) &&
  ------------------
  |  |  349|  5.47k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    813|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 803, False: 10]
  |  |  |  Branch (349:45): [True: 585, False: 218]
  |  |  |  Branch (349:45): [True: 548, False: 37]
  |  |  |  Branch (349:45): [True: 99, False: 449]
  |  |  |  Branch (349:45): [True: 522, False: 26]
  |  |  ------------------
  ------------------
   86|    813|		  sharedTuples.sanitize (c, this, axisCount * sharedTupleCount) &&
   87|    813|		  (is_long_offset () ?
   88|    813|		     c->check_array (get_long_offset_array (), c->get_num_glyphs () + 1) :
   89|    813|		     c->check_array (get_short_offset_array (), c->get_num_glyphs () + 1)));
   90|    813|  }
_ZN2OT4gvar13accelerator_tD2Ev:
  261|  32.1k|    ~accelerator_t () { table.destroy (); }

_ZNK2OT8HVARVVAR8sanitizeEP21hb_sanitize_context_t:
  261|  1.20k|  {
  262|  1.20k|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|  1.20k|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  263|  1.20k|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  10.8k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|  1.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 1.20k, False: 3]
  |  |  |  Branch (349:45): [True: 1.15k, False: 52]
  |  |  |  Branch (349:45): [True: 861, False: 291]
  |  |  |  Branch (349:45): [True: 805, False: 56]
  |  |  |  Branch (349:45): [True: 754, False: 51]
  |  |  |  Branch (349:45): [True: 720, False: 34]
  |  |  ------------------
  ------------------
  264|  1.20k|		  likely (version.major == 1) &&
  265|  1.20k|		  varStore.sanitize (c, this) &&
  266|  1.20k|		  advMap.sanitize (c, this) &&
  267|  1.20k|		  lsbMap.sanitize (c, this) &&
  268|  1.20k|		  rsbMap.sanitize (c, this));
  269|  1.20k|  }
_ZNK2OT4VVAR8sanitizeEP21hb_sanitize_context_t:
  372|    438|  {
  373|    438|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    438|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  374|    438|    return_trace (static_cast<const HVARVVAR *> (this)->sanitize (c) &&
  ------------------
  |  |  349|    695|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    438|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 257, False: 181]
  |  |  |  Branch (349:45): [True: 231, False: 26]
  |  |  ------------------
  ------------------
  375|    438|		  vorgMap.sanitize (c, this));
  376|    438|  }
_ZNK2OT8HVARVVAR26get_advance_delta_unscaledEjPKijPf:
  331|  1.12k|  {
  332|  1.12k|    uint32_t varidx = (this+advMap).map (glyph);
  333|  1.12k|    return (this+varStore).get_delta (varidx,
  334|  1.12k|				      coords, coord_count,
  335|  1.12k|				      store_cache);
  336|  1.12k|  }
_ZNK2OT4VVAR23get_vorg_delta_unscaledEjPKijPf:
  403|      4|  {
  404|      4|    if (!vorgMap) return false;
  ------------------
  |  Branch (404:9): [True: 1, False: 3]
  ------------------
  405|      3|    uint32_t varidx = (this+vorgMap).map (glyph);
  406|      3|    *delta = (this+varStore).get_delta (varidx, coords, coord_count);
  407|      3|    return true;
  408|      4|  }

_ZNK2OT4MVAR8sanitizeEP21hb_sanitize_context_t:
   64|    448|  {
   65|    448|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|    448|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
   66|    448|    return_trace (version.sanitize (c) &&
  ------------------
  |  |  349|  4.13k|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|    448|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 447, False: 1]
  |  |  |  Branch (349:45): [True: 392, False: 55]
  |  |  |  Branch (349:45): [True: 391, False: 1]
  |  |  |  Branch (349:45): [True: 386, False: 5]
  |  |  |  Branch (349:45): [True: 276, False: 110]
  |  |  |  Branch (349:45): [True: 226, False: 50]
  |  |  ------------------
  ------------------
   67|    448|		  likely (version.major == 1) &&
   68|    448|		  c->check_struct (this) &&
   69|    448|		  valueRecordSize >= VariationValueRecord::static_size &&
   70|    448|		  varStore.sanitize (c, this) &&
   71|    448|		  c->check_range (valuesZ.arrayZ,
   72|    448|				  valueRecordCount,
   73|    448|				  valueRecordSize));
   74|    448|  }
_ZNK2OT4MVAR7get_varEjPKij:
   78|   107k|  {
   79|   107k|    const VariationValueRecord *record;
   80|   107k|    record = (VariationValueRecord *) hb_bsearch (tag,
   81|   107k|						  (const VariationValueRecord *)
   82|   107k|						    (const HBUINT8 *) valuesZ,
   83|   107k|						  valueRecordCount, valueRecordSize,
   84|   107k|						  tag_compare);
   85|   107k|    if (!record)
  ------------------
  |  Branch (85:9): [True: 107k, False: 128]
  ------------------
   86|   107k|      return 0.;
   87|       |
   88|    128|    return (this+varStore).get_delta (record->varIdx, coords, coord_count);
   89|   107k|  }
_ZN2OT4MVAR11tag_compareEPKvS2_:
   93|    960|  {
   94|    960|    const hb_tag_t *a = (const hb_tag_t *) pa;
   95|    960|    const Tag *b = (const Tag *) pb;
   96|    960|    return b->cmp (*a);
   97|    960|  }

hb_ot_var_get_axis_count:
   81|  99.9k|{
   82|  99.9k|  return face->table.fvar->get_axis_count ();
   83|  99.9k|}
hb_ot_var_get_axis_infos:
  152|  33.3k|{
  153|  33.3k|  return face->table.fvar->get_axis_infos (start_offset, axes_count, axes_array);
  154|  33.3k|}
hb_ot_var_normalize_variations:
  279|  33.3k|{
  280|  33.3k|  for (unsigned int i = 0; i < coords_length; i++)
  ------------------
  |  Branch (280:28): [True: 0, False: 33.3k]
  ------------------
  281|      0|    coords[i] = 0;
  282|       |
  283|  33.3k|  const OT::fvar &fvar = *face->table.fvar;
  284|  33.3k|  for (unsigned int i = 0; i < variations_length; i++)
  ------------------
  |  Branch (284:28): [True: 0, False: 33.3k]
  ------------------
  285|      0|  {
  286|      0|    hb_ot_var_axis_info_t info;
  287|      0|    if (hb_ot_var_find_axis_info (face, variations[i].tag, &info) &&
  ------------------
  |  Branch (287:9): [True: 0, False: 0]
  ------------------
  288|      0|	info.axis_index < coords_length)
  ------------------
  |  Branch (288:2): [True: 0, False: 0]
  ------------------
  289|      0|      coords[info.axis_index] = fvar.normalize_axis_value (info.axis_index, variations[i].value);
  290|      0|  }
  291|       |
  292|  33.3k|  face->table.avar->map_coords (coords, coords_length);
  293|  33.3k|}
hb_ot_var_normalize_coords:
  319|  33.3k|{
  320|  33.3k|  const OT::fvar &fvar = *face->table.fvar;
  321|  33.3k|  for (unsigned int i = 0; i < coords_length; i++)
  ------------------
  |  Branch (321:28): [True: 0, False: 33.3k]
  ------------------
  322|      0|    normalized_coords[i] = fvar.normalize_axis_value (i, design_coords[i]);
  323|       |
  324|  33.3k|  face->table.avar->map_coords (normalized_coords, coords_length);
  325|  33.3k|}

_ZNK2OT4VORG8sanitizeEP21hb_sanitize_context_t:
  117|     52|  {
  118|     52|    TRACE_SANITIZE (this);
  ------------------
  |  |  422|     52|#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
  ------------------
  119|     52|    return_trace (c->check_struct (this) &&
  ------------------
  |  |  349|    196|#define return_trace(RET) return trace.ret (RET, HB_FUNC, __LINE__)
  |  |  ------------------
  |  |  |  |  306|     52|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (349:45): [True: 51, False: 1]
  |  |  |  Branch (349:45): [True: 41, False: 10]
  |  |  |  Branch (349:45): [True: 38, False: 3]
  |  |  ------------------
  ------------------
  120|     52|		  version.major == 1 &&
  121|     52|		  vertYOrigins.sanitize (c));
  122|     52|  }
_ZNK2OT4VORG8has_dataEv:
   62|  33.2k|  bool has_data () const { return version.to_int (); }
_ZNK2OT4VORG12get_y_originEj:
   65|     38|  {
   66|     38|    unsigned int i;
   67|     38|    if (!vertYOrigins.bfind (glyph, &i))
  ------------------
  |  Branch (67:9): [True: 34, False: 4]
  ------------------
   68|     34|      return defaultVertOriginY;
   69|      4|    return vertYOrigins[i].vertOriginY;
   70|     38|  }
_ZNK2OT16VertOriginMetric3cmpEj:
   42|    168|  int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }

_Z26hb_paint_extents_get_funcsv:
  325|  11.1k|{
  326|  11.1k|  return static_paint_extents_funcs.get_unconst ();
  327|  11.1k|}
_ZN36hb_paint_extents_funcs_lazy_loader_t6createEv:
  293|      1|  {
  294|      1|    hb_paint_funcs_t *funcs = hb_paint_funcs_create ();
  295|       |
  296|      1|    hb_paint_funcs_set_push_transform_func (funcs, hb_paint_extents_push_transform, nullptr, nullptr);
  297|      1|    hb_paint_funcs_set_pop_transform_func (funcs, hb_paint_extents_pop_transform, nullptr, nullptr);
  298|      1|    hb_paint_funcs_set_push_clip_glyph_func (funcs, hb_paint_extents_push_clip_glyph, nullptr, nullptr);
  299|      1|    hb_paint_funcs_set_push_clip_rectangle_func (funcs, hb_paint_extents_push_clip_rectangle, nullptr, nullptr);
  300|      1|    hb_paint_funcs_set_pop_clip_func (funcs, hb_paint_extents_pop_clip, nullptr, nullptr);
  301|      1|    hb_paint_funcs_set_push_group_func (funcs, hb_paint_extents_push_group, nullptr, nullptr);
  302|      1|    hb_paint_funcs_set_pop_group_func (funcs, hb_paint_extents_pop_group, nullptr, nullptr);
  303|      1|    hb_paint_funcs_set_color_func (funcs, hb_paint_extents_paint_color, nullptr, nullptr);
  304|      1|    hb_paint_funcs_set_image_func (funcs, hb_paint_extents_paint_image, nullptr, nullptr);
  305|      1|    hb_paint_funcs_set_linear_gradient_func (funcs, hb_paint_extents_paint_linear_gradient, nullptr, nullptr);
  306|      1|    hb_paint_funcs_set_radial_gradient_func (funcs, hb_paint_extents_paint_radial_gradient, nullptr, nullptr);
  307|      1|    hb_paint_funcs_set_sweep_gradient_func (funcs, hb_paint_extents_paint_sweep_gradient, nullptr, nullptr);
  308|       |
  309|      1|    hb_paint_funcs_make_immutable (funcs);
  310|       |
  311|      1|    hb_atexit (free_static_paint_extents_funcs);
  ------------------
  |  |  466|      1|#    define hb_atexit atexit
  ------------------
  312|       |
  313|      1|    return funcs;
  314|      1|  }
hb-paint-extents.cc:_ZL31hb_paint_extents_push_transformP16hb_paint_funcs_tPvffffffS1_:
   50|   728k|{
   51|   728k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
   52|       |
   53|   728k|  c->push_transform (hb_transform_t {xx, yx, xy, yy, dx, dy});
   54|   728k|}
hb-paint-extents.cc:_ZL30hb_paint_extents_pop_transformP16hb_paint_funcs_tPvS1_:
   60|   728k|{
   61|   728k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
   62|       |
   63|   728k|  c->pop_transform ();
   64|   728k|}
hb-paint-extents.cc:_ZL32hb_paint_extents_push_clip_glyphP16hb_paint_funcs_tPvjP9hb_font_tS1_:
  159|   106k|{
  160|   106k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  161|       |
  162|   106k|  hb_extents_t extents;
  163|   106k|  hb_draw_funcs_t *draw_extent_funcs = hb_draw_extents_get_funcs ();
  164|   106k|  hb_font_draw_glyph (font, glyph, draw_extent_funcs, &extents);
  165|   106k|  c->push_clip (extents);
  166|   106k|}
hb-paint-extents.cc:_ZL25hb_draw_extents_get_funcsv:
  149|   106k|{
  150|   106k|  return static_draw_extents_funcs.get_unconst ();
  151|   106k|}
_ZN35hb_draw_extents_funcs_lazy_loader_t6createEv:
  125|      1|  {
  126|      1|    hb_draw_funcs_t *funcs = hb_draw_funcs_create ();
  127|       |
  128|      1|    hb_draw_funcs_set_move_to_func (funcs, hb_draw_extents_move_to, nullptr, nullptr);
  129|      1|    hb_draw_funcs_set_line_to_func (funcs, hb_draw_extents_line_to, nullptr, nullptr);
  130|      1|    hb_draw_funcs_set_quadratic_to_func (funcs, hb_draw_extents_quadratic_to, nullptr, nullptr);
  131|      1|    hb_draw_funcs_set_cubic_to_func (funcs, hb_draw_extents_cubic_to, nullptr, nullptr);
  132|       |
  133|      1|    hb_draw_funcs_make_immutable (funcs);
  134|       |
  135|      1|    hb_atexit (free_static_draw_extents_funcs);
  ------------------
  |  |  466|      1|#    define hb_atexit atexit
  ------------------
  136|       |
  137|      1|    return funcs;
  138|      1|  }
hb-paint-extents.cc:_ZL23hb_draw_extents_move_toP15hb_draw_funcs_tPvP15hb_draw_state_tffS1_:
   72|  22.5k|{
   73|  22.5k|  hb_extents_t *extents = (hb_extents_t *) data;
   74|       |
   75|  22.5k|  extents->add_point (to_x, to_y);
   76|  22.5k|}
hb-paint-extents.cc:_ZL23hb_draw_extents_line_toP15hb_draw_funcs_tPvP15hb_draw_state_tffS1_:
   84|   105k|{
   85|   105k|  hb_extents_t *extents = (hb_extents_t *) data;
   86|       |
   87|   105k|  extents->add_point (to_x, to_y);
   88|   105k|}
hb-paint-extents.cc:_ZL28hb_draw_extents_quadratic_toP15hb_draw_funcs_tPvP15hb_draw_state_tffffS1_:
   97|  55.7k|{
   98|  55.7k|  hb_extents_t *extents = (hb_extents_t *) data;
   99|       |
  100|  55.7k|  extents->add_point (control_x, control_y);
  101|  55.7k|  extents->add_point (to_x, to_y);
  102|  55.7k|}
hb-paint-extents.cc:_ZL24hb_draw_extents_cubic_toP15hb_draw_funcs_tPvP15hb_draw_state_tffffffS1_:
  112|  48.2k|{
  113|  48.2k|  hb_extents_t *extents = (hb_extents_t *) data;
  114|       |
  115|  48.2k|  extents->add_point (control1_x, control1_y);
  116|  48.2k|  extents->add_point (control2_x, control2_y);
  117|  48.2k|  extents->add_point (to_x, to_y);
  118|  48.2k|}
hb-paint-extents.cc:_ZL30free_static_draw_extents_funcsv:
  143|      1|{
  144|      1|  static_draw_extents_funcs.free_instance ();
  145|      1|}
hb-paint-extents.cc:_ZL36hb_paint_extents_push_clip_rectangleP16hb_paint_funcs_tPvffffS1_:
  173|  5.70k|{
  174|  5.70k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  175|       |
  176|  5.70k|  hb_extents_t extents = {xmin, ymin, xmax, ymax};
  177|  5.70k|  c->push_clip (extents);
  178|  5.70k|}
hb-paint-extents.cc:_ZL25hb_paint_extents_pop_clipP16hb_paint_funcs_tPvS1_:
  184|   112k|{
  185|   112k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  186|       |
  187|   112k|  c->pop_clip ();
  188|   112k|}
hb-paint-extents.cc:_ZL27hb_paint_extents_push_groupP16hb_paint_funcs_tPvS1_:
  194|  1.60M|{
  195|  1.60M|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  196|       |
  197|  1.60M|  c->push_group ();
  198|  1.60M|}
hb-paint-extents.cc:_ZL26hb_paint_extents_pop_groupP16hb_paint_funcs_tPv25hb_paint_composite_mode_tS1_:
  205|  1.60M|{
  206|  1.60M|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  207|       |
  208|  1.60M|  c->pop_group (mode);
  209|  1.60M|}
hb-paint-extents.cc:_ZL28hb_paint_extents_paint_colorP16hb_paint_funcs_tPvijS1_:
  241|  48.3k|{
  242|  48.3k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  243|       |
  244|  48.3k|  c->paint ();
  245|  48.3k|}
hb-paint-extents.cc:_ZL38hb_paint_extents_paint_linear_gradientP16hb_paint_funcs_tPvP15hb_color_line_tffffffS1_:
  255|  29.5k|{
  256|  29.5k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  257|       |
  258|  29.5k|  c->paint ();
  259|  29.5k|}
hb-paint-extents.cc:_ZL38hb_paint_extents_paint_radial_gradientP16hb_paint_funcs_tPvP15hb_color_line_tffffffS1_:
  268|  23.4k|{
  269|  23.4k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  270|       |
  271|  23.4k|  c->paint ();
  272|  23.4k|}
hb-paint-extents.cc:_ZL37hb_paint_extents_paint_sweep_gradientP16hb_paint_funcs_tPvP15hb_color_line_tffffS1_:
  282|  25.9k|{
  283|  25.9k|  hb_paint_extents_context_t *c = (hb_paint_extents_context_t *) paint_data;
  284|       |
  285|  25.9k|  c->paint ();
  286|  25.9k|}
hb-paint-extents.cc:_ZL31free_static_paint_extents_funcsv:
  319|      1|{
  320|      1|  static_paint_extents_funcs.free_instance ();
  321|      1|}

_ZN12hb_extents_tC2Ev:
   34|  1.84M|  hb_extents_t () {}
_ZN12hb_extents_tC2Effff:
   36|  5.70k|    xmin (xmin), ymin (ymin), xmax (xmax), ymax (ymax) {}
_ZNK12hb_extents_t8is_emptyEv:
   38|   116k|  bool is_empty () const { return xmin >= xmax || ymin >= ymax; }
  ------------------
  |  Branch (38:35): [True: 21.5k, False: 94.6k]
  |  Branch (38:51): [True: 2.76k, False: 91.8k]
  ------------------
_ZNK12hb_extents_t7is_voidEv:
   39|   840k|  bool is_void () const { return xmin > xmax; }
_ZN12hb_extents_t6union_ERKS_:
   42|  32.4k|  {
   43|  32.4k|    xmin = hb_min (xmin, o.xmin);
   44|  32.4k|    ymin = hb_min (ymin, o.ymin);
   45|  32.4k|    xmax = hb_max (xmax, o.xmax);
   46|  32.4k|    ymax = hb_max (ymax, o.ymax);
   47|  32.4k|  }
_ZN12hb_extents_t9intersectERKS_:
   50|  3.73k|  {
   51|  3.73k|    xmin = hb_max (xmin, o.xmin);
   52|  3.73k|    ymin = hb_max (ymin, o.ymin);
   53|  3.73k|    xmax = hb_min (xmax, o.xmax);
   54|  3.73k|    ymax = hb_min (ymax, o.ymax);
   55|  3.73k|  }
_ZN12hb_extents_t9add_pointEff:
   59|   833k|  {
   60|   833k|    if (unlikely (is_void ()))
  ------------------
  |  |  259|   833k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 117k, False: 716k]
  |  |  ------------------
  ------------------
   61|   117k|    {
   62|   117k|      xmin = xmax = x;
   63|   117k|      ymin = ymax = y;
   64|   117k|    }
   65|   716k|    else
   66|   716k|    {
   67|   716k|      xmin = hb_min (xmin, x);
   68|   716k|      ymin = hb_min (ymin, y);
   69|   716k|      xmax = hb_max (xmax, x);
   70|   716k|      ymax = hb_max (ymax, y);
   71|   716k|    }
   72|   833k|  }
_ZN14hb_transform_tC2Ev:
   82|   740k|  hb_transform_t () {}
_ZN14hb_transform_tC2Effffff:
   86|   728k|    xx (xx), yx (yx), xy (xy), yy (yy), x0 (x0), y0 (y0) {}
_ZN14hb_transform_t8multiplyERKS_:
   89|   728k|  {
   90|       |    /* Copied from cairo, with "o" being "a" there and "this" being "b" there. */
   91|   728k|    hb_transform_t r;
   92|       |
   93|   728k|    r.xx = o.xx * xx + o.yx * xy;
   94|   728k|    r.yx = o.xx * yx + o.yx * yy;
   95|       |
   96|   728k|    r.xy = o.xy * xx + o.yy * xy;
   97|   728k|    r.yy = o.xy * yx + o.yy * yy;
   98|       |
   99|   728k|    r.x0 = o.x0 * xx + o.y0 * xy + x0;
  100|   728k|    r.y0 = o.x0 * yx + o.y0 * yy + y0;
  101|       |
  102|   728k|    *this = r;
  103|   728k|  }
_ZNK14hb_transform_t18transform_distanceERfS0_:
  106|   449k|  {
  107|   449k|    float new_x = xx * dx + xy * dy;
  108|   449k|    float new_y = yx * dx + yy * dy;
  109|   449k|    dx = new_x;
  110|   449k|    dy = new_y;
  111|   449k|  }
_ZNK14hb_transform_t15transform_pointERfS0_:
  114|   449k|  {
  115|   449k|    transform_distance (x, y);
  116|   449k|    x += x0;
  117|   449k|    y += y0;
  118|   449k|  }
_ZNK14hb_transform_t17transform_extentsER12hb_extents_t:
  121|   112k|  {
  122|   112k|    float quad_x[4], quad_y[4];
  123|       |
  124|   112k|    quad_x[0] = extents.xmin;
  125|   112k|    quad_y[0] = extents.ymin;
  126|   112k|    quad_x[1] = extents.xmin;
  127|   112k|    quad_y[1] = extents.ymax;
  128|   112k|    quad_x[2] = extents.xmax;
  129|   112k|    quad_y[2] = extents.ymin;
  130|   112k|    quad_x[3] = extents.xmax;
  131|   112k|    quad_y[3] = extents.ymax;
  132|       |
  133|   112k|    extents = hb_extents_t {};
  134|   562k|    for (unsigned i = 0; i < 4; i++)
  ------------------
  |  Branch (134:26): [True: 449k, False: 112k]
  ------------------
  135|   449k|    {
  136|   449k|      transform_point (quad_x[i], quad_y[i]);
  137|   449k|      extents.add_point (quad_x[i], quad_y[i]);
  138|   449k|    }
  139|   112k|  }
_ZN11hb_bounds_tC2ENS_8status_tE:
  157|  1.63M|  hb_bounds_t (status_t status) : status (status) {}
_ZN11hb_bounds_tC2ERK12hb_extents_t:
  159|   112k|    status (extents.is_empty () ? EMPTY : BOUNDED), extents (extents) {}
_ZN11hb_bounds_t6union_ERKS_:
  162|  1.65M|  {
  163|  1.65M|    if (o.status == UNBOUNDED)
  ------------------
  |  Branch (163:9): [True: 131k, False: 1.51M]
  ------------------
  164|   131k|      status = UNBOUNDED;
  165|  1.51M|    else if (o.status == BOUNDED)
  ------------------
  |  Branch (165:14): [True: 136k, False: 1.38M]
  ------------------
  166|   136k|    {
  167|   136k|      if (status == EMPTY)
  ------------------
  |  Branch (167:11): [True: 92.0k, False: 44.2k]
  ------------------
  168|  92.0k|	*this = o;
  169|  44.2k|      else if (status == BOUNDED)
  ------------------
  |  Branch (169:16): [True: 32.4k, False: 11.8k]
  ------------------
  170|  32.4k|        extents.union_ (o.extents);
  171|   136k|    }
  172|  1.65M|  }
_ZN11hb_bounds_t9intersectERKS_:
  175|  68.5k|  {
  176|  68.5k|    if (o.status == EMPTY)
  ------------------
  |  Branch (176:9): [True: 51.1k, False: 17.3k]
  ------------------
  177|  51.1k|      status = EMPTY;
  178|  17.3k|    else if (o.status == BOUNDED)
  ------------------
  |  Branch (178:14): [True: 5.74k, False: 11.6k]
  ------------------
  179|  5.74k|    {
  180|  5.74k|      if (status == UNBOUNDED)
  ------------------
  |  Branch (180:11): [True: 578, False: 5.16k]
  ------------------
  181|    578|	*this = o;
  182|  5.16k|      else if (status == BOUNDED)
  ------------------
  |  Branch (182:16): [True: 3.73k, False: 1.43k]
  ------------------
  183|  3.73k|      {
  184|  3.73k|        extents.intersect (o.extents);
  185|  3.73k|	if (extents.is_empty ())
  ------------------
  |  Branch (185:6): [True: 597, False: 3.13k]
  ------------------
  186|    597|	  status = EMPTY;
  187|  3.73k|      }
  188|  5.74k|    }
  189|  68.5k|  }
_ZN26hb_paint_extents_context_tC2Ev:
  200|  11.1k|  {
  201|  11.1k|    transforms.push (hb_transform_t{});
  202|  11.1k|    clips.push (hb_bounds_t{hb_bounds_t::UNBOUNDED});
  203|  11.1k|    groups.push (hb_bounds_t{hb_bounds_t::EMPTY});
  204|  11.1k|  }
_ZN26hb_paint_extents_context_t11get_extentsEv:
  207|  11.1k|  {
  208|  11.1k|    return groups.tail().extents;
  209|  11.1k|  }
_ZN26hb_paint_extents_context_t10is_boundedEv:
  212|  4.77k|  {
  213|  4.77k|    return groups.tail().status != hb_bounds_t::UNBOUNDED;
  214|  4.77k|  }
_ZN26hb_paint_extents_context_t14push_transformERK14hb_transform_t:
  217|   728k|  {
  218|   728k|    hb_transform_t t = transforms.tail ();
  219|   728k|    t.multiply (trans);
  220|   728k|    transforms.push (t);
  221|   728k|  }
_ZN26hb_paint_extents_context_t13pop_transformEv:
  224|   728k|  {
  225|   728k|    transforms.pop ();
  226|   728k|  }
_ZN26hb_paint_extents_context_t9push_clipE12hb_extents_t:
  229|   112k|  {
  230|       |    /* Transform extents and push a new clip. */
  231|   112k|    const hb_transform_t &t = transforms.tail ();
  232|   112k|    t.transform_extents (extents);
  233|       |
  234|   112k|    clips.push (hb_bounds_t {extents});
  235|   112k|  }
_ZN26hb_paint_extents_context_t8pop_clipEv:
  238|   112k|  {
  239|   112k|    clips.pop ();
  240|   112k|  }
_ZN26hb_paint_extents_context_t10push_groupEv:
  243|  1.60M|  {
  244|  1.60M|    groups.push (hb_bounds_t {hb_bounds_t::EMPTY});
  245|  1.60M|  }
_ZN26hb_paint_extents_context_t9pop_groupE25hb_paint_composite_mode_t:
  248|  1.60M|  {
  249|  1.60M|    const hb_bounds_t src_bounds = groups.pop ();
  250|  1.60M|    hb_bounds_t &backdrop_bounds = groups.tail ();
  251|       |
  252|       |    // https://learn.microsoft.com/en-us/typography/opentype/spec/colr#format-32-paintcomposite
  253|  1.60M|    switch ((int) mode)
  254|  1.60M|    {
  255|  9.39k|      case HB_PAINT_COMPOSITE_MODE_CLEAR:
  ------------------
  |  Branch (255:7): [True: 9.39k, False: 1.59M]
  ------------------
  256|  9.39k|	backdrop_bounds.status = hb_bounds_t::EMPTY;
  257|  9.39k|	break;
  258|    297|      case HB_PAINT_COMPOSITE_MODE_SRC:
  ------------------
  |  Branch (258:7): [True: 297, False: 1.60M]
  ------------------
  259|  2.42k|      case HB_PAINT_COMPOSITE_MODE_SRC_OUT:
  ------------------
  |  Branch (259:7): [True: 2.12k, False: 1.60M]
  ------------------
  260|  2.42k|	backdrop_bounds = src_bounds;
  261|  2.42k|	break;
  262|    329|      case HB_PAINT_COMPOSITE_MODE_DEST:
  ------------------
  |  Branch (262:7): [True: 329, False: 1.60M]
  ------------------
  263|  5.01k|      case HB_PAINT_COMPOSITE_MODE_DEST_OUT:
  ------------------
  |  Branch (263:7): [True: 4.68k, False: 1.60M]
  ------------------
  264|  5.01k|	break;
  265|    689|      case HB_PAINT_COMPOSITE_MODE_SRC_IN:
  ------------------
  |  Branch (265:7): [True: 689, False: 1.60M]
  ------------------
  266|  68.5k|      case HB_PAINT_COMPOSITE_MODE_DEST_IN:
  ------------------
  |  Branch (266:7): [True: 67.8k, False: 1.54M]
  ------------------
  267|  68.5k|	backdrop_bounds.intersect (src_bounds);
  268|  68.5k|	break;
  269|  1.52M|      default:
  ------------------
  |  Branch (269:7): [True: 1.52M, False: 85.3k]
  ------------------
  270|  1.52M|	backdrop_bounds.union_ (src_bounds);
  271|  1.52M|	break;
  272|  1.60M|     }
  273|  1.60M|  }
_ZN26hb_paint_extents_context_t5paintEv:
  276|   127k|  {
  277|   127k|    const hb_bounds_t &clip = clips.tail ();
  278|   127k|    hb_bounds_t &group = groups.tail ();
  279|       |
  280|   127k|    group.union_ (clip);
  281|   127k|  }

hb_paint_funcs_set_push_transform_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_pop_transform_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_push_clip_glyph_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_push_clip_rectangle_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_pop_clip_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_color_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_image_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_linear_gradient_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_radial_gradient_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_sweep_gradient_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_push_group_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_set_pop_group_func:
  182|      1|                                  hb_destroy_func_t         destroy)            \
  183|      1|{                                                                               \
  184|      1|  if (!_hb_paint_funcs_set_preamble (funcs, !func, &user_data, &destroy))       \
  ------------------
  |  Branch (184:7): [True: 0, False: 1]
  ------------------
  185|      1|      return;                                                                   \
  186|      1|                                                                                \
  187|      1|  if (funcs->destroy && funcs->destroy->name)                                   \
  ------------------
  |  Branch (187:7): [True: 0, False: 1]
  |  Branch (187:25): [True: 0, False: 0]
  ------------------
  188|      1|    funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);\
  ------------------
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|      1|                                                                                \
  190|      1|  if (!_hb_paint_funcs_set_middle (funcs, user_data, destroy))                  \
  ------------------
  |  Branch (190:7): [True: 0, False: 1]
  ------------------
  191|      1|      return;                                                                   \
  192|      1|                                                                                \
  193|      1|  if (func)                                                                     \
  ------------------
  |  Branch (193:7): [True: 1, False: 0]
  ------------------
  194|      1|    funcs->func.name = func;                                                    \
  195|      1|  else                                                                          \
  196|      1|    funcs->func.name = hb_paint_##name##_nil;                                   \
  197|      1|                                                                                \
  198|      1|  if (funcs->user_data)                                                         \
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      1|    funcs->user_data->name = user_data;                                         \
  200|      1|  if (funcs->destroy)                                                           \
  ------------------
  |  Branch (200:7): [True: 0, False: 1]
  ------------------
  201|      1|    funcs->destroy->name = destroy;                                             \
  202|      1|}
hb_paint_funcs_create:
  223|      1|{
  224|      1|  hb_paint_funcs_t *funcs;
  225|      1|  if (unlikely (!(funcs = hb_object_create<hb_paint_funcs_t> ())))
  ------------------
  |  |  259|      1|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  226|      0|    return const_cast<hb_paint_funcs_t *> (&Null (hb_paint_funcs_t));
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  227|       |
  228|      1|  funcs->func =  Null (hb_paint_funcs_t).func;
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  229|       |
  230|      1|  return funcs;
  231|      1|}
hb_paint_funcs_get_empty:
  255|      1|{
  256|      1|  return const_cast<hb_paint_funcs_t *> (&Null (hb_paint_funcs_t));
  ------------------
  |  |  124|      1|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  257|      1|}
hb_paint_funcs_destroy:
  291|      1|{
  292|      1|  if (!hb_object_destroy (funcs)) return;
  ------------------
  |  Branch (292:7): [True: 0, False: 1]
  ------------------
  293|       |
  294|      1|  if (funcs->destroy)
  ------------------
  |  Branch (294:7): [True: 0, False: 1]
  ------------------
  295|      0|  {
  296|      0|#define HB_PAINT_FUNC_IMPLEMENT(name) \
  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  298|      0|      HB_PAINT_FUNCS_IMPLEMENT_CALLBACKS
  ------------------
  |  |   33|      0|  HB_PAINT_FUNC_IMPLEMENT (push_transform) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   34|      0|  HB_PAINT_FUNC_IMPLEMENT (pop_transform) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   35|      0|  HB_PAINT_FUNC_IMPLEMENT (push_clip_glyph) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|      0|  HB_PAINT_FUNC_IMPLEMENT (push_clip_rectangle) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|  HB_PAINT_FUNC_IMPLEMENT (pop_clip) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|      0|  HB_PAINT_FUNC_IMPLEMENT (color) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   39|      0|  HB_PAINT_FUNC_IMPLEMENT (image) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   40|      0|  HB_PAINT_FUNC_IMPLEMENT (linear_gradient) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|  HB_PAINT_FUNC_IMPLEMENT (radial_gradient) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   42|      0|  HB_PAINT_FUNC_IMPLEMENT (sweep_gradient) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      0|  HB_PAINT_FUNC_IMPLEMENT (push_group) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      0|  HB_PAINT_FUNC_IMPLEMENT (pop_group) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|      0|  HB_PAINT_FUNC_IMPLEMENT (custom_palette_color) \
  |  |  ------------------
  |  |  |  |  297|      0|    if (funcs->destroy->name) funcs->destroy->name (!funcs->user_data ? nullptr : funcs->user_data->name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (297:9): [True: 0, False: 0]
  |  |  |  |  |  Branch (297:53): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|      0|#undef HB_PAINT_FUNC_IMPLEMENT
  300|      0|  }
  301|       |
  302|      1|  hb_free (funcs->destroy);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  303|      1|  hb_free (funcs->user_data);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  304|      1|  hb_free (funcs);
  ------------------
  |  |  236|      1|#define hb_free hb_free_impl
  ------------------
  305|      1|}
hb_paint_funcs_make_immutable:
  363|      1|{
  364|      1|  if (hb_object_is_immutable (funcs))
  ------------------
  |  Branch (364:7): [True: 0, False: 1]
  ------------------
  365|      0|    return;
  366|       |
  367|      1|  hb_object_make_immutable (funcs);
  368|      1|}
hb-paint.cc:_ZL28_hb_paint_funcs_set_preambleP16hb_paint_funcs_tbPPvPPFvS1_E:
  131|     12|{
  132|     12|  if (hb_object_is_immutable (funcs))
  ------------------
  |  Branch (132:7): [True: 0, False: 12]
  ------------------
  133|      0|  {
  134|      0|    if (*destroy)
  ------------------
  |  Branch (134:9): [True: 0, False: 0]
  ------------------
  135|      0|      (*destroy) (*user_data);
  136|      0|    return false;
  137|      0|  }
  138|       |
  139|     12|  if (func_is_null)
  ------------------
  |  Branch (139:7): [True: 0, False: 12]
  ------------------
  140|      0|  {
  141|      0|    if (*destroy)
  ------------------
  |  Branch (141:9): [True: 0, False: 0]
  ------------------
  142|      0|      (*destroy) (*user_data);
  143|      0|    *destroy = nullptr;
  144|      0|    *user_data = nullptr;
  145|      0|  }
  146|       |
  147|     12|  return true;
  148|     12|}
hb-paint.cc:_ZL26_hb_paint_funcs_set_middleP16hb_paint_funcs_tPvPFvS1_E:
  154|     12|{
  155|     12|  if (user_data && !funcs->user_data)
  ------------------
  |  Branch (155:7): [True: 0, False: 12]
  |  Branch (155:20): [True: 0, False: 0]
  ------------------
  156|      0|  {
  157|      0|    funcs->user_data = (decltype (funcs->user_data)) hb_calloc (1, sizeof (*funcs->user_data));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  158|      0|    if (unlikely (!funcs->user_data))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  159|      0|      goto fail;
  160|      0|  }
  161|     12|  if (destroy && !funcs->destroy)
  ------------------
  |  Branch (161:7): [True: 0, False: 12]
  |  Branch (161:18): [True: 0, False: 0]
  ------------------
  162|      0|  {
  163|      0|    funcs->destroy = (decltype (funcs->destroy)) hb_calloc (1, sizeof (*funcs->destroy));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  164|      0|    if (unlikely (!funcs->destroy))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  165|      0|      goto fail;
  166|      0|  }
  167|       |
  168|     12|  return true;
  169|       |
  170|      0|fail:
  171|      0|  if (destroy)
  ------------------
  |  Branch (171:7): [True: 0, False: 0]
  ------------------
  172|      0|    (destroy) (user_data);
  173|      0|  return false;
  174|     12|}
hb-paint.cc:_ZL33hb_paint_custom_palette_color_nilP16hb_paint_funcs_tPvjPjS1_:
  124|  47.6k|                                   void *user_data) { return false; }

_ZN16hb_paint_funcs_t14push_transformEPvffffff:
   74|   728k|  { func.push_transform (this, paint_data,
   75|   728k|                         xx, yx, xy, yy, dx, dy,
   76|   728k|                         !user_data ? nullptr : user_data->push_transform); }
  ------------------
  |  Branch (76:26): [True: 728k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t13pop_transformEPv:
   78|   728k|  { func.pop_transform (this, paint_data,
   79|   728k|                        !user_data ? nullptr : user_data->pop_transform); }
  ------------------
  |  Branch (79:25): [True: 728k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t15push_clip_glyphEPvjP9hb_font_t:
   83|   106k|  { func.push_clip_glyph (this, paint_data,
   84|   106k|                          glyph,
   85|   106k|                          font,
   86|   106k|                          !user_data ? nullptr : user_data->push_clip_glyph); }
  ------------------
  |  Branch (86:27): [True: 106k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t19push_clip_rectangleEPvffff:
   89|  5.70k|  { func.push_clip_rectangle (this, paint_data,
   90|  5.70k|                              xmin, ymin, xmax, ymax,
   91|  5.70k|                              !user_data ? nullptr : user_data->push_clip_rectangle); }
  ------------------
  |  Branch (91:31): [True: 5.70k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t8pop_clipEPv:
   93|   112k|  { func.pop_clip (this, paint_data,
   94|   112k|                   !user_data ? nullptr : user_data->pop_clip); }
  ------------------
  |  Branch (94:20): [True: 112k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t5colorEPvij:
   98|  48.3k|  { func.color (this, paint_data,
   99|  48.3k|                is_foreground, color,
  100|  48.3k|                !user_data ? nullptr : user_data->color); }
  ------------------
  |  Branch (100:17): [True: 48.3k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t15linear_gradientEPvP15hb_color_line_tffffff:
  115|  29.5k|  { func.linear_gradient (this, paint_data,
  116|  29.5k|                          color_line, x0, y0, x1, y1, x2, y2,
  117|  29.5k|                          !user_data ? nullptr : user_data->linear_gradient); }
  ------------------
  |  Branch (117:27): [True: 29.5k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t15radial_gradientEPvP15hb_color_line_tffffff:
  122|  23.4k|  { func.radial_gradient (this, paint_data,
  123|  23.4k|                          color_line, x0, y0, r0, x1, y1, r1,
  124|  23.4k|                          !user_data ? nullptr : user_data->radial_gradient); }
  ------------------
  |  Branch (124:27): [True: 23.4k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t14sweep_gradientEPvP15hb_color_line_tffff:
  130|  25.9k|  { func.sweep_gradient (this, paint_data,
  131|  25.9k|                         color_line, x0, y0, start_angle, end_angle,
  132|  25.9k|                         !user_data ? nullptr : user_data->sweep_gradient); }
  ------------------
  |  Branch (132:26): [True: 25.9k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t10push_groupEPv:
  134|  1.60M|  { func.push_group (this, paint_data,
  135|  1.60M|                     !user_data ? nullptr : user_data->push_group); }
  ------------------
  |  Branch (135:22): [True: 1.60M, False: 0]
  ------------------
_ZN16hb_paint_funcs_t9pop_groupEPv25hb_paint_composite_mode_t:
  138|  1.60M|  { func.pop_group (this, paint_data,
  139|  1.60M|                    mode,
  140|  1.60M|                    !user_data ? nullptr : user_data->pop_group); }
  ------------------
  |  Branch (140:21): [True: 1.60M, False: 0]
  ------------------
_ZN16hb_paint_funcs_t20custom_palette_colorEPvjPj:
  144|  47.6k|  { return func.custom_palette_color (this, paint_data,
  145|  47.6k|                                      color_index,
  146|  47.6k|                                      color,
  147|  47.6k|                                      !user_data ? nullptr : user_data->custom_palette_color); }
  ------------------
  |  Branch (147:39): [True: 47.6k, False: 0]
  ------------------
_ZN16hb_paint_funcs_t19push_root_transformEPvPK9hb_font_t:
  154|   115k|  {
  155|   115k|    float upem = font->face->get_upem ();
  156|   115k|    int xscale = font->x_scale, yscale = font->y_scale;
  157|   115k|    float slant = font->slant_xy;
  158|       |
  159|   115k|    push_transform (paint_data,
  160|   115k|		    xscale/upem, 0, slant * yscale/upem, yscale/upem, 0, 0);
  161|   115k|  }
_ZN16hb_paint_funcs_t27push_inverse_root_transformEPvP9hb_font_t:
  165|   105k|  {
  166|   105k|    float upem = font->face->get_upem ();
  167|   105k|    int xscale = font->x_scale ? font->x_scale : upem;
  ------------------
  |  Branch (167:18): [True: 105k, False: 0]
  ------------------
  168|   105k|    int yscale = font->y_scale ? font->y_scale : upem;
  ------------------
  |  Branch (168:18): [True: 105k, False: 0]
  ------------------
  169|   105k|    float slant = font->slant_xy;
  170|       |
  171|   105k|    push_transform (paint_data,
  172|   105k|		    upem/xscale, 0, -slant * upem/xscale, upem/yscale, 0, 0);
  173|   105k|  }
_ZN16hb_paint_funcs_t14push_translateEPvff:
  178|   285k|  {
  179|   285k|    if (!dx && !dy)
  ------------------
  |  Branch (179:9): [True: 21.2k, False: 264k]
  |  Branch (179:16): [True: 4.97k, False: 16.3k]
  ------------------
  180|  4.97k|      return false;
  181|       |
  182|   280k|    push_transform (paint_data,
  183|   280k|		    1.f, 0.f, 0.f, 1.f, dx, dy);
  184|   280k|    return true;
  185|   285k|  }
_ZN16hb_paint_funcs_t10push_scaleEPvff:
  190|  59.5k|  {
  191|  59.5k|    if (sx == 1.f && sy == 1.f)
  ------------------
  |  Branch (191:9): [True: 2.27k, False: 57.2k]
  |  Branch (191:22): [True: 1.65k, False: 616]
  ------------------
  192|  1.65k|      return false;
  193|       |
  194|  57.8k|    push_transform (paint_data,
  195|  57.8k|		    sx, 0.f, 0.f, sy, 0.f, 0.f);
  196|  57.8k|    return true;
  197|  59.5k|  }
_ZN16hb_paint_funcs_t11push_rotateEPvf:
  202|  34.8k|  {
  203|  34.8k|    if (!a)
  ------------------
  |  Branch (203:9): [True: 1.87k, False: 32.9k]
  ------------------
  204|  1.87k|      return false;
  205|       |
  206|  32.9k|    float cc = cosf (a * HB_PI);
  ------------------
  |  |  514|  32.9k|#define HB_PI 3.14159265358979f
  ------------------
  207|  32.9k|    float ss = sinf (a * HB_PI);
  ------------------
  |  |  514|  32.9k|#define HB_PI 3.14159265358979f
  ------------------
  208|  32.9k|    push_transform (paint_data, cc, ss, -ss, cc, 0.f, 0.f);
  209|  32.9k|    return true;
  210|  34.8k|  }
_ZN16hb_paint_funcs_t9push_skewEPvff:
  215|   106k|  {
  216|   106k|    if (!sx && !sy)
  ------------------
  |  Branch (216:9): [True: 2.77k, False: 104k]
  |  Branch (216:16): [True: 972, False: 1.80k]
  ------------------
  217|    972|      return false;
  218|       |
  219|   105k|    float x = tanf (-sx * HB_PI);
  ------------------
  |  |  514|   105k|#define HB_PI 3.14159265358979f
  ------------------
  220|   105k|    float y = tanf (+sy * HB_PI);
  ------------------
  |  |  514|   105k|#define HB_PI 3.14159265358979f
  ------------------
  221|   105k|    push_transform (paint_data, 1.f, y, x, 1.f, 0.f, 0.f);
  222|   105k|    return true;
  223|   106k|  }

_ZN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE5allocEv:
   57|  24.8k|  {
   58|  24.8k|    if (unlikely (!next))
  ------------------
  |  |  259|  24.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.14k, False: 22.7k]
  |  |  ------------------
  ------------------
   59|  2.14k|    {
   60|  2.14k|      if (unlikely (!chunks.alloc (chunks.length + 1))) return nullptr;
  ------------------
  |  |  259|  2.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 42, False: 2.09k]
  |  |  ------------------
  ------------------
   61|  2.09k|      chunk_t *chunk = (chunk_t *) hb_calloc (1, sizeof (chunk_t));
  ------------------
  |  |  234|  2.09k|#define hb_calloc hb_calloc_impl
  ------------------
   62|  2.09k|      if (unlikely (!chunk)) return nullptr;
  ------------------
  |  |  259|  2.09k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 42, False: 2.05k]
  |  |  ------------------
  ------------------
   63|  2.05k|      chunks.push (chunk);
   64|  2.05k|      next = chunk->thread ();
   65|  2.05k|    }
   66|       |
   67|  24.7k|    T* obj = next;
   68|  24.7k|    next = * ((T**) next);
   69|       |
   70|  24.7k|    hb_memset (obj, 0, sizeof (T));
   71|       |
   72|  24.7k|    return obj;
   73|  24.8k|  }
_ZN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_t6threadEv:
   90|  2.05k|    {
   91|  65.8k|      for (unsigned i = 0; i < ARRAY_LENGTH (arrayZ) - 1; i++)
  ------------------
  |  Branch (91:28): [True: 63.7k, False: 2.05k]
  ------------------
   92|  63.7k|	* (T**) &arrayZ[i] = &arrayZ[i + 1];
   93|       |
   94|  2.05k|      * (T**) &arrayZ[ARRAY_LENGTH (arrayZ) - 1] = nullptr;
   95|       |
   96|  2.05k|      return arrayZ;
   97|  2.05k|    }
_ZN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EEC2Ev:
   46|  1.71k|  hb_pool_t () : next (nullptr) {}
_ZN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EED2Ev:
   48|  1.71k|  {
   49|  1.71k|    next = nullptr;
   50|       |
   51|  1.71k|    + hb_iter (chunks)
   52|  1.71k|    | hb_apply (hb_free)
  ------------------
  |  |  236|  1.71k|#define hb_free hb_free_impl
  ------------------
   53|  1.71k|    ;
   54|  1.71k|  }

_ZN21hb_sanitize_context_tC2Ev:
  130|  1.34M|	num_glyphs_set (false) {}
_ZN21hb_sanitize_context_t4initEP9hb_blob_t:
  160|  1.40M|  {
  161|  1.40M|    this->blob = hb_blob_reference (b);
  162|  1.40M|    this->writable = false;
  163|  1.40M|  }
_ZN21hb_sanitize_context_t14set_num_glyphsEj:
  166|  1.31M|  {
  167|  1.31M|    num_glyphs = num_glyphs_;
  168|  1.31M|    num_glyphs_set = true;
  169|  1.31M|  }
_ZN21hb_sanitize_context_t16start_processingEv:
  199|  1.43M|  {
  200|  1.43M|    reset_object ();
  201|  1.43M|    unsigned m;
  202|  1.43M|    if (unlikely (hb_unsigned_mul_overflows (this->end - this->start, HB_SANITIZE_MAX_OPS_FACTOR, &m)))
  ------------------
  |  |  259|  1.43M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.43M]
  |  |  ------------------
  ------------------
  203|      0|      this->max_ops = HB_SANITIZE_MAX_OPS_MAX;
  ------------------
  |  |  114|      0|#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF
  ------------------
  204|  1.43M|    else
  205|  1.43M|      this->max_ops = hb_clamp (m,
  206|  1.43M|				(unsigned) HB_SANITIZE_MAX_OPS_MIN,
  ------------------
  |  |  111|  1.43M|#define HB_SANITIZE_MAX_OPS_MIN 16384
  ------------------
  207|  1.43M|				(unsigned) HB_SANITIZE_MAX_OPS_MAX);
  ------------------
  |  |  114|  1.43M|#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF
  ------------------
  208|  1.43M|    this->edit_count = 0;
  209|  1.43M|    this->debug_depth = 0;
  210|  1.43M|    this->recursion_depth = 0;
  211|       |
  212|  1.43M|    DEBUG_MSG_LEVEL (SANITIZE, start, 0, +1,
  ------------------
  |  |  231|  1.43M|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  ------------------
  213|  1.43M|		     "start [%p..%p] (%lu bytes)",
  214|  1.43M|		     this->start, this->end,
  215|  1.43M|		     (unsigned long) (this->end - this->start));
  216|  1.43M|  }
_ZN21hb_sanitize_context_t12reset_objectEv:
  192|  1.57M|  {
  193|  1.57M|    this->start = this->blob->data;
  194|  1.57M|    this->end = this->start + this->blob->length;
  195|  1.57M|    assert (this->start <= this->end); /* Must not overflow. */
  196|  1.57M|  }
_ZN21hb_sanitize_context_t11set_max_opsEi:
  172|  28.2k|  void set_max_ops (int max_ops_) { max_ops = max_ops_; }
_ZN21hb_sanitize_context_t14end_processingEv:
  219|  1.47M|  {
  220|  1.47M|    DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1,
  ------------------
  |  |  231|  1.47M|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  ------------------
  221|  1.47M|		     "end [%p..%p] %u edit requests",
  222|  1.47M|		     this->start, this->end, this->edit_count);
  223|       |
  224|  1.47M|    hb_blob_destroy (this->blob);
  225|  1.47M|    this->blob = nullptr;
  226|  1.47M|    this->start = this->end = nullptr;
  227|  1.47M|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4GDEFEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4GDEFEEEP9hb_blob_tS4_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  34.4k|  retry:
  351|  34.4k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  34.4k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  34.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  34.4k|    start_processing ();
  354|       |
  355|  34.4k|    if (unlikely (!start))
  ------------------
  |  |  259|  34.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.8k, False: 3.59k]
  |  |  ------------------
  ------------------
  356|  30.8k|    {
  357|  30.8k|      end_processing ();
  358|  30.8k|      return blob;
  359|  30.8k|    }
  360|       |
  361|  3.59k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  3.59k|    sane = t->sanitize (this);
  364|  3.59k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.82k, False: 1.77k]
  ------------------
  365|  1.82k|    {
  366|  1.82k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 1.45k, False: 370]
  ------------------
  367|  1.45k|      {
  368|  1.45k|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|  1.45k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|  1.45k|	edit_count = 0;
  372|  1.45k|	sane = t->sanitize (this);
  373|  1.45k|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 28, False: 1.42k]
  ------------------
  374|     28|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|     28|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|     28|	  sane = false;
  376|     28|	}
  377|  1.45k|      }
  378|  1.82k|    }
  379|  1.77k|    else
  380|  1.77k|    {
  381|  1.77k|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 1.76k, False: 7]
  |  Branch (381:25): [True: 1.61k, False: 146]
  ------------------
  382|  1.61k|	start = hb_blob_get_data_writable (blob, nullptr);
  383|  1.61k|	end = start + blob->length;
  384|       |
  385|  1.61k|	if (start)
  ------------------
  |  Branch (385:6): [True: 1.60k, False: 14]
  ------------------
  386|  1.60k|	{
  387|  1.60k|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|  1.60k|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|  1.60k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.60k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|  1.60k|	  goto retry;
  391|  1.60k|	}
  392|  1.61k|      }
  393|  1.77k|    }
  394|       |
  395|  1.99k|    end_processing ();
  396|       |
  397|  1.99k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  3.98k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.99k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.78k, False: 210]
  |  |  ------------------
  ------------------
  398|  1.99k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.78k, False: 210]
  ------------------
  399|  1.78k|    {
  400|  1.78k|      hb_blob_make_immutable (blob);
  401|  1.78k|      return blob;
  402|  1.78k|    }
  403|    210|    else
  404|    210|    {
  405|    210|      hb_blob_destroy (blob);
  406|    210|      return hb_blob_get_empty ();
  407|    210|    }
  408|  1.99k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT12FixedVersionINS1_7IntTypeItLj2EEEEEEEbPKT_:
  312|  63.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  63.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_rangeEPKvj:
  245|   270M|  {
  246|   270M|    const char *p = (const char *) base;
  247|   270M|    bool ok = !len ||
  ------------------
  |  Branch (247:15): [True: 8.04M, False: 262M]
  ------------------
  248|   270M|	      (this->start <= p &&
  ------------------
  |  Branch (248:9): [True: 262M, False: 864]
  ------------------
  249|   262M|	       p <= this->end &&
  ------------------
  |  Branch (249:9): [True: 243M, False: 19.4M]
  ------------------
  250|   262M|	       (unsigned int) (this->end - p) >= len &&
  ------------------
  |  Branch (250:9): [True: 242M, False: 1.11M]
  ------------------
  251|   262M|	       (this->max_ops -= len) > 0);
  ------------------
  |  Branch (251:9): [True: 242M, False: 6.00k]
  ------------------
  252|       |
  253|   270M|    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
  ------------------
  |  |  231|   541M|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (231:145): [True: 250M, False: 20.5M]
  |  |  ------------------
  ------------------
  254|   270M|		     "check_range [%p..%p]"
  255|   270M|		     " (%u bytes) in [%p..%p] -> %s",
  256|   270M|		     p, p + len, len,
  257|   270M|		     this->start, this->end,
  258|   270M|		     ok ? "OK" : "OUT-OF-RANGE");
  259|       |
  260|   270M|    return likely (ok);
  ------------------
  |  |  258|   270M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
  261|   270M|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8ClassDefENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  97.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  97.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeItLj2EEEEEbPKT_:
  312|  65.0M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  65.0M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17ClassDefFormat1_3INS1_6Layout10SmallTypesEEEEEbPKT_:
  312|  10.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  10.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeItLj2EEEEEbPKT_j:
  286|  2.85M|  {
  287|  2.85M|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  2.85M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  2.85M|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeItLj2EEEEEbPKT_jj:
  267|  2.86M|  {
  268|  2.86M|    unsigned m;
  269|  2.86M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.86M, False: 6]
  ------------------
  270|  2.86M|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.78M, False: 1.08M]
  ------------------
  271|  2.86M|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6Layout6Common11RangeRecordINS2_10SmallTypesEEEEEbPKT_j:
  286|   109k|  {
  287|   109k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   109k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   109k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout6Common11RangeRecordINS2_10SmallTypesEEEEEbPKT_jj:
  267|   109k|  {
  268|   109k|    unsigned m;
  269|   109k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 109k, False: 0]
  ------------------
  270|   109k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 108k, False: 985]
  ------------------
  271|   109k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT17ClassDefFormat1_3INS1_6Layout11MediumTypesEEEEEbPKT_:
  312|  8.79k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  8.79k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeIjLj3EEEEEbPKT_:
  312|  52.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  52.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6Layout6Common11RangeRecordINS2_11MediumTypesEEEEEbPKT_j:
  286|  39.6k|  {
  287|  39.6k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  39.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  39.6k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout6Common11RangeRecordINS2_11MediumTypesEEEEEbPKT_jj:
  267|  39.6k|  {
  268|  39.6k|    unsigned m;
  269|  39.6k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 39.6k, False: 0]
  ------------------
  270|  39.6k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 39.1k, False: 485]
  ------------------
  271|  39.6k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8ClassDefENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  2.53k|  {
  335|  2.53k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.53k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.10k, False: 429]
  ------------------
  336|  2.10k|    {
  337|  2.10k|      * const_cast<Type *> (obj) = v;
  338|  2.10k|      return true;
  339|  2.10k|    }
  340|    429|    return false;
  341|  2.53k|  }
_ZN21hb_sanitize_context_t8may_editEPKvj:
  315|   379k|  {
  316|   379k|    if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
  ------------------
  |  |  105|   379k|#define HB_SANITIZE_MAX_EDITS 32
  ------------------
  |  Branch (316:9): [True: 8.54k, False: 370k]
  ------------------
  317|  8.54k|      return false;
  318|       |
  319|   370k|    const char *p = (const char *) base;
  320|   370k|    this->edit_count++;
  321|       |
  322|   370k|    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
  ------------------
  |  |  231|   741k|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (231:145): [True: 314k, False: 56.3k]
  |  |  ------------------
  ------------------
  323|   370k|       "may_edit(%u) [%p..%p] (%u bytes) in [%p..%p] -> %s",
  324|   370k|       this->edit_count,
  325|   370k|       p, p + len, len,
  326|   370k|       this->start, this->end,
  327|   370k|       this->writable ? "GRANTED" : "DENIED");
  328|       |
  329|   370k|    return this->writable;
  330|   379k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10AttachListENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  3.80k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.80k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  4.28M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.28M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT11HBGlyphID16EEEbPKT_j:
  286|  4.96M|  {
  287|  4.96M|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  4.96M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  4.96M|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT11HBGlyphID16EEEbPKT_jj:
  267|  4.96M|  {
  268|  4.96M|    unsigned m;
  269|  4.96M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 4.96M, False: 35]
  ------------------
  270|  4.96M|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 4.29M, False: 666k]
  ------------------
  271|  4.96M|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT11HBGlyphID24EEEbPKT_j:
  286|  58.7k|  {
  287|  58.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  58.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  58.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT11HBGlyphID24EEEbPKT_jj:
  267|  58.7k|  {
  268|  58.7k|    unsigned m;
  269|  58.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 58.7k, False: 0]
  ------------------
  270|  58.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 57.6k, False: 1.08k]
  ------------------
  271|  58.7k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  8.05k|  {
  335|  8.05k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  8.05k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 7.09k, False: 955]
  ------------------
  336|  7.09k|    {
  337|  7.09k|      * const_cast<Type *> (obj) = v;
  338|  7.09k|      return true;
  339|  7.09k|    }
  340|    955|    return false;
  341|  8.05k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  2.12k|  {
  287|  2.12k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  2.12k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  2.12k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  2.12k|  {
  268|  2.12k|    unsigned m;
  269|  2.12k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.12k, False: 0]
  ------------------
  270|  2.12k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.87k, False: 249]
  ------------------
  271|  2.12k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  30.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  30.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_11AttachPointENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.81k|  {
  335|  1.81k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.81k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.68k, False: 132]
  ------------------
  336|  1.68k|    {
  337|  1.68k|      * const_cast<Type *> (obj) = v;
  338|  1.68k|      return true;
  339|  1.68k|    }
  340|    132|    return false;
  341|  1.81k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10AttachListENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    992|  {
  335|    992|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    992|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 397, False: 595]
  ------------------
  336|    397|    {
  337|    397|      * const_cast<Type *> (obj) = v;
  338|    397|      return true;
  339|    397|    }
  340|    595|    return false;
  341|    992|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12LigCaretListENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  3.20k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.20k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|    909|  {
  287|    909|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    909|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    909|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|    909|  {
  268|    909|    unsigned m;
  269|    909|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 909, False: 0]
  ------------------
  270|    909|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 735, False: 174]
  ------------------
  271|    909|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  23.4k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  23.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  11.3k|  {
  287|  11.3k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  11.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  11.3k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  11.3k|  {
  268|  11.3k|    unsigned m;
  269|  11.3k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 11.3k, False: 0]
  ------------------
  270|  11.3k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 10.9k, False: 397]
  ------------------
  271|  11.3k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  29.2M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  29.2M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17CaretValueFormat1EEEbPKT_:
  312|   559k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   559k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17CaretValueFormat2EEEbPKT_:
  312|   413k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   413k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17CaretValueFormat3EEEbPKT_:
  312|   384k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   384k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6DeviceENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  18.0M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  18.0M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT13HintingDeviceEEEbPKT_:
  312|   629k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   629k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT15VariationDeviceEEEbPKT_:
  312|  3.98k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.98k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6DeviceENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  9.07k|  {
  335|  9.07k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  9.07k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 8.63k, False: 442]
  ------------------
  336|  8.63k|    {
  337|  8.63k|      * const_cast<Type *> (obj) = v;
  338|  8.63k|      return true;
  339|  8.63k|    }
  340|    442|    return false;
  341|  9.07k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10CaretValueENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  2.23k|  {
  335|  2.23k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.23k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.17k, False: 59]
  ------------------
  336|  2.17k|    {
  337|  2.17k|      * const_cast<Type *> (obj) = v;
  338|  2.17k|      return true;
  339|  2.17k|    }
  340|     59|    return false;
  341|  2.23k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8LigGlyphENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.43k|  {
  335|  1.43k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.43k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.32k, False: 101]
  ------------------
  336|  1.32k|    {
  337|  1.32k|      * const_cast<Type *> (obj) = v;
  338|  1.32k|      return true;
  339|  1.32k|    }
  340|    101|    return false;
  341|  1.43k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12LigCaretListENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.03k|  {
  335|  1.03k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.03k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 646, False: 393]
  ------------------
  336|    646|    {
  337|    646|      * const_cast<Type *> (obj) = v;
  338|    646|      return true;
  339|    646|    }
  340|    393|    return false;
  341|  1.03k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13MarkGlyphSetsENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.08k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.08k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|    187|  {
  287|    187|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    187|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    187|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|    187|  {
  268|    187|    unsigned m;
  269|    187|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 187, False: 0]
  ------------------
  270|    187|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 177, False: 10]
  ------------------
  271|    187|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  1.23k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.23k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|    400|  {
  335|    400|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    400|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 380, False: 20]
  ------------------
  336|    380|    {
  337|    380|      * const_cast<Type *> (obj) = v;
  338|    380|      return true;
  339|    380|    }
  340|     20|    return false;
  341|    400|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13MarkGlyphSetsENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    391|  {
  335|    391|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    391|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 279, False: 112]
  ------------------
  336|    279|    {
  337|    279|      * const_cast<Type *> (obj) = v;
  338|    279|      return true;
  339|    279|    }
  340|    112|    return false;
  341|    391|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14VariationStoreENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  7.63k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.63k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14VariationStoreEEEbPKT_:
  312|  4.33k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.33k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13VarRegionListENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  1.55k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.55k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT13VarRegionListEEEbPKT_:
  312|  1.26k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.26k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT13VarRegionAxisEEEbPKT_j:
  286|    993|  {
  287|    993|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    993|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    993|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT13VarRegionAxisEEEbPKT_jj:
  267|    993|  {
  268|    993|    unsigned m;
  269|    993|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 962, False: 31]
  ------------------
  270|    993|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 834, False: 128]
  ------------------
  271|    993|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13VarRegionListENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|    430|  {
  335|    430|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    430|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 298, False: 132]
  ------------------
  336|    298|    {
  337|    298|      * const_cast<Type *> (obj) = v;
  338|    298|      return true;
  339|    298|    }
  340|    132|    return false;
  341|    430|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|  1.41k|  {
  287|  1.41k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.41k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.41k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|  1.41k|  {
  268|  1.41k|    unsigned m;
  269|  1.41k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.41k, False: 0]
  ------------------
  270|  1.41k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.34k, False: 72]
  ------------------
  271|  1.41k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  7.28k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.28k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT7VarDataEEEbPKT_:
  312|  4.64k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.64k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIhLj1EEEEEbPKT_jj:
  267|   635k|  {
  268|   635k|    unsigned m;
  269|   635k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 635k, False: 109]
  ------------------
  270|   635k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 634k, False: 922]
  ------------------
  271|   635k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7VarDataENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  3.15k|  {
  335|  3.15k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  3.15k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 3.04k, False: 111]
  ------------------
  336|  3.04k|    {
  337|  3.04k|      * const_cast<Type *> (obj) = v;
  338|  3.04k|      return true;
  339|  3.04k|    }
  340|    111|    return false;
  341|  3.15k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_14VariationStoreENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  2.93k|  {
  335|  2.93k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.93k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.56k, False: 367]
  ------------------
  336|  2.56k|    {
  337|  2.56k|      * const_cast<Type *> (obj) = v;
  338|  2.56k|      return true;
  339|  2.56k|    }
  340|    367|    return false;
  341|  2.93k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8ClassDefENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  83.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  83.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8ClassDefENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.74k|  {
  335|  1.74k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.74k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.60k, False: 136]
  ------------------
  336|  1.60k|    {
  337|  1.60k|      * const_cast<Type *> (obj) = v;
  338|  1.60k|      return true;
  339|  1.60k|    }
  340|    136|    return false;
  341|  1.74k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10AttachListENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|    736|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    736|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10AttachListENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    378|  {
  335|    378|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    378|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 202, False: 176]
  ------------------
  336|    202|    {
  337|    202|      * const_cast<Type *> (obj) = v;
  338|    202|      return true;
  339|    202|    }
  340|    176|    return false;
  341|    378|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12LigCaretListENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|    558|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    558|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12LigCaretListENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    258|  {
  335|    258|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    258|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 223, False: 35]
  ------------------
  336|    223|    {
  337|    223|      * const_cast<Type *> (obj) = v;
  338|    223|      return true;
  339|    223|    }
  340|     35|    return false;
  341|    258|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13MarkGlyphSetsENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|    500|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    500|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13MarkGlyphSetsENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    181|  {
  335|    181|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    181|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 173, False: 8]
  ------------------
  336|    173|    {
  337|    173|      * const_cast<Type *> (obj) = v;
  338|    173|      return true;
  339|    173|    }
  340|      8|    return false;
  341|    181|  }
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4morxEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.1k|  {
  413|  33.1k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 33.1k, False: 0]
  ------------------
  414|  33.1k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.1k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.1k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4morxEEEP9hb_blob_tS4_:
  345|  33.1k|  {
  346|  33.1k|    bool sane;
  347|       |
  348|  33.1k|    init (blob);
  349|       |
  350|  33.1k|  retry:
  351|  33.1k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.1k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.1k|    start_processing ();
  354|       |
  355|  33.1k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.7k, False: 1.31k]
  |  |  ------------------
  ------------------
  356|  31.7k|    {
  357|  31.7k|      end_processing ();
  358|  31.7k|      return blob;
  359|  31.7k|    }
  360|       |
  361|  1.31k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.31k|    sane = t->sanitize (this);
  364|  1.31k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 890, False: 420]
  ------------------
  365|    890|    {
  366|    890|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 890]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    890|    }
  379|    420|    else
  380|    420|    {
  381|    420|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 420]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    420|    }
  394|       |
  395|  1.31k|    end_processing ();
  396|       |
  397|  1.31k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.62k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.31k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 890, False: 420]
  |  |  ------------------
  ------------------
  398|  1.31k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 890, False: 420]
  ------------------
  399|    890|    {
  400|    890|      hb_blob_make_immutable (blob);
  401|    890|      return blob;
  402|    890|    }
  403|    420|    else
  404|    420|    {
  405|    420|      hb_blob_destroy (blob);
  406|    420|      return hb_blob_get_empty ();
  407|    420|    }
  408|  1.31k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeIjLj4EEEEEbPKT_:
  312|  3.46M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.46M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT7FeatureEEEbPKT_j:
  286|  3.24k|  {
  287|  3.24k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  3.24k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  3.24k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT7FeatureEEEbPKT_jj:
  267|  3.24k|  {
  268|  3.24k|    unsigned m;
  269|  3.24k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.24k, False: 1]
  ------------------
  270|  3.24k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 3.22k, False: 15]
  ------------------
  271|  3.24k|  }
_ZN25hb_sanitize_with_object_tC2IPKN3AAT13ChainSubtableINS1_13ExtendedTypesEEEEEP21hb_sanitize_context_tRKT_:
  433|  7.73k|  { c->set_object (obj); }
_ZN21hb_sanitize_context_t10set_objectIN3AAT13ChainSubtableINS1_13ExtendedTypesEEEEEvPKT_:
  176|  7.73k|  {
  177|  7.73k|    reset_object ();
  178|       |
  179|  7.73k|    if (!obj) return;
  ------------------
  |  Branch (179:9): [True: 0, False: 7.73k]
  ------------------
  180|       |
  181|  7.73k|    const char *obj_start = (const char *) obj;
  182|  7.73k|    if (unlikely (obj_start < this->start || this->end <= obj_start))
  ------------------
  |  |  259|  15.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 7.73k]
  |  |  |  Branch (259:47): [True: 0, False: 7.73k]
  |  |  |  Branch (259:47): [True: 0, False: 7.73k]
  |  |  ------------------
  ------------------
  183|      0|      this->start = this->end = nullptr;
  184|  7.73k|    else
  185|  7.73k|    {
  186|  7.73k|      this->start = obj_start;
  187|  7.73k|      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
  188|  7.73k|    }
  189|  7.73k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesEvEEEEbPKT_:
  312|    224|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    224|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT6LookupINS1_7IntTypeItLj2EEEEENS5_IjLj4EEELb0EEEEEbPKT_:
  312|  2.62k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.62k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t14get_num_glyphsEv:
  170|  1.63M|  unsigned int get_num_glyphs () { return num_glyphs; }
_ZNK21hb_sanitize_context_t12check_structIN2OT23VarSizedBinSearchHeaderEEEbPKT_:
  312|  2.73k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.73k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT18LookupSegmentArrayIN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|    459|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    459|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7IntTypeItLj2EEEEES5_Lb0EEEEEbPKT_:
  312|    451|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    451|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT13LookupFormat8IN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|    194|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    194|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT14LookupFormat10IN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|     77|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     77|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIhLj1EEEEEbPKT_j:
  286|   608k|  {
  287|   608k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   608k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   608k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryIvEEEEbPKT_j:
  286|  1.34k|  {
  287|  1.34k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.34k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.34k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryIvEEEEbPKT_jj:
  267|  1.34k|  {
  268|  1.34k|    unsigned m;
  269|  1.34k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.34k, False: 0]
  ------------------
  270|  1.34k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.31k, False: 26]
  ------------------
  271|  1.34k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesENS1_18ContextualSubtableIS3_E9EntryDataEEEEEbPKT_:
  312|    391|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    391|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_18ContextualSubtableINS1_13ExtendedTypesEE9EntryDataEEEEEbPKT_j:
  286|    672|  {
  287|    672|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    672|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    672|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_18ContextualSubtableINS1_13ExtendedTypesEE9EntryDataEEEEEbPKT_jj:
  267|    672|  {
  268|    672|    unsigned m;
  269|    672|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 672, False: 0]
  ------------------
  270|    672|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 662, False: 10]
  ------------------
  271|    672|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEES9_Lb0EEEEEbPKT_:
  312|    353|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    353|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEEEbPKT_j:
  286|    353|  {
  287|    353|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    353|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    353|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEEEbPKT_jj:
  267|    353|  {
  268|    353|    unsigned m;
  269|    353|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 353, False: 0]
  ------------------
  270|    353|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 344, False: 9]
  ------------------
  271|    353|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeIjLj4EEELb0EEEEEbPKT_:
  312|  11.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT18LookupSegmentArrayIN2OT11HBGlyphID16EEEEEbPKT_:
  312|    314|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    314|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEEEEbPKT_:
  312|    305|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    305|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT13LookupFormat8IN2OT11HBGlyphID16EEEEEbPKT_:
  312|    354|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    354|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT14LookupFormat10IN2OT11HBGlyphID16EEEEEbPKT_:
  312|    181|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    181|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT16LigatureSubtableINS1_13ExtendedTypesEEEEEbPKT_:
  312|    219|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    219|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesENS1_13LigatureEntryILb1EE9EntryDataEEEEEbPKT_:
  312|    218|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    218|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_13LigatureEntryILb1EE9EntryDataEEEEEbPKT_j:
  286|    422|  {
  287|    422|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    422|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    422|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_13LigatureEntryILb1EE9EntryDataEEEEEbPKT_jj:
  267|    422|  {
  268|    422|    unsigned m;
  269|    422|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 422, False: 0]
  ------------------
  270|    422|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 408, False: 14]
  ------------------
  271|    422|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT17InsertionSubtableINS1_13ExtendedTypesEEEEEbPKT_:
  312|    474|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    474|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesENS1_17InsertionSubtableIS3_E9EntryDataEEEEEbPKT_:
  312|    472|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    472|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_17InsertionSubtableINS1_13ExtendedTypesEE9EntryDataEEEEEbPKT_j:
  286|    730|  {
  287|    730|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    730|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    730|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_17InsertionSubtableINS1_13ExtendedTypesEE9EntryDataEEEEEbPKT_jj:
  267|    730|  {
  268|    730|    unsigned m;
  269|    730|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 730, False: 0]
  ------------------
  270|    730|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 717, False: 13]
  ------------------
  271|    730|  }
_ZN21hb_sanitize_context_t20default_return_valueEv:
  136|  5.51M|  static return_t default_return_value () { return true; }
_ZN25hb_sanitize_with_object_tD2Ev:
  435|  69.1k|  { c->reset_object (); }
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4ltagEEEP9hb_blob_tPK9hb_face_tj:
  412|    375|  {
  413|    375|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 375, False: 0]
  ------------------
  414|    375|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|    375|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|    375|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4ltagEEEP9hb_blob_tS4_:
  345|    375|  {
  346|    375|    bool sane;
  347|       |
  348|    375|    init (blob);
  349|       |
  350|    375|  retry:
  351|    375|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|    375|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    375|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|    375|    start_processing ();
  354|       |
  355|    375|    if (unlikely (!start))
  ------------------
  |  |  259|    375|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 209, False: 166]
  |  |  ------------------
  ------------------
  356|    209|    {
  357|    209|      end_processing ();
  358|    209|      return blob;
  359|    209|    }
  360|       |
  361|    166|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    166|    sane = t->sanitize (this);
  364|    166|    if (sane)
  ------------------
  |  Branch (364:9): [True: 117, False: 49]
  ------------------
  365|    117|    {
  366|    117|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 117]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    117|    }
  379|     49|    else
  380|     49|    {
  381|     49|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 49]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     49|    }
  394|       |
  395|    166|    end_processing ();
  396|       |
  397|    166|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    332|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    166|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 117, False: 49]
  |  |  ------------------
  ------------------
  398|    166|    if (sane)
  ------------------
  |  Branch (398:9): [True: 117, False: 49]
  ------------------
  399|    117|    {
  400|    117|      hb_blob_make_immutable (blob);
  401|    117|      return blob;
  402|    117|    }
  403|     49|    else
  404|     49|    {
  405|     49|      hb_blob_destroy (blob);
  406|     49|      return hb_blob_get_empty ();
  407|     49|    }
  408|    166|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT4ltagEEEbPKT_:
  312|    166|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    166|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT13FTStringRangeEEEbPKT_j:
  286|    164|  {
  287|    164|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    164|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    164|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT13FTStringRangeEEEbPKT_jj:
  267|    164|  {
  268|    164|    unsigned m;
  269|    164|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 155, False: 9]
  ------------------
  270|    164|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 147, False: 8]
  ------------------
  271|    164|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT13FTStringRangeEEEbPKT_:
  312|  16.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  16.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4mortEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.2k|  {
  413|  32.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.2k, False: 0]
  ------------------
  414|  32.2k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4mortEEEP9hb_blob_tS4_:
  345|  32.2k|  {
  346|  32.2k|    bool sane;
  347|       |
  348|  32.2k|    init (blob);
  349|       |
  350|  32.2k|  retry:
  351|  32.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.2k|    start_processing ();
  354|       |
  355|  32.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.0k, False: 1.12k]
  |  |  ------------------
  ------------------
  356|  31.0k|    {
  357|  31.0k|      end_processing ();
  358|  31.0k|      return blob;
  359|  31.0k|    }
  360|       |
  361|  1.12k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.12k|    sane = t->sanitize (this);
  364|  1.12k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 877, False: 247]
  ------------------
  365|    877|    {
  366|    877|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 877]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    877|    }
  379|    247|    else
  380|    247|    {
  381|    247|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 247]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    247|    }
  394|       |
  395|  1.12k|    end_processing ();
  396|       |
  397|  1.12k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.24k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.12k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 877, False: 247]
  |  |  ------------------
  ------------------
  398|  1.12k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 877, False: 247]
  ------------------
  399|    877|    {
  400|    877|      hb_blob_make_immutable (blob);
  401|    877|      return blob;
  402|    877|    }
  403|    247|    else
  404|    247|    {
  405|    247|      hb_blob_destroy (blob);
  406|    247|      return hb_blob_get_empty ();
  407|    247|    }
  408|  1.12k|  }
_ZN25hb_sanitize_with_object_tC2IPKN3AAT13ChainSubtableINS1_13ObsoleteTypesEEEEEP21hb_sanitize_context_tRKT_:
  433|  22.0k|  { c->set_object (obj); }
_ZN21hb_sanitize_context_t10set_objectIN3AAT13ChainSubtableINS1_13ObsoleteTypesEEEEEvPKT_:
  176|  22.0k|  {
  177|  22.0k|    reset_object ();
  178|       |
  179|  22.0k|    if (!obj) return;
  ------------------
  |  Branch (179:9): [True: 0, False: 22.0k]
  ------------------
  180|       |
  181|  22.0k|    const char *obj_start = (const char *) obj;
  182|  22.0k|    if (unlikely (obj_start < this->start || this->end <= obj_start))
  ------------------
  |  |  259|  44.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22.0k]
  |  |  |  Branch (259:47): [True: 0, False: 22.0k]
  |  |  |  Branch (259:47): [True: 0, False: 22.0k]
  |  |  ------------------
  ------------------
  183|      0|      this->start = this->end = nullptr;
  184|  22.0k|    else
  185|  22.0k|    {
  186|  22.0k|      this->start = obj_start;
  187|  22.0k|      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
  188|  22.0k|    }
  189|  22.0k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ObsoleteTypesEvEEEEbPKT_:
  312|    562|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    562|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT10ClassTableINS1_7IntTypeIhLj1EEEEENS5_ItLj2EEELb0EEEEEbPKT_:
  312|  1.46k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.46k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10ClassTableIN2OT7IntTypeIhLj1EEEEEEEbPKT_:
  312|  1.46k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.46k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ObsoleteTypesENS1_18ContextualSubtableIS3_E9EntryDataEEEEEbPKT_:
  312|    340|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    340|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_18ContextualSubtableINS1_13ObsoleteTypesEE9EntryDataEEEEEbPKT_j:
  286|    520|  {
  287|    520|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    520|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    520|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_18ContextualSubtableINS1_13ObsoleteTypesEE9EntryDataEEEEEbPKT_jj:
  267|    520|  {
  268|    520|    unsigned m;
  269|    520|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 520, False: 0]
  ------------------
  270|    520|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 509, False: 11]
  ------------------
  271|    520|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_23UnsizedListOfOffset16ToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEES9_Lb0EEEEEbPKT_:
  312|    304|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    304|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEEEEbPKT_j:
  286|    304|  {
  287|    304|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    304|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    304|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToIN3AAT6LookupINS1_11HBGlyphID16EEENS1_7IntTypeItLj2EEELb0EEEEEbPKT_jj:
  267|    304|  {
  268|    304|    unsigned m;
  269|    304|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 304, False: 0]
  ------------------
  270|    304|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 304, False: 0]
  ------------------
  271|    304|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT16LigatureSubtableINS1_13ObsoleteTypesEEEEEbPKT_:
  312|    179|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    179|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT17InsertionSubtableINS1_13ObsoleteTypesEEEEEbPKT_:
  312|    566|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    566|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ObsoleteTypesENS1_17InsertionSubtableIS3_E9EntryDataEEEEEbPKT_:
  312|    565|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    565|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_17InsertionSubtableINS1_13ObsoleteTypesEE9EntryDataEEEEEbPKT_j:
  286|    722|  {
  287|    722|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    722|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    722|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_17InsertionSubtableINS1_13ObsoleteTypesEE9EntryDataEEEEEbPKT_jj:
  267|    722|  {
  268|    722|    unsigned m;
  269|    722|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 722, False: 0]
  ------------------
  270|    722|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 713, False: 9]
  ------------------
  271|    722|  }
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4kerxEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.1k|  {
  413|  33.1k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 33.1k, False: 0]
  ------------------
  414|  33.1k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.1k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.1k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4kerxEEEP9hb_blob_tS4_:
  345|  33.1k|  {
  346|  33.1k|    bool sane;
  347|       |
  348|  33.1k|    init (blob);
  349|       |
  350|  33.1k|  retry:
  351|  33.1k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.1k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.1k|    start_processing ();
  354|       |
  355|  33.1k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.4k, False: 1.67k]
  |  |  ------------------
  ------------------
  356|  31.4k|    {
  357|  31.4k|      end_processing ();
  358|  31.4k|      return blob;
  359|  31.4k|    }
  360|       |
  361|  1.67k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.67k|    sane = t->sanitize (this);
  364|  1.67k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.28k, False: 390]
  ------------------
  365|  1.28k|    {
  366|  1.28k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.28k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.28k|    }
  379|    390|    else
  380|    390|    {
  381|    390|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 390]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    390|    }
  394|       |
  395|  1.67k|    end_processing ();
  396|       |
  397|  1.67k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  3.34k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.67k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.28k, False: 390]
  |  |  ------------------
  ------------------
  398|  1.67k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.28k, False: 390]
  ------------------
  399|  1.28k|    {
  400|  1.28k|      hb_blob_make_immutable (blob);
  401|  1.28k|      return blob;
  402|  1.28k|    }
  403|    390|    else
  404|    390|    {
  405|    390|      hb_blob_destroy (blob);
  406|    390|      return hb_blob_get_empty ();
  407|    390|    }
  408|  1.67k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT18KerxSubTableHeaderEEEbPKT_:
  312|  3.37k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.37k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN25hb_sanitize_with_object_tC2IPKN3AAT12KerxSubTableEEEP21hb_sanitize_context_tRKT_:
  433|  10.6k|  { c->set_object (obj); }
_ZN21hb_sanitize_context_t10set_objectIN3AAT12KerxSubTableEEEvPKT_:
  176|  10.6k|  {
  177|  10.6k|    reset_object ();
  178|       |
  179|  10.6k|    if (!obj) return;
  ------------------
  |  Branch (179:9): [True: 8.85k, False: 1.74k]
  ------------------
  180|       |
  181|  1.74k|    const char *obj_start = (const char *) obj;
  182|  1.74k|    if (unlikely (obj_start < this->start || this->end <= obj_start))
  ------------------
  |  |  259|  3.49k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.74k]
  |  |  |  Branch (259:47): [True: 0, False: 1.74k]
  |  |  |  Branch (259:47): [True: 0, False: 1.74k]
  |  |  ------------------
  ------------------
  183|      0|      this->start = this->end = nullptr;
  184|  1.74k|    else
  185|  1.74k|    {
  186|  1.74k|      this->start = obj_start;
  187|  1.74k|      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
  188|  1.74k|    }
  189|  1.74k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT15BinSearchHeaderINS1_7IntTypeIjLj4EEEEEEEbPKT_:
  312|    151|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    151|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT8KernPairEEEbPKT_j:
  286|    481|  {
  287|    481|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    481|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    481|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT8KernPairEEEbPKT_jj:
  267|    481|  {
  268|    481|    unsigned m;
  269|    481|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 480, False: 1]
  ------------------
  270|    481|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 460, False: 20]
  ------------------
  271|    481|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat1INS1_18KerxSubTableHeaderEEEEEbPKT_:
  312|    229|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    229|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesENS1_12Format1EntryILb1EE9EntryDataEEEEEbPKT_:
  312|    228|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    228|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_12Format1EntryILb1EE9EntryDataEEEEEbPKT_j:
  286|    358|  {
  287|    358|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    358|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    358|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_12Format1EntryILb1EE9EntryDataEEEEEbPKT_jj:
  267|    358|  {
  268|    358|    unsigned m;
  269|    358|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 358, False: 0]
  ------------------
  270|    358|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 341, False: 17]
  ------------------
  271|    358|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat2INS1_18KerxSubTableHeaderEEEEEbPKT_:
  312|    158|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    158|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat4INS1_18KerxSubTableHeaderEEEEEbPKT_:
  312|    316|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    316|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10StateTableINS1_13ExtendedTypesENS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEEEEbPKT_:
  312|    314|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    314|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT5EntryINS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEEEEbPKT_j:
  286|    558|  {
  287|    558|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    558|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    558|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT5EntryINS1_19KerxSubTableFormat4INS1_18KerxSubTableHeaderEE9EntryDataEEEEEbPKT_jj:
  267|    558|  {
  268|    558|    unsigned m;
  269|    558|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 558, False: 0]
  ------------------
  270|    558|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 548, False: 10]
  ------------------
  271|    558|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat6INS1_18KerxSubTableHeaderEEEEEbPKT_:
  312|    676|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    676|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT6LookupINS1_7IntTypeIjLj4EEEEES6_Lb0EEEEEbPKT_:
  312|    799|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    799|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIjLj4EEEEEbPKT_j:
  286|  1.04k|  {
  287|  1.04k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.04k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.04k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIjLj4EEEEEbPKT_jj:
  267|  1.04k|  {
  268|  1.04k|    unsigned m;
  269|  1.04k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.04k, False: 0]
  ------------------
  270|  1.04k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 998, False: 51]
  ------------------
  271|  1.04k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT18LookupSegmentArrayIN2OT7IntTypeIjLj4EEEEEEEbPKT_:
  312|    313|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    313|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7IntTypeIjLj4EEEEENS4_ItLj2EEELb0EEEEEbPKT_:
  312|    303|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    303|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT13LookupFormat8IN2OT7IntTypeIjLj4EEEEEEEbPKT_:
  312|     44|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     44|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT14LookupFormat10IN2OT7IntTypeIjLj4EEEEEEEbPKT_:
  312|     91|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     91|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4ankrEEEP9hb_blob_tPK9hb_face_tj:
  412|  1.28k|  {
  413|  1.28k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 1.28k, False: 0]
  ------------------
  414|  1.28k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  1.28k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  1.28k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4ankrEEEP9hb_blob_tS4_:
  345|  1.28k|  {
  346|  1.28k|    bool sane;
  347|       |
  348|  1.28k|    init (blob);
  349|       |
  350|  1.42k|  retry:
  351|  1.42k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  1.42k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.42k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  1.42k|    start_processing ();
  354|       |
  355|  1.42k|    if (unlikely (!start))
  ------------------
  |  |  259|  1.42k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 922, False: 505]
  |  |  ------------------
  ------------------
  356|    922|    {
  357|    922|      end_processing ();
  358|    922|      return blob;
  359|    922|    }
  360|       |
  361|    505|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    505|    sane = t->sanitize (this);
  364|    505|    if (sane)
  ------------------
  |  Branch (364:9): [True: 298, False: 207]
  ------------------
  365|    298|    {
  366|    298|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 147, False: 151]
  ------------------
  367|    147|      {
  368|    147|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    147|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    147|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    147|	edit_count = 0;
  372|    147|	sane = t->sanitize (this);
  373|    147|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 147]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|    147|      }
  378|    298|    }
  379|    207|    else
  380|    207|    {
  381|    207|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 182, False: 25]
  |  Branch (381:25): [True: 182, False: 0]
  ------------------
  382|    182|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    182|	end = start + blob->length;
  384|       |
  385|    182|	if (start)
  ------------------
  |  Branch (385:6): [True: 147, False: 35]
  ------------------
  386|    147|	{
  387|    147|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    147|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    147|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    147|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    147|	  goto retry;
  391|    147|	}
  392|    182|      }
  393|    207|    }
  394|       |
  395|    358|    end_processing ();
  396|       |
  397|    358|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    716|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    358|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 292, False: 66]
  |  |  ------------------
  ------------------
  398|    358|    if (sane)
  ------------------
  |  Branch (398:9): [True: 292, False: 66]
  ------------------
  399|    292|    {
  400|    292|      hb_blob_make_immutable (blob);
  401|    292|      return blob;
  402|    292|    }
  403|     66|    else
  404|     66|    {
  405|     66|      hb_blob_destroy (blob);
  406|     66|      return hb_blob_get_empty ();
  407|     66|    }
  408|    358|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT4ankrEEEbPKT_:
  312|    652|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    652|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT6LookupINS2_INS1_7ArrayOfINS3_6AnchorENS1_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEES8_Lb1EEEEEbPKT_:
  312|    622|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    622|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEbPKT_j:
  286|    427|  {
  287|    427|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    427|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    427|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEbPKT_jj:
  267|    427|  {
  268|    427|    unsigned m;
  269|    427|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 427, False: 0]
  ------------------
  270|    427|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 400, False: 27]
  ------------------
  271|    427|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS6_ItLj2EEELb0EEEEEbPKT_:
  312|  2.78k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.78k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT6AnchorEEEbPKT_j:
  286|  2.70k|  {
  287|  2.70k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  2.70k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  2.70k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT6AnchorEEEbPKT_jj:
  267|  2.70k|  {
  268|  2.70k|    unsigned m;
  269|  2.70k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.68k, False: 13]
  ------------------
  270|  2.70k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 2.60k, False: 83]
  ------------------
  271|  2.70k|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT19LookupSegmentSingleIN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEEEbPKT_:
  312|    989|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    989|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT18LookupSegmentArrayIN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEEEbPKT_:
  312|    350|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    350|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS2_INS1_7ArrayOfIN3AAT6AnchorENS1_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEESA_Lb0EEEEEbPKT_:
  312|    339|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    339|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT12LookupSingleIN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEEEbPKT_:
  312|    354|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    354|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT13LookupFormat8IN2OT8OffsetToINS3_7ArrayOfINS1_6AnchorENS3_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEEEEbPKT_:
  312|     56|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     56|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToIN3AAT6LookupINS2_INS1_7ArrayOfINS3_6AnchorENS1_7IntTypeIjLj4EEEEENS7_ItLj2EEELb0EEEEES8_Lb1EEEiEEbPKT_RKT0_:
  334|    329|  {
  335|    329|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    329|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 147, False: 182]
  ------------------
  336|    147|    {
  337|    147|      * const_cast<Type *> (obj) = v;
  338|    147|      return true;
  339|    147|    }
  340|    182|    return false;
  341|    329|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIsLj2EEEEEbPKT_j:
  286|   290k|  {
  287|   290k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   290k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   290k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIsLj2EEEEEbPKT_jj:
  267|  3.30M|  {
  268|  3.30M|    unsigned m;
  269|  3.30M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.12M, False: 178k]
  ------------------
  270|  3.30M|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.30M, False: 1.82M]
  ------------------
  271|  3.30M|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIsLj2EEEEEbPKT_jj:
  294|  3.12M|  {
  295|  3.12M|    return this->check_range (base, a, b, hb_static_size (T));
  ------------------
  |  |   91|  3.12M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  296|  3.12M|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIsLj2EEEEEbPKT_jjj:
  278|  3.12M|  {
  279|  3.12M|    unsigned m;
  280|  3.12M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (280:12): [True: 3.01M, False: 108k]
  ------------------
  281|  3.12M|	   this->check_range (base, m, c);
  ------------------
  |  Branch (281:5): [True: 1.22M, False: 1.78M]
  ------------------
  282|  3.12M|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeIsLj2EEEEEbPKT_:
  312|   388k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   388k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeIiLj4EEEEEbPKT_:
  312|  48.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  48.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4trakEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.4k|  {
  413|  32.4k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.4k, False: 0]
  ------------------
  414|  32.4k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.4k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.4k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4trakEEEP9hb_blob_tS4_:
  345|  32.4k|  {
  346|  32.4k|    bool sane;
  347|       |
  348|  32.4k|    init (blob);
  349|       |
  350|  32.4k|  retry:
  351|  32.4k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.4k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.4k|    start_processing ();
  354|       |
  355|  32.4k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.3k, False: 143]
  |  |  ------------------
  ------------------
  356|  32.3k|    {
  357|  32.3k|      end_processing ();
  358|  32.3k|      return blob;
  359|  32.3k|    }
  360|       |
  361|    143|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    143|    sane = t->sanitize (this);
  364|    143|    if (sane)
  ------------------
  |  Branch (364:9): [True: 72, False: 71]
  ------------------
  365|     72|    {
  366|     72|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 65, False: 7]
  ------------------
  367|     65|      {
  368|     65|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|     65|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     65|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|     65|	edit_count = 0;
  372|     65|	sane = t->sanitize (this);
  373|     65|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 7, False: 58]
  ------------------
  374|      7|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      7|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      7|	  sane = false;
  376|      7|	}
  377|     65|      }
  378|     72|    }
  379|     71|    else
  380|     71|    {
  381|     71|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 69, False: 2]
  |  Branch (381:25): [True: 68, False: 1]
  ------------------
  382|     68|	start = hb_blob_get_data_writable (blob, nullptr);
  383|     68|	end = start + blob->length;
  384|       |
  385|     68|	if (start)
  ------------------
  |  Branch (385:6): [True: 66, False: 2]
  ------------------
  386|     66|	{
  387|     66|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|     66|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|     66|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     66|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|     66|	  goto retry;
  391|     66|	}
  392|     68|      }
  393|     71|    }
  394|       |
  395|     77|    end_processing ();
  396|       |
  397|     77|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    154|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     77|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 59, False: 18]
  |  |  ------------------
  ------------------
  398|     77|    if (sane)
  ------------------
  |  Branch (398:9): [True: 59, False: 18]
  ------------------
  399|     59|    {
  400|     59|      hb_blob_make_immutable (blob);
  401|     59|      return blob;
  402|     59|    }
  403|     18|    else
  404|     18|    {
  405|     18|      hb_blob_destroy (blob);
  406|     18|      return hb_blob_get_empty ();
  407|     18|    }
  408|     77|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT4trakEEEbPKT_:
  312|    208|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    208|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT9TrackDataENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|    348|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    348|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT9TrackDataEEEbPKT_:
  312|    242|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    242|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIiLj4EEELj16EEEEENS5_IjLj4EEELb0EEEEEbPKT_:
  312|    179|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    179|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7HBFixedINS1_7IntTypeIiLj4EEELj16EEEEEbPKT_j:
  286|    179|  {
  287|    179|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    179|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    179|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7HBFixedINS1_7IntTypeIiLj4EEELj16EEEEEbPKT_jj:
  267|    179|  {
  268|    179|    unsigned m;
  269|    179|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 179, False: 0]
  ------------------
  270|    179|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 125, False: 54]
  ------------------
  271|    179|  }
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT15TrackTableEntryEEEbPKT_j:
  286|    125|  {
  287|    125|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    125|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    125|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT15TrackTableEntryEEEbPKT_jj:
  267|    125|  {
  268|    125|    unsigned m;
  269|    125|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 125, False: 0]
  ------------------
  270|    125|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 108, False: 17]
  ------------------
  271|    125|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT15TrackTableEntryEEEbPKT_:
  312|  11.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7IntTypeIsLj2EEEEENS4_ItLj2EEELb0EEEEEbPKT_:
  312|  11.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToIN3AAT9TrackDataENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    171|  {
  335|    171|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    171|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 103, False: 68]
  ------------------
  336|    103|    {
  337|    103|      * const_cast<Type *> (obj) = v;
  338|    103|      return true;
  339|    103|    }
  340|     68|    return false;
  341|    171|  }
_ZN21hb_sanitize_context_t15reference_tableIN3AAT4featEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 33.2k, False: 0]
  ------------------
  414|  33.2k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN3AAT4featEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.2k, False: 36]
  |  |  ------------------
  ------------------
  356|  33.2k|    {
  357|  33.2k|      end_processing ();
  358|  33.2k|      return blob;
  359|  33.2k|    }
  360|       |
  361|     36|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|     36|    sane = t->sanitize (this);
  364|     36|    if (sane)
  ------------------
  |  Branch (364:9): [True: 20, False: 16]
  ------------------
  365|     20|    {
  366|     20|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 20]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|     20|    }
  379|     16|    else
  380|     16|    {
  381|     16|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 16]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     16|    }
  394|       |
  395|     36|    end_processing ();
  396|       |
  397|     36|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|     72|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     36|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 20, False: 16]
  |  |  ------------------
  ------------------
  398|     36|    if (sane)
  ------------------
  |  Branch (398:9): [True: 20, False: 16]
  ------------------
  399|     20|    {
  400|     20|      hb_blob_make_immutable (blob);
  401|     20|      return blob;
  402|     20|    }
  403|     16|    else
  404|     16|    {
  405|     16|      hb_blob_destroy (blob);
  406|     16|      return hb_blob_get_empty ();
  407|     16|    }
  408|     36|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT4featEEEbPKT_:
  312|     36|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     36|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT11FeatureNameEEEbPKT_j:
  286|     33|  {
  287|     33|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     33|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     33|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT11FeatureNameEEEbPKT_jj:
  267|     33|  {
  268|     33|    unsigned m;
  269|     33|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 33, False: 0]
  ------------------
  270|     33|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 28, False: 5]
  ------------------
  271|     33|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT11FeatureNameEEEbPKT_:
  312|    448|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    448|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3AAT11SettingNameEEEbPKT_j:
  286|    448|  {
  287|    448|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    448|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    448|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3AAT11SettingNameEEEbPKT_jj:
  267|    448|  {
  268|    448|    unsigned m;
  269|    448|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 448, False: 0]
  ------------------
  270|    448|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 440, False: 8]
  ------------------
  271|    448|  }
_ZN21hb_sanitize_context_t24no_dispatch_return_valueEv:
  137|   102k|  static return_t no_dispatch_return_value () { return false; }
_ZN21hb_sanitize_context_t15visit_subtablesEj:
  141|   189k|  {
  142|   189k|    max_subtables += count;
  143|   189k|    return max_subtables < HB_SANITIZE_MAX_SUBTABLES;
  ------------------
  |  |  117|   189k|#define HB_SANITIZE_MAX_SUBTABLES 0x4000
  ------------------
  144|   189k|  }
_ZN21hb_sanitize_context_t14get_edit_countEv:
  229|  4.88k|  unsigned get_edit_count () { return edit_count; }
_ZN21hb_sanitize_context_t9check_opsEj:
  233|  7.65k|  {
  234|       |    /* Avoid underflow */
  235|  7.65k|    if (unlikely (this->max_ops < 0 || count >= (unsigned) this->max_ops))
  ------------------
  |  |  259|  15.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 127, False: 7.52k]
  |  |  |  Branch (259:47): [True: 7, False: 7.64k]
  |  |  |  Branch (259:47): [True: 120, False: 7.52k]
  |  |  ------------------
  ------------------
  236|    127|    {
  237|    127|      this->max_ops = -1;
  238|    127|      return false;
  239|    127|    }
  240|  7.52k|    return (this->max_ops -= (int) count) > 0;
  241|  7.65k|  }
_ZN21hb_sanitize_context_t21check_start_recursionEi:
  299|  4.59M|  {
  300|  4.59M|    if (unlikely (recursion_depth >= max_depth)) return false;
  ------------------
  |  |  259|  4.59M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 75, False: 4.59M]
  |  |  ------------------
  ------------------
  301|  4.59M|    return ++recursion_depth;
  302|  4.59M|  }
_ZN21hb_sanitize_context_t13end_recursionEb:
  305|  4.59M|  {
  306|  4.59M|    recursion_depth--;
  307|  4.59M|    return result;
  308|  4.59M|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT7IntTypeIhLj1EEEEEbPKT_:
  312|  4.60M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.60M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17FeatureParamsSizeEEEbPKT_:
  312|  1.05k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.05k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT25FeatureParamsStylisticSetEEEbPKT_:
  312|    557|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    557|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT30FeatureParamsCharacterVariantsEEEbPKT_:
  312|  1.08k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.08k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIjLj3EEEEEbPKT_j:
  286|   174k|  {
  287|   174k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   174k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   174k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIjLj3EEEEEbPKT_jj:
  267|   174k|  {
  268|   174k|    unsigned m;
  269|   174k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 174k, False: 0]
  ------------------
  270|   174k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 172k, False: 1.12k]
  ------------------
  271|   174k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT7FeatureEEEbPKT_:
  312|   312k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   312k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT5IndexEEEbPKT_j:
  286|  1.01M|  {
  287|  1.01M|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.01M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.01M|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT5IndexEEEbPKT_jj:
  267|  1.01M|  {
  268|  1.01M|    unsigned m;
  269|  1.01M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.01M, False: 0]
  ------------------
  270|  1.01M|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.00M, False: 6.44k]
  ------------------
  271|  1.01M|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13FeatureParamsENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   194k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   194k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13FeatureParamsENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.08k|  {
  335|  1.08k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.08k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.01k, False: 72]
  ------------------
  336|  1.01k|    {
  337|  1.01k|      * const_cast<Type *> (obj) = v;
  338|  1.01k|      return true;
  339|  1.01k|    }
  340|     72|    return false;
  341|  1.08k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13FeatureParamsENS1_7IntTypeItLj2EEELb1EEEjEEbPKT_RKT0_:
  334|    348|  {
  335|    348|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    348|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 337, False: 11]
  ------------------
  336|    337|    {
  337|    337|      * const_cast<Type *> (obj) = v;
  338|    337|      return true;
  339|    337|    }
  340|     11|    return false;
  341|    348|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT7LangSysEEEbPKT_:
  312|   715k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   715k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7LangSysENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  17.5M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  17.5M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7LangSysENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  10.5k|  {
  335|  10.5k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  10.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 8.79k, False: 1.71k]
  ------------------
  336|  8.79k|    {
  337|  8.79k|      * const_cast<Type *> (obj) = v;
  338|  8.79k|      return true;
  339|  8.79k|    }
  340|  1.71k|    return false;
  341|  10.5k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6RecordINS1_7LangSysEEEEEbPKT_j:
  286|  64.4k|  {
  287|  64.4k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  64.4k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  64.4k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6RecordINS1_7LangSysEEEEEbPKT_jj:
  267|  64.4k|  {
  268|  64.4k|    unsigned m;
  269|  64.4k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 64.4k, False: 0]
  ------------------
  270|  64.4k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 63.6k, False: 842]
  ------------------
  271|  64.4k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6RecordINS1_7LangSysEEEEEbPKT_:
  312|  17.4M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  17.4M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT16ConditionFormat1EEEbPKT_:
  312|    421|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    421|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|  1.28k|  {
  287|  1.28k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.28k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.28k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|  1.28k|  {
  268|  1.28k|    unsigned m;
  269|  1.28k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.28k, False: 0]
  ------------------
  270|  1.28k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.10k, False: 178]
  ------------------
  271|  1.28k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  7.87k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.87k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9ConditionENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.32k|  {
  335|  1.32k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.32k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.28k, False: 37]
  ------------------
  336|  1.28k|    {
  337|  1.28k|      * const_cast<Type *> (obj) = v;
  338|  1.28k|      return true;
  339|  1.28k|    }
  340|     37|    return false;
  341|  1.32k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT30FeatureTableSubstitutionRecordEEEbPKT_:
  312|  8.47k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  8.47k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7FeatureENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  8.45k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  8.45k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7FeatureENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.84k|  {
  335|  1.84k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.84k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.82k, False: 22]
  ------------------
  336|  1.82k|    {
  337|  1.82k|      * const_cast<Type *> (obj) = v;
  338|  1.82k|      return true;
  339|  1.82k|    }
  340|     22|    return false;
  341|  1.84k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT30FeatureTableSubstitutionRecordEEEbPKT_j:
  286|  1.15k|  {
  287|  1.15k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.15k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.15k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT30FeatureTableSubstitutionRecordEEEbPKT_jj:
  267|  1.15k|  {
  268|  1.15k|    unsigned m;
  269|  1.15k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.15k, False: 0]
  ------------------
  270|  1.15k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.09k, False: 65]
  ------------------
  271|  1.15k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12ConditionSetENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  6.37k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.37k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12ConditionSetENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  2.08k|  {
  335|  2.08k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.08k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.98k, False: 102]
  ------------------
  336|  1.98k|    {
  337|  1.98k|      * const_cast<Type *> (obj) = v;
  338|  1.98k|      return true;
  339|  1.98k|    }
  340|    102|    return false;
  341|  2.08k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_24FeatureTableSubstitutionENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  6.24k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.24k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_24FeatureTableSubstitutionENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.99k|  {
  335|  1.99k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.99k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.89k, False: 95]
  ------------------
  336|  1.89k|    {
  337|  1.89k|      * const_cast<Type *> (obj) = v;
  338|  1.89k|      return true;
  339|  1.89k|    }
  340|     95|    return false;
  341|  1.99k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT22FeatureVariationRecordEEEbPKT_j:
  286|  1.63k|  {
  287|  1.63k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.63k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.63k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT22FeatureVariationRecordEEEbPKT_jj:
  267|  1.63k|  {
  268|  1.63k|    unsigned m;
  269|  1.63k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.62k, False: 13]
  ------------------
  270|  1.63k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.57k, False: 51]
  ------------------
  271|  1.63k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT14ContextFormat3EEEbPKT_:
  312|  5.08k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.08k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  39.7k|  {
  287|  39.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  39.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  39.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  39.7k|  {
  268|  39.7k|    unsigned m;
  269|  39.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 39.7k, False: 0]
  ------------------
  270|  39.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 39.0k, False: 683]
  ------------------
  271|  39.7k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT12LookupRecordEEEbPKT_j:
  286|   479k|  {
  287|   479k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   479k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   479k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT12LookupRecordEEEbPKT_jj:
  267|   479k|  {
  268|   479k|    unsigned m;
  269|   479k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 479k, False: 0]
  ------------------
  270|   479k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 478k, False: 1.00k]
  ------------------
  271|   479k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16SinglePosFormat1EEEbPKT_:
  312|  3.48k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.48k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16SinglePosFormat2EEEbPKT_:
  312|  5.58k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.58k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl13AnchorFormat1EEEbPKT_:
  312|   548k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   548k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl13AnchorFormat2EEEbPKT_:
  312|   279k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   279k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl13AnchorFormat3EEEbPKT_:
  312|   530k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   530k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl6AnchorENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  24.3M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  24.3M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl6AnchorENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  5.26k|  {
  335|  5.26k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  5.26k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 5.03k, False: 226]
  ------------------
  336|  5.03k|    {
  337|  5.03k|      * const_cast<Type *> (obj) = v;
  338|  5.03k|      return true;
  339|  5.03k|    }
  340|    226|    return false;
  341|  5.26k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6Layout9GPOS_impl15EntryExitRecordEEEbPKT_j:
  286|  8.21k|  {
  287|  8.21k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  8.21k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  8.21k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout9GPOS_impl15EntryExitRecordEEEbPKT_jj:
  267|  8.21k|  {
  268|  8.21k|    unsigned m;
  269|  8.21k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 8.21k, False: 0]
  ------------------
  270|  8.21k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 8.10k, False: 116]
  ------------------
  271|  8.21k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl12AnchorMatrixEEEbPKT_:
  312|  1.59M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.59M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl6AnchorENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  1.59M|  {
  287|  1.59M|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.59M|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.59M|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl6AnchorENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  1.59M|  {
  268|  1.59M|    unsigned m;
  269|  1.59M|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.59M, False: 73]
  ------------------
  270|  1.59M|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.59M, False: 676]
  ------------------
  271|  1.59M|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl10MarkRecordEEEbPKT_:
  312|  11.0M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.0M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6Layout9GPOS_impl10MarkRecordEEEbPKT_j:
  286|  15.6k|  {
  287|  15.6k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  15.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  15.6k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout9GPOS_impl10MarkRecordEEEbPKT_jj:
  267|  15.6k|  {
  268|  15.6k|    unsigned m;
  269|  15.6k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 15.6k, False: 0]
  ------------------
  270|  15.6k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 15.2k, False: 431]
  ------------------
  271|  15.6k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6LookupEEEbPKT_:
  312|   225k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   225k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6OffsetINS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|   201k|  {
  287|   201k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   201k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   201k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6OffsetINS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|   201k|  {
  268|   201k|    unsigned m;
  269|   201k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 201k, False: 0]
  ------------------
  270|   201k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 190k, False: 11.8k]
  ------------------
  271|   201k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  78.8k|  {
  287|  78.8k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  78.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  78.8k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  78.8k|  {
  268|  78.8k|    unsigned m;
  269|  78.8k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 78.8k, False: 0]
  ------------------
  270|  78.8k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 78.8k, False: 11]
  ------------------
  271|  78.8k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  3.18M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.18M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl9SinglePosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  40.6k|  { return format->sanitize (this); }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl7PairPosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|   121k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_10SmallTypesEEEEEbPKT_:
  312|  14.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  14.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  14.3k|  {
  287|  14.3k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  14.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  14.3k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  14.3k|  {
  268|  14.3k|    unsigned m;
  269|  14.3k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 14.3k, False: 0]
  ------------------
  270|  14.3k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 14.1k, False: 201]
  ------------------
  271|  14.3k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   120k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   120k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl7PairSetINS2_10SmallTypesEEEEEbPKT_:
  312|  49.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  49.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout9GPOS_impl15PairValueRecordINS2_10SmallTypesEEEEEbPKT_jj:
  267|  47.4k|  {
  268|  47.4k|    unsigned m;
  269|  47.4k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 47.4k, False: 0]
  ------------------
  270|  47.4k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 45.9k, False: 1.49k]
  ------------------
  271|  47.4k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  3.45k|  {
  335|  3.45k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  3.45k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 3.11k, False: 347]
  ------------------
  336|  3.11k|    {
  337|  3.11k|      * const_cast<Type *> (obj) = v;
  338|  3.11k|      return true;
  339|  3.11k|    }
  340|    347|    return false;
  341|  3.45k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_10SmallTypesEEEEEbPKT_:
  312|  10.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  10.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_rangeIvEEbPKT_jj:
  267|  16.2k|  {
  268|  16.2k|    unsigned m;
  269|  16.2k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 15.9k, False: 211]
  ------------------
  270|  16.2k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 15.2k, False: 725]
  ------------------
  271|  16.2k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16PairPosFormat1_3INS2_11MediumTypesEEEEEbPKT_:
  312|  4.05k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.05k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   135k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   135k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  3.92k|  {
  335|  3.92k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  3.92k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 3.54k, False: 382]
  ------------------
  336|  3.54k|    {
  337|  3.54k|      * const_cast<Type *> (obj) = v;
  338|  3.54k|      return true;
  339|  3.54k|    }
  340|    382|    return false;
  341|  3.92k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  3.95k|  {
  287|  3.95k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  3.95k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  3.95k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  3.95k|  {
  268|  3.95k|    unsigned m;
  269|  3.95k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.95k, False: 0]
  ------------------
  270|  3.95k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 3.73k, False: 219]
  ------------------
  271|  3.95k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  68.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  68.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl7PairSetINS2_11MediumTypesEEEEEbPKT_:
  312|  3.87k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.87k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6Layout9GPOS_impl15PairValueRecordINS2_11MediumTypesEEEEEbPKT_jj:
  267|  2.49k|  {
  268|  2.49k|    unsigned m;
  269|  2.49k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.49k, False: 0]
  ------------------
  270|  2.49k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 2.27k, False: 224]
  ------------------
  271|  2.49k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl7PairSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.63k|  {
  335|  1.63k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.63k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.54k, False: 82]
  ------------------
  336|  1.54k|    {
  337|  1.54k|      * const_cast<Type *> (obj) = v;
  338|  1.54k|      return true;
  339|  1.54k|    }
  340|     82|    return false;
  341|  1.63k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl16PairPosFormat2_4INS2_11MediumTypesEEEEEbPKT_:
  312|  5.49k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.49k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl10CursivePosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  34.8k|  { return format->sanitize (this); }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl11MarkBasePosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  70.0k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_10SmallTypesEEEEEbPKT_:
  312|  9.08k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  9.08k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl9MarkArrayENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  23.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  23.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl9MarkArrayENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    809|  {
  335|    809|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    809|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 651, False: 158]
  ------------------
  336|    651|    {
  337|    651|      * const_cast<Type *> (obj) = v;
  338|    651|      return true;
  339|    651|    }
  340|    158|    return false;
  341|    809|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  2.27M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.27M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.61k|  {
  335|  1.61k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.61k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.50k, False: 112]
  ------------------
  336|  1.50k|    {
  337|  1.50k|      * const_cast<Type *> (obj) = v;
  338|  1.50k|      return true;
  339|  1.50k|    }
  340|    112|    return false;
  341|  1.61k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl20MarkBasePosFormat1_2INS2_11MediumTypesEEEEEbPKT_:
  312|  7.33k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.33k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl9MarkArrayENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  22.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  22.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl9MarkArrayENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    806|  {
  335|    806|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    806|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 773, False: 33]
  ------------------
  336|    773|    {
  337|    773|      * const_cast<Type *> (obj) = v;
  338|    773|      return true;
  339|    773|    }
  340|     33|    return false;
  341|    806|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  15.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  15.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    611|  {
  335|    611|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    611|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 591, False: 20]
  ------------------
  336|    591|    {
  337|    591|      * const_cast<Type *> (obj) = v;
  338|    591|      return true;
  339|    591|    }
  340|     20|    return false;
  341|    611|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl10MarkLigPosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|   113k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_10SmallTypesEEEEEbPKT_:
  312|  7.12k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.12k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl13LigatureArrayENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  6.96k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.96k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  4.39k|  {
  287|  4.39k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  4.39k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  4.39k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl12AnchorMatrixENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  4.39k|  {
  268|  4.39k|    unsigned m;
  269|  4.39k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 4.39k, False: 0]
  ------------------
  270|  4.39k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 4.25k, False: 140]
  ------------------
  271|  4.39k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl13LigatureArrayENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    261|  {
  335|    261|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    261|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 206, False: 55]
  ------------------
  336|    206|    {
  337|    206|      * const_cast<Type *> (obj) = v;
  338|    206|      return true;
  339|    206|    }
  340|     55|    return false;
  341|    261|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl19MarkLigPosFormat1_2INS2_11MediumTypesEEEEEbPKT_:
  312|  6.53k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.53k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl13LigatureArrayENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  6.40k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.40k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl13LigatureArrayENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    262|  {
  335|    262|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    262|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 249, False: 13]
  ------------------
  336|    249|    {
  337|    249|      * const_cast<Type *> (obj) = v;
  338|    249|      return true;
  339|    249|    }
  340|     13|    return false;
  341|    262|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GPOS_impl11MarkMarkPosENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  87.0k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_10SmallTypesEEEEEbPKT_:
  312|  7.82k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.82k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GPOS_impl20MarkMarkPosFormat1_2INS2_11MediumTypesEEEEEbPKT_:
  312|  8.82k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  8.82k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT7ContextENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|   203k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  33.9k|  {
  287|  33.9k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  33.9k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  33.9k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  33.9k|  {
  268|  33.9k|    unsigned m;
  269|  33.9k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 33.9k, False: 0]
  ------------------
  270|  33.9k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 33.2k, False: 678]
  ------------------
  271|  33.9k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  76.4k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  76.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  43.6k|  {
  287|  43.6k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  43.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  43.6k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  43.6k|  {
  268|  43.6k|    unsigned m;
  269|  43.6k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 43.6k, False: 0]
  ------------------
  270|  43.6k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 43.1k, False: 528]
  ------------------
  271|  43.6k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   219k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   219k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_4RuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  4.20k|  {
  335|  4.20k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  4.20k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 4.09k, False: 116]
  ------------------
  336|  4.09k|    {
  337|  4.09k|      * const_cast<Type *> (obj) = v;
  338|  4.09k|      return true;
  339|  4.09k|    }
  340|    116|    return false;
  341|  4.20k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.75k|  {
  335|  1.75k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.75k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.59k, False: 159]
  ------------------
  336|  1.59k|    {
  337|  1.59k|      * const_cast<Type *> (obj) = v;
  338|  1.59k|      return true;
  339|  1.59k|    }
  340|    159|    return false;
  341|  1.75k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  9.11k|  {
  287|  9.11k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  9.11k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  9.11k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  9.11k|  {
  268|  9.11k|    unsigned m;
  269|  9.11k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 9.11k, False: 0]
  ------------------
  270|  9.11k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 8.86k, False: 244]
  ------------------
  271|  9.11k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  6.40k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.40k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  2.12k|  {
  287|  2.12k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  2.12k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  2.12k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  2.12k|  {
  268|  2.12k|    unsigned m;
  269|  2.12k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.12k, False: 0]
  ------------------
  270|  2.12k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.99k, False: 135]
  ------------------
  271|  2.12k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  13.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  13.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_4RuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.17k|  {
  335|  1.17k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.17k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.14k, False: 28]
  ------------------
  336|  1.14k|    {
  337|  1.14k|      * const_cast<Type *> (obj) = v;
  338|  1.14k|      return true;
  339|  1.14k|    }
  340|     28|    return false;
  341|  1.17k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7RuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    999|  {
  335|    999|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    999|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 939, False: 60]
  ------------------
  336|    939|    {
  337|    939|      * const_cast<Type *> (obj) = v;
  338|    939|      return true;
  339|    939|    }
  340|     60|    return false;
  341|    999|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  31.7k|  {
  287|  31.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  31.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  31.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  31.7k|  {
  268|  31.7k|    unsigned m;
  269|  31.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 31.7k, False: 0]
  ------------------
  270|  31.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 31.6k, False: 151]
  ------------------
  271|  31.7k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  56.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  56.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7RuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    613|  {
  335|    613|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    613|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 596, False: 17]
  ------------------
  336|    596|    {
  337|    596|      * const_cast<Type *> (obj) = v;
  338|    596|      return true;
  339|    596|    }
  340|     17|    return false;
  341|    613|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT12ChainContextENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|   152k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  28.7k|  {
  287|  28.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  28.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  28.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  28.7k|  {
  268|  28.7k|    unsigned m;
  269|  28.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 28.7k, False: 0]
  ------------------
  270|  28.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 27.7k, False: 1.04k]
  ------------------
  271|  28.7k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   560k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   560k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  33.1k|  {
  287|  33.1k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  33.1k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  33.1k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  33.1k|  {
  268|  33.1k|    unsigned m;
  269|  33.1k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 33.1k, False: 0]
  ------------------
  270|  33.1k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 32.5k, False: 584]
  ------------------
  271|  33.1k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.92M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.92M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  5.53k|  {
  335|  5.53k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  5.53k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 5.39k, False: 147]
  ------------------
  336|  5.39k|    {
  337|  5.39k|      * const_cast<Type *> (obj) = v;
  338|  5.39k|      return true;
  339|  5.39k|    }
  340|    147|    return false;
  341|  5.53k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  2.12k|  {
  335|  2.12k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.12k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.92k, False: 201]
  ------------------
  336|  1.92k|    {
  337|  1.92k|      * const_cast<Type *> (obj) = v;
  338|  1.92k|      return true;
  339|  1.92k|    }
  340|    201|    return false;
  341|  2.12k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  6.39k|  {
  287|  6.39k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.39k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.39k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  6.39k|  {
  268|  6.39k|    unsigned m;
  269|  6.39k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.39k, False: 0]
  ------------------
  270|  6.39k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.10k, False: 286]
  ------------------
  271|  6.39k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  6.47k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.47k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  3.27k|  {
  287|  3.27k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  3.27k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  3.27k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  3.27k|  {
  268|  3.27k|    unsigned m;
  269|  3.27k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.27k, False: 0]
  ------------------
  270|  3.27k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 3.16k, False: 117]
  ------------------
  271|  3.27k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   301k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   301k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9ChainRuleINS1_6Layout11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  2.82k|  {
  335|  2.82k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.82k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.75k, False: 71]
  ------------------
  336|  2.75k|    {
  337|  2.75k|      * const_cast<Type *> (obj) = v;
  338|  2.75k|      return true;
  339|  2.75k|    }
  340|     71|    return false;
  341|  2.82k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.54k|  {
  335|  1.54k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.54k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.42k, False: 119]
  ------------------
  336|  1.42k|    {
  337|  1.42k|      * const_cast<Type *> (obj) = v;
  338|  1.42k|      return true;
  339|  1.42k|    }
  340|    119|    return false;
  341|  1.54k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  12.9k|  {
  287|  12.9k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  12.9k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  12.9k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  12.9k|  {
  268|  12.9k|    unsigned m;
  269|  12.9k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 12.9k, False: 0]
  ------------------
  270|  12.9k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 12.7k, False: 154]
  ------------------
  271|  12.9k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  29.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  29.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12ChainRuleSetINS1_6Layout10SmallTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.02k|  {
  335|  1.02k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.02k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 998, False: 28]
  ------------------
  336|    998|    {
  337|    998|      * const_cast<Type *> (obj) = v;
  338|    998|      return true;
  339|    998|    }
  340|     28|    return false;
  341|  1.02k|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT9ExtensionINS1_6Layout9GPOS_impl12ExtensionPosEEENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  18.9k|  { return format->sanitize (this); }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT16ExtensionFormat1INS1_6Layout9GPOS_impl12ExtensionPosEEES6_EEbPKT_PKT0_:
  135|  3.18k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT16ExtensionFormat1INS1_6Layout9GPOS_impl12ExtensionPosEEEEEbPKT_:
  312|  3.18k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.18k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl17PosLookupSubTableENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  41.8k|  {
  335|  41.8k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  41.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 38.5k, False: 3.36k]
  ------------------
  336|  38.5k|    {
  337|  38.5k|      * const_cast<Type *> (obj) = v;
  338|  38.5k|      return true;
  339|  38.5k|    }
  340|  3.36k|    return false;
  341|  41.8k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_18RecordListOfScriptENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  40.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  40.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6RecordINS1_6ScriptEEEEEbPKT_j:
  286|  37.5k|  {
  287|  37.5k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  37.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  37.5k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6RecordINS1_6ScriptEEEEEbPKT_jj:
  267|  37.5k|  {
  268|  37.5k|    unsigned m;
  269|  37.5k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 37.5k, False: 0]
  ------------------
  270|  37.5k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 36.6k, False: 997]
  ------------------
  271|  37.5k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6RecordINS1_6ScriptEEEEEbPKT_:
  312|  1.46M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.46M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6ScriptENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.46M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.46M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6ScriptENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  4.85k|  {
  335|  4.85k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  4.85k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.77k, False: 2.07k]
  ------------------
  336|  2.77k|    {
  337|  2.77k|      * const_cast<Type *> (obj) = v;
  338|  2.77k|      return true;
  339|  2.77k|    }
  340|  2.07k|    return false;
  341|  4.85k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_18RecordListOfScriptENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  4.43k|  {
  335|  4.43k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  4.43k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.25k, False: 3.18k]
  ------------------
  336|  1.25k|    {
  337|  1.25k|      * const_cast<Type *> (obj) = v;
  338|  1.25k|      return true;
  339|  1.25k|    }
  340|  3.18k|    return false;
  341|  4.43k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12RecordListOfINS1_7FeatureEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  37.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  37.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6RecordINS1_7FeatureEEEEEbPKT_j:
  286|  30.7k|  {
  287|  30.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  30.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  30.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6RecordINS1_7FeatureEEEEEbPKT_jj:
  267|  30.7k|  {
  268|  30.7k|    unsigned m;
  269|  30.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 30.7k, False: 0]
  ------------------
  270|  30.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 29.7k, False: 1.00k]
  ------------------
  271|  30.7k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT6RecordINS1_7FeatureEEEEEbPKT_:
  312|  1.58M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.58M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7FeatureENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.58M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.58M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7FeatureENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  9.40k|  {
  335|  9.40k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  9.40k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 8.05k, False: 1.34k]
  ------------------
  336|  8.05k|    {
  337|  8.05k|      * const_cast<Type *> (obj) = v;
  338|  8.05k|      return true;
  339|  8.05k|    }
  340|  1.34k|    return false;
  341|  9.40k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12RecordListOfINS1_7FeatureEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  4.48k|  {
  335|  4.48k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  4.48k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.07k, False: 2.40k]
  ------------------
  336|  2.07k|    {
  337|  2.07k|      * const_cast<Type *> (obj) = v;
  338|  2.07k|      return true;
  339|  2.07k|    }
  340|  2.40k|    return false;
  341|  4.48k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEEEES8_Lb1EEEEEbPKT_:
  312|  14.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  14.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  13.3k|  {
  287|  13.3k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  13.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  13.3k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  13.3k|  {
  268|  13.3k|    unsigned m;
  269|  13.3k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 13.3k, False: 0]
  ------------------
  270|  13.3k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 13.1k, False: 189]
  ------------------
  271|  13.3k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   171k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   171k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  19.2k|  {
  335|  19.2k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  19.2k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 14.9k, False: 4.24k]
  ------------------
  336|  14.9k|    {
  337|  14.9k|      * const_cast<Type *> (obj) = v;
  338|  14.9k|      return true;
  339|  14.9k|    }
  340|  4.24k|    return false;
  341|  19.2k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeItLj2EEEEES8_Lb1EEEiEEbPKT_RKT0_:
  334|  4.99k|  {
  335|  4.99k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  4.99k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 717, False: 4.28k]
  ------------------
  336|    717|    {
  337|    717|      * const_cast<Type *> (obj) = v;
  338|    717|      return true;
  339|    717|    }
  340|  4.28k|    return false;
  341|  4.99k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_17FeatureVariationsENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  2.87k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.87k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_17FeatureVariationsENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|    836|  {
  335|    836|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    836|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 557, False: 279]
  ------------------
  336|    557|    {
  337|    557|      * const_cast<Type *> (obj) = v;
  338|    557|      return true;
  339|    557|    }
  340|    279|    return false;
  341|    836|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_18RecordListOfScriptENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  1.03k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.03k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_18RecordListOfScriptENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    382|  {
  335|    382|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    382|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 134, False: 248]
  ------------------
  336|    134|    {
  337|    134|      * const_cast<Type *> (obj) = v;
  338|    134|      return true;
  339|    134|    }
  340|    248|    return false;
  341|    382|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12RecordListOfINS1_7FeatureEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|    783|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    783|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12RecordListOfINS1_7FeatureEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    190|  {
  335|    190|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    190|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 139, False: 51]
  ------------------
  336|    139|    {
  337|    139|      * const_cast<Type *> (obj) = v;
  338|    139|      return true;
  339|    139|    }
  340|     51|    return false;
  341|    190|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEEEES8_Lb1EEEEEbPKT_:
  312|    387|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    387|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|    215|  {
  287|    215|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    215|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    215|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|    215|  {
  268|    215|    unsigned m;
  269|    215|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 215, False: 0]
  ------------------
  270|    215|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 194, False: 21]
  ------------------
  271|    215|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  2.77k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.77k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    911|  {
  335|    911|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    911|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 884, False: 27]
  ------------------
  336|    884|    {
  337|    884|      * const_cast<Type *> (obj) = v;
  338|    884|      return true;
  339|    884|    }
  340|     27|    return false;
  341|    911|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GPOS_impl9PosLookupENS1_7IntTypeIjLj3EEEEES8_Lb1EEEiEEbPKT_RKT0_:
  334|    125|  {
  335|    125|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    125|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 81, False: 44]
  ------------------
  336|     81|    {
  337|     81|      * const_cast<Type *> (obj) = v;
  338|     81|      return true;
  339|     81|    }
  340|     44|    return false;
  341|    125|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT6Layout4GPOSEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT6Layout4GPOSEEEP9hb_blob_tS5_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  38.8k|  retry:
  351|  38.8k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  38.8k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  38.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  38.8k|    start_processing ();
  354|       |
  355|  38.8k|    if (unlikely (!start))
  ------------------
  |  |  259|  38.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26.1k, False: 12.7k]
  |  |  ------------------
  ------------------
  356|  26.1k|    {
  357|  26.1k|      end_processing ();
  358|  26.1k|      return blob;
  359|  26.1k|    }
  360|       |
  361|  12.7k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  12.7k|    sane = t->sanitize (this);
  364|  12.7k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 5.54k, False: 7.19k]
  ------------------
  365|  5.54k|    {
  366|  5.54k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 4.98k, False: 555]
  ------------------
  367|  4.98k|      {
  368|  4.98k|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|  4.98k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  4.98k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|  4.98k|	edit_count = 0;
  372|  4.98k|	sane = t->sanitize (this);
  373|  4.98k|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 216, False: 4.77k]
  ------------------
  374|    216|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|    216|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    216|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|    216|	  sane = false;
  376|    216|	}
  377|  4.98k|      }
  378|  5.54k|    }
  379|  7.19k|    else
  380|  7.19k|    {
  381|  7.19k|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 7.19k, False: 4]
  |  Branch (381:25): [True: 6.10k, False: 1.09k]
  ------------------
  382|  6.10k|	start = hb_blob_get_data_writable (blob, nullptr);
  383|  6.10k|	end = start + blob->length;
  384|       |
  385|  6.10k|	if (start)
  ------------------
  |  Branch (385:6): [True: 6.08k, False: 24]
  ------------------
  386|  6.08k|	{
  387|  6.08k|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|  6.08k|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|  6.08k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  6.08k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|  6.08k|	  goto retry;
  391|  6.08k|	}
  392|  6.10k|      }
  393|  7.19k|    }
  394|       |
  395|  6.66k|    end_processing ();
  396|       |
  397|  6.66k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  13.3k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  6.66k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 5.07k, False: 1.58k]
  |  |  ------------------
  ------------------
  398|  6.66k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 5.07k, False: 1.58k]
  ------------------
  399|  5.07k|    {
  400|  5.07k|      hb_blob_make_immutable (blob);
  401|  5.07k|      return blob;
  402|  5.07k|    }
  403|  1.58k|    else
  404|  1.58k|    {
  405|  1.58k|      hb_blob_destroy (blob);
  406|  1.58k|      return hb_blob_get_empty ();
  407|  1.58k|    }
  408|  6.66k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4locaEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4locaEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.2k, False: 2.03k]
  |  |  ------------------
  ------------------
  356|  31.2k|    {
  357|  31.2k|      end_processing ();
  358|  31.2k|      return blob;
  359|  31.2k|    }
  360|       |
  361|  2.03k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  2.03k|    sane = t->sanitize (this);
  364|  2.03k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 2.03k, False: 0]
  ------------------
  365|  2.03k|    {
  366|  2.03k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 2.03k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  2.03k|    }
  379|      0|    else
  380|      0|    {
  381|      0|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 0]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      0|    }
  394|       |
  395|  2.03k|    end_processing ();
  396|       |
  397|  2.03k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  4.07k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  2.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 2.03k, False: 0]
  |  |  ------------------
  ------------------
  398|  2.03k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 2.03k, False: 0]
  ------------------
  399|  2.03k|    {
  400|  2.03k|      hb_blob_make_immutable (blob);
  401|  2.03k|      return blob;
  402|  2.03k|    }
  403|      0|    else
  404|      0|    {
  405|      0|      hb_blob_destroy (blob);
  406|      0|      return hb_blob_get_empty ();
  407|      0|    }
  408|  2.03k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4maxpEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4maxpEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29.4k, False: 3.76k]
  |  |  ------------------
  ------------------
  356|  29.4k|    {
  357|  29.4k|      end_processing ();
  358|  29.4k|      return blob;
  359|  29.4k|    }
  360|       |
  361|  3.76k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  3.76k|    sane = t->sanitize (this);
  364|  3.76k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 3.45k, False: 310]
  ------------------
  365|  3.45k|    {
  366|  3.45k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 3.45k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  3.45k|    }
  379|    310|    else
  380|    310|    {
  381|    310|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 310]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    310|    }
  394|       |
  395|  3.76k|    end_processing ();
  396|       |
  397|  3.76k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  7.52k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  3.76k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 3.45k, False: 310]
  |  |  ------------------
  ------------------
  398|  3.76k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 3.45k, False: 310]
  ------------------
  399|  3.45k|    {
  400|  3.45k|      hb_blob_make_immutable (blob);
  401|  3.45k|      return blob;
  402|  3.45k|    }
  403|    310|    else
  404|    310|    {
  405|    310|      hb_blob_destroy (blob);
  406|    310|      return hb_blob_get_empty ();
  407|    310|    }
  408|  3.76k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4maxpEEEbPKT_:
  312|  3.76k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.76k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10maxpV1TailEEEbPKT_:
  312|  1.10k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.10k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4headEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4headEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.3k, False: 950]
  |  |  ------------------
  ------------------
  356|  32.3k|    {
  357|  32.3k|      end_processing ();
  358|  32.3k|      return blob;
  359|  32.3k|    }
  360|       |
  361|    950|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    950|    sane = t->sanitize (this);
  364|    950|    if (sane)
  ------------------
  |  Branch (364:9): [True: 383, False: 567]
  ------------------
  365|    383|    {
  366|    383|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 383]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    383|    }
  379|    567|    else
  380|    567|    {
  381|    567|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 567]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    567|    }
  394|       |
  395|    950|    end_processing ();
  396|       |
  397|    950|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  1.90k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    950|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 383, False: 567]
  |  |  ------------------
  ------------------
  398|    950|    if (sane)
  ------------------
  |  Branch (398:9): [True: 383, False: 567]
  ------------------
  399|    383|    {
  400|    383|      hb_blob_make_immutable (blob);
  401|    383|      return blob;
  402|    383|    }
  403|    567|    else
  404|    567|    {
  405|    567|      hb_blob_destroy (blob);
  406|    567|      return hb_blob_get_empty ();
  407|    567|    }
  408|    950|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4headEEEbPKT_:
  312|    950|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    950|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4glyfEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4glyfEEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.8k, False: 1.85k]
  |  |  ------------------
  ------------------
  356|  30.8k|    {
  357|  30.8k|      end_processing ();
  358|  30.8k|      return blob;
  359|  30.8k|    }
  360|       |
  361|  1.85k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.85k|    sane = t->sanitize (this);
  364|  1.85k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.85k, False: 0]
  ------------------
  365|  1.85k|    {
  366|  1.85k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.85k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.85k|    }
  379|      0|    else
  380|      0|    {
  381|      0|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 0]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      0|    }
  394|       |
  395|  1.85k|    end_processing ();
  396|       |
  397|  1.85k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  3.70k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.85k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.85k, False: 0]
  |  |  ------------------
  ------------------
  398|  1.85k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.85k, False: 0]
  ------------------
  399|  1.85k|    {
  400|  1.85k|      hb_blob_make_immutable (blob);
  401|  1.85k|      return blob;
  402|  1.85k|    }
  403|      0|    else
  404|      0|    {
  405|      0|      hb_blob_destroy (blob);
  406|      0|      return hb_blob_get_empty ();
  407|      0|    }
  408|  1.85k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4gvarEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.1k|  {
  413|  32.1k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.1k, False: 0]
  ------------------
  414|  32.1k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.1k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.1k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4gvarEEEP9hb_blob_tS4_:
  345|  32.1k|  {
  346|  32.1k|    bool sane;
  347|       |
  348|  32.1k|    init (blob);
  349|       |
  350|  32.1k|  retry:
  351|  32.1k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.1k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.1k|    start_processing ();
  354|       |
  355|  32.1k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.3k, False: 813]
  |  |  ------------------
  ------------------
  356|  31.3k|    {
  357|  31.3k|      end_processing ();
  358|  31.3k|      return blob;
  359|  31.3k|    }
  360|       |
  361|    813|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    813|    sane = t->sanitize (this);
  364|    813|    if (sane)
  ------------------
  |  Branch (364:9): [True: 522, False: 291]
  ------------------
  365|    522|    {
  366|    522|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 522]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    522|    }
  379|    291|    else
  380|    291|    {
  381|    291|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 291]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    291|    }
  394|       |
  395|    813|    end_processing ();
  396|       |
  397|    813|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  1.62k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    813|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 522, False: 291]
  |  |  ------------------
  ------------------
  398|    813|    if (sane)
  ------------------
  |  Branch (398:9): [True: 522, False: 291]
  ------------------
  399|    522|    {
  400|    522|      hb_blob_make_immutable (blob);
  401|    522|      return blob;
  402|    522|    }
  403|    291|    else
  404|    291|    {
  405|    291|      hb_blob_destroy (blob);
  406|    291|      return hb_blob_get_empty ();
  407|    291|    }
  408|    813|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4gvarEEEbPKT_:
  312|    813|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    813|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7HBFixedINS1_7IntTypeIsLj2EEELj14EEEEENS5_IjLj4EEELb0EEEEEbPKT_:
  312|    585|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    585|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7HBFixedINS1_7IntTypeIsLj2EEELj14EEEEEbPKT_j:
  286|    585|  {
  287|    585|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    585|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    585|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7HBFixedINS1_7IntTypeIsLj2EEELj14EEEEEbPKT_jj:
  267|    585|  {
  268|    585|    unsigned m;
  269|    585|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 584, False: 1]
  ------------------
  270|    585|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 548, False: 36]
  ------------------
  271|    585|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT8hmtxvmtxINS1_4hmtxENS1_4hheaENS1_4HVAREEEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT8hmtxvmtxINS1_4hmtxENS1_4hheaENS1_4HVAREEEEEP9hb_blob_tS8_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  32.8k|  retry:
  351|  32.8k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.8k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.8k|    start_processing ();
  354|       |
  355|  32.8k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.6k, False: 1.20k]
  |  |  ------------------
  ------------------
  356|  31.6k|    {
  357|  31.6k|      end_processing ();
  358|  31.6k|      return blob;
  359|  31.6k|    }
  360|       |
  361|  1.20k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.20k|    sane = t->sanitize (this);
  364|  1.20k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.20k, False: 0]
  ------------------
  365|  1.20k|    {
  366|  1.20k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.20k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.20k|    }
  379|      0|    else
  380|      0|    {
  381|      0|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 0]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      0|    }
  394|       |
  395|  1.20k|    end_processing ();
  396|       |
  397|  1.20k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.41k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.20k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.20k, False: 0]
  |  |  ------------------
  ------------------
  398|  1.20k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.20k, False: 0]
  ------------------
  399|  1.20k|    {
  400|  1.20k|      hb_blob_make_immutable (blob);
  401|  1.20k|      return blob;
  402|  1.20k|    }
  403|      0|    else
  404|      0|    {
  405|      0|      hb_blob_destroy (blob);
  406|      0|      return hb_blob_get_empty ();
  407|      0|    }
  408|  1.20k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4HVAREEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4HVAREEEP9hb_blob_tS4_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  33.1k|  retry:
  351|  33.1k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.1k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.1k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.1k|    start_processing ();
  354|       |
  355|  33.1k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 546]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|    546|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    546|    sane = t->sanitize (this);
  364|    546|    if (sane)
  ------------------
  |  Branch (364:9): [True: 240, False: 306]
  ------------------
  365|    240|    {
  366|    240|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 223, False: 17]
  ------------------
  367|    223|      {
  368|    223|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    223|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    223|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    223|	edit_count = 0;
  372|    223|	sane = t->sanitize (this);
  373|    223|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 1, False: 222]
  ------------------
  374|      1|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      1|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      1|	  sane = false;
  376|      1|	}
  377|    223|      }
  378|    240|    }
  379|    306|    else
  380|    306|    {
  381|    306|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 270, False: 36]
  |  Branch (381:25): [True: 247, False: 23]
  ------------------
  382|    247|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    247|	end = start + blob->length;
  384|       |
  385|    247|	if (start)
  ------------------
  |  Branch (385:6): [True: 246, False: 1]
  ------------------
  386|    246|	{
  387|    246|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    246|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    246|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    246|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    246|	  goto retry;
  391|    246|	}
  392|    247|      }
  393|    306|    }
  394|       |
  395|    300|    end_processing ();
  396|       |
  397|    300|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    600|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    300|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 239, False: 61]
  |  |  ------------------
  ------------------
  398|    300|    if (sane)
  ------------------
  |  Branch (398:9): [True: 239, False: 61]
  ------------------
  399|    239|    {
  400|    239|      hb_blob_make_immutable (blob);
  401|    239|      return blob;
  402|    239|    }
  403|     61|    else
  404|     61|    {
  405|     61|      hb_blob_destroy (blob);
  406|     61|      return hb_blob_get_empty ();
  407|     61|    }
  408|    300|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_16DeltaSetIndexMapENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  7.61k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.61k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT24DeltaSetIndexMapFormat01INS1_7IntTypeItLj2EEEEEEEbPKT_:
  312|  1.02k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.02k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT24DeltaSetIndexMapFormat01INS1_7IntTypeIjLj4EEEEEEEbPKT_:
  312|    344|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    344|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_16DeltaSetIndexMapENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.45k|  {
  335|  1.45k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.45k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.29k, False: 162]
  ------------------
  336|  1.29k|    {
  337|  1.29k|      * const_cast<Type *> (obj) = v;
  338|  1.29k|      return true;
  339|  1.29k|    }
  340|    162|    return false;
  341|  1.45k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4hheaEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4hheaEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.7k, False: 1.50k]
  |  |  ------------------
  ------------------
  356|  31.7k|    {
  357|  31.7k|      end_processing ();
  358|  31.7k|      return blob;
  359|  31.7k|    }
  360|       |
  361|  1.50k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.50k|    sane = t->sanitize (this);
  364|  1.50k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.24k, False: 263]
  ------------------
  365|  1.24k|    {
  366|  1.24k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.24k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.24k|    }
  379|    263|    else
  380|    263|    {
  381|    263|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 263]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    263|    }
  394|       |
  395|  1.50k|    end_processing ();
  396|       |
  397|  1.50k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  3.00k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.50k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.24k, False: 263]
  |  |  ------------------
  ------------------
  398|  1.50k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.24k, False: 263]
  ------------------
  399|  1.24k|    {
  400|  1.24k|      hb_blob_make_immutable (blob);
  401|  1.24k|      return blob;
  402|  1.24k|    }
  403|    263|    else
  404|    263|    {
  405|    263|      hb_blob_destroy (blob);
  406|    263|      return hb_blob_get_empty ();
  407|    263|    }
  408|  1.50k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4_heaINS1_4hheaEEEEEbPKT_:
  312|  1.50k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.50k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT8hmtxvmtxINS1_4vmtxENS1_4vheaENS1_4VVAREEEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT8hmtxvmtxINS1_4vmtxENS1_4vheaENS1_4VVAREEEEEP9hb_blob_tS8_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 203]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|    203|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    203|    sane = t->sanitize (this);
  364|    203|    if (sane)
  ------------------
  |  Branch (364:9): [True: 203, False: 0]
  ------------------
  365|    203|    {
  366|    203|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 203]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    203|    }
  379|      0|    else
  380|      0|    {
  381|      0|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 0]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      0|    }
  394|       |
  395|    203|    end_processing ();
  396|       |
  397|    203|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    406|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    203|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 203, False: 0]
  |  |  ------------------
  ------------------
  398|    203|    if (sane)
  ------------------
  |  Branch (398:9): [True: 203, False: 0]
  ------------------
  399|    203|    {
  400|    203|      hb_blob_make_immutable (blob);
  401|    203|      return blob;
  402|    203|    }
  403|      0|    else
  404|      0|    {
  405|      0|      hb_blob_destroy (blob);
  406|      0|      return hb_blob_get_empty ();
  407|      0|    }
  408|    203|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4VVAREEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4VVAREEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.8k|  retry:
  351|  32.8k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.8k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.8k|    start_processing ();
  354|       |
  355|  32.8k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 330]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|    330|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    330|    sane = t->sanitize (this);
  364|    330|    if (sane)
  ------------------
  |  Branch (364:9): [True: 123, False: 207]
  ------------------
  365|    123|    {
  366|    123|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 108, False: 15]
  ------------------
  367|    108|      {
  368|    108|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    108|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    108|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    108|	edit_count = 0;
  372|    108|	sane = t->sanitize (this);
  373|    108|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 7, False: 101]
  ------------------
  374|      7|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      7|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      7|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      7|	  sane = false;
  376|      7|	}
  377|    108|      }
  378|    123|    }
  379|    207|    else
  380|    207|    {
  381|    207|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 186, False: 21]
  |  Branch (381:25): [True: 148, False: 38]
  ------------------
  382|    148|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    148|	end = start + blob->length;
  384|       |
  385|    148|	if (start)
  ------------------
  |  Branch (385:6): [True: 146, False: 2]
  ------------------
  386|    146|	{
  387|    146|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    146|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    146|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    146|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    146|	  goto retry;
  391|    146|	}
  392|    148|      }
  393|    207|    }
  394|       |
  395|    184|    end_processing ();
  396|       |
  397|    184|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    368|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    184|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 116, False: 68]
  |  |  ------------------
  ------------------
  398|    184|    if (sane)
  ------------------
  |  Branch (398:9): [True: 116, False: 68]
  ------------------
  399|    116|    {
  400|    116|      hb_blob_make_immutable (blob);
  401|    116|      return blob;
  402|    116|    }
  403|     68|    else
  404|     68|    {
  405|     68|      hb_blob_destroy (blob);
  406|     68|      return hb_blob_get_empty ();
  407|     68|    }
  408|    184|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4vheaEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 32.7k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4vheaEEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 209]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|    209|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    209|    sane = t->sanitize (this);
  364|    209|    if (sane)
  ------------------
  |  Branch (364:9): [True: 203, False: 6]
  ------------------
  365|    203|    {
  366|    203|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 203]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    203|    }
  379|      6|    else
  380|      6|    {
  381|      6|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 6]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      6|    }
  394|       |
  395|    209|    end_processing ();
  396|       |
  397|    209|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    418|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    209|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 203, False: 6]
  |  |  ------------------
  ------------------
  398|    209|    if (sane)
  ------------------
  |  Branch (398:9): [True: 203, False: 6]
  ------------------
  399|    203|    {
  400|    203|      hb_blob_make_immutable (blob);
  401|    203|      return blob;
  402|    203|    }
  403|      6|    else
  404|      6|    {
  405|      6|      hb_blob_destroy (blob);
  406|      6|      return hb_blob_get_empty ();
  407|      6|    }
  408|    209|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4_heaINS1_4vheaEEEEEbPKT_:
  312|    209|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    209|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT4MVAREEEbPKT_:
  312|    392|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    392|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14VariationStoreENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|    386|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    386|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_14VariationStoreENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    166|  {
  335|    166|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    166|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 56, False: 110]
  ------------------
  336|     56|    {
  337|     56|      * const_cast<Type *> (obj) = v;
  338|     56|      return true;
  339|     56|    }
  340|    110|    return false;
  341|    166|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT9OS2V1TailEEEbPKT_:
  312|    894|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    894|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT9OS2V2TailEEEbPKT_:
  312|    866|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    866|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT9OS2V5TailEEEbPKT_:
  312|    256|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    256|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4MVAREEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4MVAREEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.3k|  retry:
  351|  33.3k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.3k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.3k|    start_processing ();
  354|       |
  355|  33.3k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.9k, False: 389]
  |  |  ------------------
  ------------------
  356|  32.9k|    {
  357|  32.9k|      end_processing ();
  358|  32.9k|      return blob;
  359|  32.9k|    }
  360|       |
  361|    389|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    389|    sane = t->sanitize (this);
  364|    389|    if (sane)
  ------------------
  |  Branch (364:9): [True: 169, False: 220]
  ------------------
  365|    169|    {
  366|    169|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 59, False: 110]
  ------------------
  367|     59|      {
  368|     59|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|     59|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     59|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|     59|	edit_count = 0;
  372|     59|	sane = t->sanitize (this);
  373|     59|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 1, False: 58]
  ------------------
  374|      1|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      1|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      1|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      1|	  sane = false;
  376|      1|	}
  377|     59|      }
  378|    169|    }
  379|    220|    else
  380|    220|    {
  381|    220|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 156, False: 64]
  |  Branch (381:25): [True: 109, False: 47]
  ------------------
  382|    109|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    109|	end = start + blob->length;
  384|       |
  385|    109|	if (start)
  ------------------
  |  Branch (385:6): [True: 106, False: 3]
  ------------------
  386|    106|	{
  387|    106|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    106|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    106|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    106|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    106|	  goto retry;
  391|    106|	}
  392|    109|      }
  393|    220|    }
  394|       |
  395|    283|    end_processing ();
  396|       |
  397|    283|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    566|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    283|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 166, False: 117]
  |  |  ------------------
  ------------------
  398|    283|    if (sane)
  ------------------
  |  Branch (398:9): [True: 166, False: 117]
  ------------------
  399|    166|    {
  400|    166|      hb_blob_make_immutable (blob);
  401|    166|      return blob;
  402|    166|    }
  403|    117|    else
  404|    117|    {
  405|    117|      hb_blob_destroy (blob);
  406|    117|      return hb_blob_get_empty ();
  407|    117|    }
  408|    283|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT3OS2EEEbPKT_:
  312|  1.03k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.03k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19CmapSubtableFormat0EEEbPKT_:
  312|  2.18k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.18k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19CmapSubtableFormat4EEEbPKT_:
  312|  3.48k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.48k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT7IntTypeItLj2EEEtEEbPKT_RKT0_:
  334|  1.06k|  {
  335|  1.06k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.06k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 694, False: 375]
  ------------------
  336|    694|    {
  337|    694|      * const_cast<Type *> (obj) = v;
  338|    694|      return true;
  339|    694|    }
  340|    375|    return false;
  341|  1.06k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT23VariationSelectorRecordEEEbPKT_:
  312|  14.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  14.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10DefaultUVSENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  14.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  14.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT17UnicodeValueRangeEEEbPKT_j:
  286|  1.96k|  {
  287|  1.96k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.96k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.96k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT17UnicodeValueRangeEEEbPKT_jj:
  267|  1.96k|  {
  268|  1.96k|    unsigned m;
  269|  1.96k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.90k, False: 58]
  ------------------
  270|  1.96k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.82k, False: 77]
  ------------------
  271|  1.96k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10DefaultUVSENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.33k|  {
  335|  1.33k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.33k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.26k, False: 69]
  ------------------
  336|  1.26k|    {
  337|  1.26k|      * const_cast<Type *> (obj) = v;
  338|  1.26k|      return true;
  339|  1.26k|    }
  340|     69|    return false;
  341|  1.33k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13NonDefaultUVSENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  14.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  14.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT10UVSMappingEEEbPKT_j:
  286|  1.96k|  {
  287|  1.96k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.96k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.96k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT10UVSMappingEEEbPKT_jj:
  267|  1.96k|  {
  268|  1.96k|    unsigned m;
  269|  1.96k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.90k, False: 55]
  ------------------
  270|  1.96k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.83k, False: 68]
  ------------------
  271|  1.96k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13NonDefaultUVSENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.23k|  {
  335|  1.23k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.23k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.20k, False: 30]
  ------------------
  336|  1.20k|    {
  337|  1.20k|      * const_cast<Type *> (obj) = v;
  338|  1.20k|      return true;
  339|  1.20k|    }
  340|     30|    return false;
  341|  1.23k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT20CmapSubtableFormat14EEEbPKT_:
  312|  1.16k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.16k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT23VariationSelectorRecordEEEbPKT_j:
  286|  1.15k|  {
  287|  1.15k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.15k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.15k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT23VariationSelectorRecordEEEbPKT_jj:
  267|  1.15k|  {
  268|  1.15k|    unsigned m;
  269|  1.15k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.06k, False: 93]
  ------------------
  270|  1.15k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 966, False: 95]
  ------------------
  271|  1.15k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT19CmapSubtableTrimmedINS1_7IntTypeItLj2EEEEEEEbPKT_:
  312|    668|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    668|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19CmapSubtableTrimmedINS1_7IntTypeIjLj4EEEEEEEbPKT_:
  312|    628|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    628|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT25CmapSubtableLongSegmentedINS1_20CmapSubtableFormat12EEEEEbPKT_:
  312|  1.24k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.24k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT21CmapSubtableLongGroupEEEbPKT_j:
  286|  2.35k|  {
  287|  2.35k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  2.35k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  2.35k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT21CmapSubtableLongGroupEEEbPKT_jj:
  267|  2.35k|  {
  268|  2.35k|    unsigned m;
  269|  2.35k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 2.28k, False: 78]
  ------------------
  270|  2.35k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.87k, False: 404]
  ------------------
  271|  2.35k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT25CmapSubtableLongSegmentedINS1_20CmapSubtableFormat13EEEEEbPKT_:
  312|  1.17k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.17k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14EncodingRecordEEEbPKT_:
  312|  36.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  36.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12CmapSubtableENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  36.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  36.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12CmapSubtableENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  10.0k|  {
  335|  10.0k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  10.0k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 8.26k, False: 1.81k]
  ------------------
  336|  8.26k|    {
  337|  8.26k|      * const_cast<Type *> (obj) = v;
  338|  8.26k|      return true;
  339|  8.26k|    }
  340|  1.81k|    return false;
  341|  10.0k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4cmapEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4cmapEEEP9hb_blob_tS4_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  34.5k|  retry:
  351|  34.5k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  34.5k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  34.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  34.5k|    start_processing ();
  354|       |
  355|  34.5k|    if (unlikely (!start))
  ------------------
  |  |  259|  34.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29.1k, False: 5.36k]
  |  |  ------------------
  ------------------
  356|  29.1k|    {
  357|  29.1k|      end_processing ();
  358|  29.1k|      return blob;
  359|  29.1k|    }
  360|       |
  361|  5.36k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  5.36k|    sane = t->sanitize (this);
  364|  5.36k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 3.07k, False: 2.29k]
  ------------------
  365|  3.07k|    {
  366|  3.07k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 1.65k, False: 1.42k]
  ------------------
  367|  1.65k|      {
  368|  1.65k|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|  1.65k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.65k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|  1.65k|	edit_count = 0;
  372|  1.65k|	sane = t->sanitize (this);
  373|  1.65k|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 18, False: 1.63k]
  ------------------
  374|     18|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|     18|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     18|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|     18|	  sane = false;
  376|     18|	}
  377|  1.65k|      }
  378|  3.07k|    }
  379|  2.29k|    else
  380|  2.29k|    {
  381|  2.29k|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 1.81k, False: 475]
  |  Branch (381:25): [True: 1.74k, False: 76]
  ------------------
  382|  1.74k|	start = hb_blob_get_data_writable (blob, nullptr);
  383|  1.74k|	end = start + blob->length;
  384|       |
  385|  1.74k|	if (start)
  ------------------
  |  Branch (385:6): [True: 1.72k, False: 12]
  ------------------
  386|  1.72k|	{
  387|  1.72k|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|  1.72k|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|  1.72k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.72k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|  1.72k|	  goto retry;
  391|  1.72k|	}
  392|  1.74k|      }
  393|  2.29k|    }
  394|       |
  395|  3.63k|    end_processing ();
  396|       |
  397|  3.63k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  7.27k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  3.63k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 3.05k, False: 582]
  |  |  ------------------
  ------------------
  398|  3.63k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 3.05k, False: 582]
  ------------------
  399|  3.05k|    {
  400|  3.05k|      hb_blob_make_immutable (blob);
  401|  3.05k|      return blob;
  402|  3.05k|    }
  403|    582|    else
  404|    582|    {
  405|    582|      hb_blob_destroy (blob);
  406|    582|      return hb_blob_get_empty ();
  407|    582|    }
  408|  3.63k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT3OS2EEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT3OS2EEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.2k, False: 1.03k]
  |  |  ------------------
  ------------------
  356|  32.2k|    {
  357|  32.2k|      end_processing ();
  358|  32.2k|      return blob;
  359|  32.2k|    }
  360|       |
  361|  1.03k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.03k|    sane = t->sanitize (this);
  364|  1.03k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 809, False: 225]
  ------------------
  365|    809|    {
  366|    809|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 809]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    809|    }
  379|    225|    else
  380|    225|    {
  381|    225|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 225]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    225|    }
  394|       |
  395|  1.03k|    end_processing ();
  396|       |
  397|  1.03k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.06k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.03k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 809, False: 225]
  |  |  ------------------
  ------------------
  398|  1.03k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 809, False: 225]
  ------------------
  399|    809|    {
  400|    809|      hb_blob_make_immutable (blob);
  401|    809|      return blob;
  402|    809|    }
  403|    225|    else
  404|    225|    {
  405|    225|      hb_blob_destroy (blob);
  406|    225|      return hb_blob_get_empty ();
  407|    225|    }
  408|  1.03k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4cmapEEEbPKT_:
  312|  7.01k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.01k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT14EncodingRecordEEEbPKT_j:
  286|  6.61k|  {
  287|  6.61k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.61k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.61k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT14EncodingRecordEEEbPKT_jj:
  267|  6.61k|  {
  268|  6.61k|    unsigned m;
  269|  6.61k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.61k, False: 0]
  ------------------
  270|  6.61k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.54k, False: 66]
  ------------------
  271|  6.61k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT9Affine2x3EEEbPKT_:
  312|   154k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   154k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT15PaintColrLayersEEEbPKT_:
  312|  43.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  43.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10PaintSolidEEEbPKT_:
  312|  75.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  75.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10PaintGlyphEEEbPKT_:
  312|  77.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  77.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  5.13M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.13M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT5PaintENS1_7IntTypeIhLj1EEEEEbPKT_PKT0_:
  135|  4.59M|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_10PaintSolidEEEEEbPKT_:
  312|  40.4k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  40.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_10PaintSolidEEEEEbPKT_:
  312|  35.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  35.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_19PaintLinearGradientIS2_EEEEEEbPKT_:
  312|  35.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  35.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19PaintLinearGradientINS1_10NoVariableEEEEEbPKT_:
  312|  35.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  35.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ColorLineINS1_10NoVariableEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   238k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   238k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT9ColorLineINS1_10NoVariableEEEEEbPKT_:
  312|  16.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  16.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT10NoVariableINS1_9ColorStopEEEEEbPKT_j:
  286|  15.8k|  {
  287|  15.8k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  15.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  15.8k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT10NoVariableINS1_9ColorStopEEEEEbPKT_jj:
  267|  15.8k|  {
  268|  15.8k|    unsigned m;
  269|  15.8k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 15.8k, False: 0]
  ------------------
  270|  15.8k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 15.7k, False: 103]
  ------------------
  271|  15.8k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9ColorLineINS1_10NoVariableEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    759|  {
  335|    759|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    759|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 679, False: 80]
  ------------------
  336|    679|    {
  337|    679|      * const_cast<Type *> (obj) = v;
  338|    679|      return true;
  339|    679|    }
  340|     80|    return false;
  341|    759|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_19PaintLinearGradientIS2_EEEEEEbPKT_:
  312|  57.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  57.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19PaintLinearGradientINS1_8VariableEEEEEbPKT_:
  312|  57.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  57.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ColorLineINS1_8VariableEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   146k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   146k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT9ColorLineINS1_8VariableEEEEEbPKT_:
  312|  88.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  88.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8VariableINS1_9ColorStopEEEEEbPKT_j:
  286|  87.6k|  {
  287|  87.6k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  87.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  87.6k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8VariableINS1_9ColorStopEEEEEbPKT_jj:
  267|  87.6k|  {
  268|  87.6k|    unsigned m;
  269|  87.6k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 87.6k, False: 0]
  ------------------
  270|  87.6k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 87.5k, False: 116]
  ------------------
  271|  87.6k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9ColorLineINS1_8VariableEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    781|  {
  335|    781|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    781|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 588, False: 193]
  ------------------
  336|    588|    {
  337|    588|      * const_cast<Type *> (obj) = v;
  338|    588|      return true;
  339|    588|    }
  340|    193|    return false;
  341|    781|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_19PaintRadialGradientIS2_EEEEEEbPKT_:
  312|   187k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   187k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19PaintRadialGradientINS1_10NoVariableEEEEEbPKT_:
  312|   187k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   187k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_19PaintRadialGradientIS2_EEEEEEbPKT_:
  312|  64.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  64.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19PaintRadialGradientINS1_8VariableEEEEEbPKT_:
  312|  64.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  64.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_18PaintSweepGradientIS2_EEEEEEbPKT_:
  312|  15.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  15.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT18PaintSweepGradientINS1_10NoVariableEEEEEbPKT_:
  312|  15.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  15.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_18PaintSweepGradientIS2_EEEEEEbPKT_:
  312|  24.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  24.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT18PaintSweepGradientINS1_8VariableEEEEEbPKT_:
  312|  24.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  24.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14PaintTransformINS1_10NoVariableEEEEEbPKT_:
  312|  84.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  84.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10NoVariableINS1_9Affine2x3EEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  83.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  83.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_9Affine2x3EEEEEbPKT_:
  312|  76.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  76.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10NoVariableINS1_9Affine2x3EEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    431|  {
  335|    431|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    431|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 372, False: 59]
  ------------------
  336|    372|    {
  337|    372|      * const_cast<Type *> (obj) = v;
  338|    372|      return true;
  339|    372|    }
  340|     59|    return false;
  341|    431|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT14PaintTransformINS1_8VariableEEEEEbPKT_:
  312|   126k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   126k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8VariableINS1_9Affine2x3EEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   126k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   126k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_9Affine2x3EEEEEbPKT_:
  312|  78.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  78.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8VariableINS1_9Affine2x3EEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    276|  {
  335|    276|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    276|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 235, False: 41]
  ------------------
  336|    235|    {
  337|    235|      * const_cast<Type *> (obj) = v;
  338|    235|      return true;
  339|    235|    }
  340|     41|    return false;
  341|    276|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_14PaintTranslateEEEEEbPKT_:
  312|  2.41k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.41k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_14PaintTranslateEEEEEbPKT_:
  312|  84.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  84.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_10PaintScaleEEEEEbPKT_:
  312|  9.82k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  9.82k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_10PaintScaleEEEEEbPKT_:
  312|   123k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   123k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_22PaintScaleAroundCenterEEEEEbPKT_:
  312|  38.9k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  38.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_22PaintScaleAroundCenterEEEEEbPKT_:
  312|  3.42k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.42k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_17PaintScaleUniformEEEEEbPKT_:
  312|  47.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  47.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_17PaintScaleUniformEEEEEbPKT_:
  312|  4.07k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.07k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_29PaintScaleUniformAroundCenterEEEEEbPKT_:
  312|  1.52k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.52k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_29PaintScaleUniformAroundCenterEEEEEbPKT_:
  312|  3.29k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.29k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_11PaintRotateEEEEEbPKT_:
  312|  9.19k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  9.19k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_11PaintRotateEEEEEbPKT_:
  312|  11.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_23PaintRotateAroundCenterEEEEEbPKT_:
  312|  4.00k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.00k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_23PaintRotateAroundCenterEEEEEbPKT_:
  312|  2.42k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.42k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_9PaintSkewEEEEEbPKT_:
  312|  82.1k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  82.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_9PaintSkewEEEEEbPKT_:
  312|  2.77k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.77k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10NoVariableINS1_21PaintSkewAroundCenterEEEEEbPKT_:
  312|  2.00k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.00k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_21PaintSkewAroundCenterEEEEEbPKT_:
  312|  6.04k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.04k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  7.74k|  {
  335|  7.74k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  7.74k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 3.60k, False: 4.14k]
  ------------------
  336|  3.60k|    {
  337|  3.60k|      * const_cast<Type *> (obj) = v;
  338|  3.60k|      return true;
  339|  3.60k|    }
  340|  4.14k|    return false;
  341|  7.74k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT14PaintColrGlyphEEEbPKT_:
  312|  2.97k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.97k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14PaintTranslateEEEbPKT_:
  312|  87.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  87.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10PaintScaleEEEbPKT_:
  312|   132k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   132k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT22PaintScaleAroundCenterEEEbPKT_:
  312|  42.2k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  42.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17PaintScaleUniformEEEbPKT_:
  312|  51.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  51.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT29PaintScaleUniformAroundCenterEEEbPKT_:
  312|  4.72k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.72k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT11PaintRotateEEEbPKT_:
  312|  20.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  20.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT23PaintRotateAroundCenterEEEbPKT_:
  312|  6.32k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.32k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT9PaintSkewEEEbPKT_:
  312|  84.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  84.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT21PaintSkewAroundCenterEEEbPKT_:
  312|  7.91k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.91k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14PaintCompositeEEEbPKT_:
  312|  2.20M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.20M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14ClipBoxFormat1EEEbPKT_:
  312|    636|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    636|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10ClipRecordEEEbPKT_:
  312|   240k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   240k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7ClipBoxENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   240k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   240k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT7ClipBoxENS1_7IntTypeIhLj1EEEEEbPKT_PKT0_:
  135|  2.82k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT8VariableINS1_14ClipBoxFormat1EEEEEbPKT_:
  312|    318|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    318|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_7ClipBoxENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.56k|  {
  335|  1.56k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.56k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.53k, False: 29]
  ------------------
  336|  1.53k|    {
  337|  1.53k|      * const_cast<Type *> (obj) = v;
  338|  1.53k|      return true;
  339|  1.53k|    }
  340|     29|    return false;
  341|  1.56k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8ClipListEEEbPKT_:
  312|  2.60k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.60k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT10ClipRecordEEEbPKT_j:
  286|    600|  {
  287|    600|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    600|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    600|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT10ClipRecordEEEbPKT_jj:
  267|    600|  {
  268|    600|    unsigned m;
  269|    600|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 572, False: 28]
  ------------------
  270|    600|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 462, False: 110]
  ------------------
  271|    600|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT20BaseGlyphPaintRecordEEEbPKT_:
  312|  37.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  37.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  75.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  75.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  21.3k|  {
  335|  21.3k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  21.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 18.8k, False: 2.50k]
  ------------------
  336|  18.8k|    {
  337|  18.8k|      * const_cast<Type *> (obj) = v;
  338|  18.8k|      return true;
  339|  18.8k|    }
  340|  2.50k|    return false;
  341|  21.3k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT20BaseGlyphPaintRecordEEEbPKT_j:
  286|  6.82k|  {
  287|  6.82k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.82k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.82k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT20BaseGlyphPaintRecordEEEbPKT_jj:
  267|  6.82k|  {
  268|  6.82k|    unsigned m;
  269|  6.82k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.80k, False: 17]
  ------------------
  270|  6.82k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.74k, False: 61]
  ------------------
  271|  6.82k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|  1.17k|  {
  287|  1.17k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.17k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.17k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_5PaintENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|  1.17k|  {
  268|  1.17k|    unsigned m;
  269|  1.17k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.15k, False: 20]
  ------------------
  270|  1.17k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.11k, False: 41]
  ------------------
  271|  1.17k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4COLREEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4COLREEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  35.9k|  retry:
  351|  35.9k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  35.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  35.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  35.9k|    start_processing ();
  354|       |
  355|  35.9k|    if (unlikely (!start))
  ------------------
  |  |  259|  35.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.4k, False: 5.47k]
  |  |  ------------------
  ------------------
  356|  30.4k|    {
  357|  30.4k|      end_processing ();
  358|  30.4k|      return blob;
  359|  30.4k|    }
  360|       |
  361|  5.47k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  5.47k|    sane = t->sanitize (this);
  364|  5.47k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 2.44k, False: 3.02k]
  ------------------
  365|  2.44k|    {
  366|  2.44k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 2.41k, False: 34]
  ------------------
  367|  2.41k|      {
  368|  2.41k|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|  2.41k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  2.41k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|  2.41k|	edit_count = 0;
  372|  2.41k|	sane = t->sanitize (this);
  373|  2.41k|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 32, False: 2.37k]
  ------------------
  374|     32|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|     32|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     32|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|     32|	  sane = false;
  376|     32|	}
  377|  2.41k|      }
  378|  2.44k|    }
  379|  3.02k|    else
  380|  3.02k|    {
  381|  3.02k|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 2.98k, False: 38]
  |  Branch (381:25): [True: 2.70k, False: 282]
  ------------------
  382|  2.70k|	start = hb_blob_get_data_writable (blob, nullptr);
  383|  2.70k|	end = start + blob->length;
  384|       |
  385|  2.70k|	if (start)
  ------------------
  |  Branch (385:6): [True: 2.69k, False: 12]
  ------------------
  386|  2.69k|	{
  387|  2.69k|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|  2.69k|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|  2.69k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  2.69k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|  2.69k|	  goto retry;
  391|  2.69k|	}
  392|  2.70k|      }
  393|  3.02k|    }
  394|       |
  395|  2.77k|    end_processing ();
  396|       |
  397|  2.77k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  5.55k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  2.77k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 2.40k, False: 368]
  |  |  ------------------
  ------------------
  398|  2.77k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 2.40k, False: 368]
  ------------------
  399|  2.40k|    {
  400|  2.40k|      hb_blob_make_immutable (blob);
  401|  2.40k|      return blob;
  402|  2.40k|    }
  403|    368|    else
  404|    368|    {
  405|    368|      hb_blob_destroy (blob);
  406|    368|      return hb_blob_get_empty ();
  407|    368|    }
  408|  2.77k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4COLREEEbPKT_:
  312|  7.88k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.88k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT15BaseGlyphRecordEEEbPKT_j:
  286|  7.87k|  {
  287|  7.87k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  7.87k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  7.87k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT15BaseGlyphRecordEEEbPKT_jj:
  267|  7.87k|  {
  268|  7.87k|    unsigned m;
  269|  7.87k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 7.87k, False: 0]
  ------------------
  270|  7.87k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 7.85k, False: 21]
  ------------------
  271|  7.87k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT11LayerRecordEEEbPKT_j:
  286|  7.85k|  {
  287|  7.85k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  7.85k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  7.85k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT11LayerRecordEEEbPKT_jj:
  267|  7.85k|  {
  268|  7.85k|    unsigned m;
  269|  7.85k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 7.85k, False: 0]
  ------------------
  270|  7.85k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 7.84k, False: 10]
  ------------------
  271|  7.85k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13BaseGlyphListENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  7.81k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.81k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13BaseGlyphListENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  2.90k|  {
  335|  2.90k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.90k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 343, False: 2.56k]
  ------------------
  336|    343|    {
  337|    343|      * const_cast<Type *> (obj) = v;
  338|    343|      return true;
  339|    343|    }
  340|  2.56k|    return false;
  341|  2.90k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9LayerListENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  5.25k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.25k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9LayerListENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.91k|  {
  335|  1.91k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.91k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.68k, False: 227]
  ------------------
  336|  1.68k|    {
  337|  1.68k|      * const_cast<Type *> (obj) = v;
  338|  1.68k|      return true;
  339|  1.68k|    }
  340|    227|    return false;
  341|  1.91k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8ClipListENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  4.90k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.90k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8ClipListENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  2.18k|  {
  335|  2.18k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.18k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.13k, False: 52]
  ------------------
  336|  2.13k|    {
  337|  2.13k|      * const_cast<Type *> (obj) = v;
  338|  2.13k|      return true;
  339|  2.13k|    }
  340|     52|    return false;
  341|  2.18k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT16OpenTypeFontFileEEEP9hb_blob_tS4_:
  345|  33.3k|  {
  346|  33.3k|    bool sane;
  347|       |
  348|  33.3k|    init (blob);
  349|       |
  350|  33.4k|  retry:
  351|  33.4k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.4k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.4k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.4k|    start_processing ();
  354|       |
  355|  33.4k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 29, False: 33.3k]
  |  |  ------------------
  ------------------
  356|     29|    {
  357|     29|      end_processing ();
  358|     29|      return blob;
  359|     29|    }
  360|       |
  361|  33.3k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  33.3k|    sane = t->sanitize (this);
  364|  33.3k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 32.6k, False: 689]
  ------------------
  365|  32.6k|    {
  366|  32.6k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 63, False: 32.6k]
  ------------------
  367|     63|      {
  368|     63|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|     63|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     63|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|     63|	edit_count = 0;
  372|     63|	sane = t->sanitize (this);
  373|     63|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 4, False: 59]
  ------------------
  374|      4|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      4|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      4|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      4|	  sane = false;
  376|      4|	}
  377|     63|      }
  378|  32.6k|    }
  379|    689|    else
  380|    689|    {
  381|    689|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 80, False: 609]
  |  Branch (381:25): [True: 73, False: 7]
  ------------------
  382|     73|	start = hb_blob_get_data_writable (blob, nullptr);
  383|     73|	end = start + blob->length;
  384|       |
  385|     73|	if (start)
  ------------------
  |  Branch (385:6): [True: 70, False: 3]
  ------------------
  386|     70|	{
  387|     70|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|     70|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|     70|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     70|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|     70|	  goto retry;
  391|     70|	}
  392|     73|      }
  393|    689|    }
  394|       |
  395|  33.3k|    end_processing ();
  396|       |
  397|  33.3k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  66.6k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 32.6k, False: 623]
  |  |  ------------------
  ------------------
  398|  33.3k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 32.6k, False: 623]
  ------------------
  399|  32.6k|    {
  400|  32.6k|      hb_blob_make_immutable (blob);
  401|  32.6k|      return blob;
  402|  32.6k|    }
  403|    623|    else
  404|    623|    {
  405|    623|      hb_blob_destroy (blob);
  406|    623|      return hb_blob_get_empty ();
  407|    623|    }
  408|  33.3k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT19OpenTypeOffsetTableEEEbPKT_:
  312|  32.0k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  32.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT15BinSearchHeaderINS1_7IntTypeItLj2EEEEEEEbPKT_:
  312|  31.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  31.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT11TableRecordEEEbPKT_j:
  286|  31.3k|  {
  287|  31.3k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  31.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  31.3k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT11TableRecordEEEbPKT_jj:
  267|  31.3k|  {
  268|  31.3k|    unsigned m;
  269|  31.3k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 31.3k, False: 0]
  ------------------
  270|  31.3k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 31.1k, False: 179]
  ------------------
  271|  31.3k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|    253|  {
  287|    253|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    253|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    253|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|    253|  {
  268|    253|    unsigned m;
  269|    253|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 252, False: 1]
  ------------------
  270|    253|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 217, False: 35]
  ------------------
  271|    253|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  2.85k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.85k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_19OpenTypeOffsetTableENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|    843|  {
  335|    843|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    843|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 763, False: 80]
  ------------------
  336|    763|    {
  337|    763|      * const_cast<Type *> (obj) = v;
  338|    763|      return true;
  339|    763|    }
  340|     80|    return false;
  341|    843|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT18ResourceForkHeaderEEEbPKT_:
  312|    120|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    120|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEENS4_IjLj4EEELb0EEEEEbPKT_:
  312|  7.00k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.00k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_11ResourceMapENS1_7IntTypeIjLj4EEELb0EEEEEbPKT_:
  312|     94|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     94|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT11ResourceMapEEEbPKT_:
  312|     94|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     94|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9ArrayOfM1INS1_18ResourceTypeRecordENS1_7IntTypeItLj2EEEEES6_Lb0EEEEEbPKT_:
  312|     92|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     92|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT18ResourceTypeRecordEEEbPKT_j:
  286|     88|  {
  287|     88|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     88|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     88|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT18ResourceTypeRecordEEEbPKT_jj:
  267|     88|  {
  268|     88|    unsigned m;
  269|     88|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 88, False: 0]
  ------------------
  270|     88|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 84, False: 4]
  ------------------
  271|     88|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT18ResourceTypeRecordEEEbPKT_:
  312|  85.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  85.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_14ResourceRecordEEENS1_7IntTypeItLj2EEELb0EEEEEbPKT_:
  312|  85.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  85.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT14ResourceRecordEEEbPKT_j:
  286|  85.7k|  {
  287|  85.7k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  85.7k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  85.7k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT14ResourceRecordEEEbPKT_jj:
  267|  85.7k|  {
  268|  85.7k|    unsigned m;
  269|  85.7k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 85.7k, False: 0]
  ------------------
  270|  85.7k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 85.6k, False: 8]
  ------------------
  271|  85.7k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT14ResourceRecordEEEbPKT_:
  312|  1.17k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.17k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_7ArrayOfINS1_7IntTypeIhLj1EEENS4_IjLj4EEEEENS4_IjLj3EEELb0EEEEEbPKT_:
  312|  1.17k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.17k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4fvarEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.3k|  {
  413|  33.3k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.3k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.3k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.3k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4fvarEEEP9hb_blob_tS4_:
  345|  33.3k|  {
  346|  33.3k|    bool sane;
  347|       |
  348|  33.3k|    init (blob);
  349|       |
  350|  33.3k|  retry:
  351|  33.3k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.3k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.3k|    start_processing ();
  354|       |
  355|  33.3k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.1k, False: 1.19k]
  |  |  ------------------
  ------------------
  356|  32.1k|    {
  357|  32.1k|      end_processing ();
  358|  32.1k|      return blob;
  359|  32.1k|    }
  360|       |
  361|  1.19k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.19k|    sane = t->sanitize (this);
  364|  1.19k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.09k, False: 104]
  ------------------
  365|  1.09k|    {
  366|  1.09k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.09k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.09k|    }
  379|    104|    else
  380|    104|    {
  381|    104|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 104]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    104|    }
  394|       |
  395|  1.19k|    end_processing ();
  396|       |
  397|  1.19k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.38k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.19k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.09k, False: 104]
  |  |  ------------------
  ------------------
  398|  1.19k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.09k, False: 104]
  ------------------
  399|  1.09k|    {
  400|  1.09k|      hb_blob_make_immutable (blob);
  401|  1.09k|      return blob;
  402|  1.09k|    }
  403|    104|    else
  404|    104|    {
  405|    104|      hb_blob_destroy (blob);
  406|    104|      return hb_blob_get_empty ();
  407|    104|    }
  408|  1.19k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4fvarEEEbPKT_:
  312|  1.11k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.11k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT10AxisRecordEEEbPKT_j:
  286|  1.10k|  {
  287|  1.10k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.10k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.10k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT10AxisRecordEEEbPKT_jj:
  267|  1.10k|  {
  268|  1.10k|    unsigned m;
  269|  1.10k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.10k, False: 0]
  ------------------
  270|  1.10k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.09k, False: 6]
  ------------------
  271|  1.10k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT14InstanceRecordEEEbPKT_jj:
  267|  1.09k|  {
  268|  1.09k|    unsigned m;
  269|  1.09k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.09k, False: 0]
  ------------------
  270|  1.09k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.09k, False: 8]
  ------------------
  271|  1.09k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4avarEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4avarEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.7k, False: 565]
  |  |  ------------------
  ------------------
  356|  32.7k|    {
  357|  32.7k|      end_processing ();
  358|  32.7k|      return blob;
  359|  32.7k|    }
  360|       |
  361|    565|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    565|    sane = t->sanitize (this);
  364|    565|    if (sane)
  ------------------
  |  Branch (364:9): [True: 163, False: 402]
  ------------------
  365|    163|    {
  366|    163|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 24, False: 139]
  ------------------
  367|     24|      {
  368|     24|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|     24|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     24|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|     24|	edit_count = 0;
  372|     24|	sane = t->sanitize (this);
  373|     24|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 3, False: 21]
  ------------------
  374|      3|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      3|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      3|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      3|	  sane = false;
  376|      3|	}
  377|     24|      }
  378|    163|    }
  379|    402|    else
  380|    402|    {
  381|    402|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 33, False: 369]
  |  Branch (381:25): [True: 29, False: 4]
  ------------------
  382|     29|	start = hb_blob_get_data_writable (blob, nullptr);
  383|     29|	end = start + blob->length;
  384|       |
  385|     29|	if (start)
  ------------------
  |  Branch (385:6): [True: 28, False: 1]
  ------------------
  386|     28|	{
  387|     28|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|     28|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|     28|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     28|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|     28|	  goto retry;
  391|     28|	}
  392|     29|      }
  393|    402|    }
  394|       |
  395|    537|    end_processing ();
  396|       |
  397|    537|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  1.07k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    537|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 160, False: 377]
  |  |  ------------------
  ------------------
  398|    537|    if (sane)
  ------------------
  |  Branch (398:9): [True: 160, False: 377]
  ------------------
  399|    160|    {
  400|    160|      hb_blob_make_immutable (blob);
  401|    160|      return blob;
  402|    160|    }
  403|    377|    else
  404|    377|    {
  405|    377|      hb_blob_destroy (blob);
  406|    377|      return hb_blob_get_empty ();
  407|    377|    }
  408|    537|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4avarEEEbPKT_:
  312|    394|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    394|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT12AxisValueMapEEEbPKT_j:
  286|  6.85k|  {
  287|  6.85k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.85k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.85k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT12AxisValueMapEEEbPKT_jj:
  267|  6.85k|  {
  268|  6.85k|    unsigned m;
  269|  6.85k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.85k, False: 0]
  ------------------
  270|  6.85k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.68k, False: 164]
  ------------------
  271|  6.85k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4CPALEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4CPALEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.9k, False: 284]
  |  |  ------------------
  ------------------
  356|  32.9k|    {
  357|  32.9k|      end_processing ();
  358|  32.9k|      return blob;
  359|  32.9k|    }
  360|       |
  361|    284|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    284|    sane = t->sanitize (this);
  364|    284|    if (sane)
  ------------------
  |  Branch (364:9): [True: 236, False: 48]
  ------------------
  365|    236|    {
  366|    236|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 236]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    236|    }
  379|     48|    else
  380|     48|    {
  381|     48|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 48]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     48|    }
  394|       |
  395|    284|    end_processing ();
  396|       |
  397|    284|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    568|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    284|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 236, False: 48]
  |  |  ------------------
  ------------------
  398|    284|    if (sane)
  ------------------
  |  Branch (398:9): [True: 236, False: 48]
  ------------------
  399|    236|    {
  400|    236|      hb_blob_make_immutable (blob);
  401|    236|      return blob;
  402|    236|    }
  403|     48|    else
  404|     48|    {
  405|     48|      hb_blob_destroy (blob);
  406|     48|      return hb_blob_get_empty ();
  407|     48|    }
  408|    284|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4CPALEEEbPKT_:
  312|    284|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    284|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10CPALV1TailEEEbPKT_:
  312|     94|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     94|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT3SVGEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.5k|  {
  413|  32.5k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.5k, False: 0]
  ------------------
  414|  32.5k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.5k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.5k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT3SVGEEEP9hb_blob_tS4_:
  345|  32.5k|  {
  346|  32.5k|    bool sane;
  347|       |
  348|  32.5k|    init (blob);
  349|       |
  350|  32.5k|  retry:
  351|  32.5k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.5k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.5k|    start_processing ();
  354|       |
  355|  32.5k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 50]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|     50|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|     50|    sane = t->sanitize (this);
  364|     50|    if (sane)
  ------------------
  |  Branch (364:9): [True: 34, False: 16]
  ------------------
  365|     34|    {
  366|     34|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 34]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|     34|    }
  379|     16|    else
  380|     16|    {
  381|     16|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 16]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     16|    }
  394|       |
  395|     50|    end_processing ();
  396|       |
  397|     50|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    100|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     50|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 34, False: 16]
  |  |  ------------------
  ------------------
  398|     50|    if (sane)
  ------------------
  |  Branch (398:9): [True: 34, False: 16]
  ------------------
  399|     34|    {
  400|     34|      hb_blob_make_immutable (blob);
  401|     34|      return blob;
  402|     34|    }
  403|     16|    else
  404|     16|    {
  405|     16|      hb_blob_destroy (blob);
  406|     16|      return hb_blob_get_empty ();
  407|     16|    }
  408|     50|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT3SVGEEEbPKT_:
  312|     50|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     50|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT21SVGDocumentIndexEntryEEEbPKT_j:
  286|     44|  {
  287|     44|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     44|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     44|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT21SVGDocumentIndexEntryEEEbPKT_jj:
  267|     44|  {
  268|     44|    unsigned m;
  269|     44|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 44, False: 0]
  ------------------
  270|     44|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 34, False: 10]
  ------------------
  271|     44|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4CBLCEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4CBLCEEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.9k|  retry:
  351|  32.9k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.9k|    start_processing ();
  354|       |
  355|  32.9k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 454]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|    454|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    454|    sane = t->sanitize (this);
  364|    454|    if (sane)
  ------------------
  |  Branch (364:9): [True: 192, False: 262]
  ------------------
  365|    192|    {
  366|    192|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 167, False: 25]
  ------------------
  367|    167|      {
  368|    167|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    167|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    167|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    167|	edit_count = 0;
  372|    167|	sane = t->sanitize (this);
  373|    167|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 8, False: 159]
  ------------------
  374|      8|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      8|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      8|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      8|	  sane = false;
  376|      8|	}
  377|    167|      }
  378|    192|    }
  379|    262|    else
  380|    262|    {
  381|    262|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 238, False: 24]
  |  Branch (381:25): [True: 205, False: 33]
  ------------------
  382|    205|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    205|	end = start + blob->length;
  384|       |
  385|    205|	if (start)
  ------------------
  |  Branch (385:6): [True: 200, False: 5]
  ------------------
  386|    200|	{
  387|    200|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    200|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    200|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    200|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    200|	  goto retry;
  391|    200|	}
  392|    205|      }
  393|    262|    }
  394|       |
  395|    254|    end_processing ();
  396|       |
  397|    254|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    508|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    254|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 177, False: 77]
  |  |  ------------------
  ------------------
  398|    254|    if (sane)
  ------------------
  |  Branch (398:9): [True: 177, False: 77]
  ------------------
  399|    177|    {
  400|    177|      hb_blob_make_immutable (blob);
  401|    177|      return blob;
  402|    177|    }
  403|     77|    else
  404|     77|    {
  405|     77|      hb_blob_destroy (blob);
  406|     77|      return hb_blob_get_empty ();
  407|     77|    }
  408|    254|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4CBLCEEEbPKT_:
  312|    621|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    621|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT15BitmapSizeTableEEEbPKT_j:
  286|    615|  {
  287|    615|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    615|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    615|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT15BitmapSizeTableEEEbPKT_jj:
  267|    615|  {
  268|    615|    unsigned m;
  269|    615|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 614, False: 1]
  ------------------
  270|    615|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 604, False: 10]
  ------------------
  271|    615|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT15BitmapSizeTableEEEbPKT_:
  312|  3.14k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.14k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_18IndexSubtableArrayENS1_7IntTypeIjLj4EEELb0EEEEEbPKT_:
  312|  3.14k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.14k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT19IndexSubtableRecordEEEbPKT_j:
  286|  3.13k|  {
  287|  3.13k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  3.13k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  3.13k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT19IndexSubtableRecordEEEbPKT_jj:
  267|  3.13k|  {
  268|  3.13k|    unsigned m;
  269|  3.13k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.13k, False: 2]
  ------------------
  270|  3.13k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 3.12k, False: 14]
  ------------------
  271|  3.13k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT19IndexSubtableRecordEEEbPKT_:
  312|   101k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   101k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13IndexSubtableENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|   101k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   101k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19IndexSubtableHeaderEEEbPKT_:
  312|  55.4k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  55.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT23IndexSubtableFormat1Or3INS1_7IntTypeIjLj4EEEEEEEbPKT_:
  312|  10.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  10.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT6OffsetINS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|  10.8k|  {
  287|  10.8k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  10.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  10.8k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT6OffsetINS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|  10.8k|  {
  268|  10.8k|    unsigned m;
  269|  10.8k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 10.8k, False: 0]
  ------------------
  270|  10.8k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 10.7k, False: 102]
  ------------------
  271|  10.8k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT23IndexSubtableFormat1Or3INS1_7IntTypeItLj2EEEEEEEbPKT_:
  312|    564|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    564|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13IndexSubtableENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.94k|  {
  335|  1.94k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.94k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.73k, False: 209]
  ------------------
  336|  1.73k|    {
  337|  1.73k|      * const_cast<Type *> (obj) = v;
  338|  1.73k|      return true;
  339|  1.73k|    }
  340|    209|    return false;
  341|  1.94k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT15SBitLineMetricsEEEbPKT_:
  312|  5.77k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  5.77k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4CBDTEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4CBDTEEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.6k, False: 120]
  |  |  ------------------
  ------------------
  356|  32.6k|    {
  357|  32.6k|      end_processing ();
  358|  32.6k|      return blob;
  359|  32.6k|    }
  360|       |
  361|    120|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    120|    sane = t->sanitize (this);
  364|    120|    if (sane)
  ------------------
  |  Branch (364:9): [True: 114, False: 6]
  ------------------
  365|    114|    {
  366|    114|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 114]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    114|    }
  379|      6|    else
  380|      6|    {
  381|      6|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 6]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|      6|    }
  394|       |
  395|    120|    end_processing ();
  396|       |
  397|    120|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    240|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    120|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 114, False: 6]
  |  |  ------------------
  ------------------
  398|    120|    if (sane)
  ------------------
  |  Branch (398:9): [True: 114, False: 6]
  ------------------
  399|    114|    {
  400|    114|      hb_blob_make_immutable (blob);
  401|    114|      return blob;
  402|    114|    }
  403|      6|    else
  404|      6|    {
  405|      6|      hb_blob_destroy (blob);
  406|      6|      return hb_blob_get_empty ();
  407|      6|    }
  408|    120|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4CBDTEEEbPKT_:
  312|    120|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    120|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4sbixEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.8k|  {
  413|  32.8k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.8k, False: 0]
  ------------------
  414|  32.8k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.8k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.8k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4sbixEEEP9hb_blob_tS4_:
  345|  32.8k|  {
  346|  32.8k|    bool sane;
  347|       |
  348|  32.8k|    init (blob);
  349|       |
  350|  32.9k|  retry:
  351|  32.9k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.9k|    start_processing ();
  354|       |
  355|  32.9k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.6k, False: 296]
  |  |  ------------------
  ------------------
  356|  32.6k|    {
  357|  32.6k|      end_processing ();
  358|  32.6k|      return blob;
  359|  32.6k|    }
  360|       |
  361|    296|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    296|    sane = t->sanitize (this);
  364|    296|    if (sane)
  ------------------
  |  Branch (364:9): [True: 178, False: 118]
  ------------------
  365|    178|    {
  366|    178|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 86, False: 92]
  ------------------
  367|     86|      {
  368|     86|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|     86|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     86|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|     86|	edit_count = 0;
  372|     86|	sane = t->sanitize (this);
  373|     86|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 86]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|     86|      }
  378|    178|    }
  379|    118|    else
  380|    118|    {
  381|    118|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 103, False: 15]
  |  Branch (381:25): [True: 95, False: 8]
  ------------------
  382|     95|	start = hb_blob_get_data_writable (blob, nullptr);
  383|     95|	end = start + blob->length;
  384|       |
  385|     95|	if (start)
  ------------------
  |  Branch (385:6): [True: 94, False: 1]
  ------------------
  386|     94|	{
  387|     94|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|     94|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|     94|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     94|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|     94|	  goto retry;
  391|     94|	}
  392|     95|      }
  393|    118|    }
  394|       |
  395|    202|    end_processing ();
  396|       |
  397|    202|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    404|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    202|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 178, False: 24]
  |  |  ------------------
  ------------------
  398|    202|    if (sane)
  ------------------
  |  Branch (398:9): [True: 178, False: 24]
  ------------------
  399|    178|    {
  400|    178|      hb_blob_make_immutable (blob);
  401|    178|      return blob;
  402|    178|    }
  403|     24|    else
  404|     24|    {
  405|     24|      hb_blob_destroy (blob);
  406|     24|      return hb_blob_get_empty ();
  407|     24|    }
  408|    202|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4sbixEEEbPKT_:
  312|    382|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    382|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|    378|  {
  287|    378|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    378|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    378|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|    378|  {
  268|    378|    unsigned m;
  269|    378|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 377, False: 1]
  ------------------
  270|    378|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 367, False: 10]
  ------------------
  271|    378|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_:
  312|  6.75k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.75k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10SBIXStrikeEEEbPKT_:
  312|  2.68k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.68k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_9SBIXGlyphENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_j:
  286|  1.04k|  {
  287|  1.04k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.04k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.04k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_9SBIXGlyphENS1_7IntTypeIjLj4EEELb1EEEEEbPKT_jj:
  267|  1.04k|  {
  268|  1.04k|    unsigned m;
  269|  1.04k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.04k, False: 0]
  ------------------
  270|  1.04k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.01k, False: 23]
  ------------------
  271|  1.04k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10SBIXStrikeENS1_7IntTypeIjLj4EEELb1EEEiEEbPKT_RKT0_:
  334|  1.66k|  {
  335|  1.66k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.66k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.56k, False: 103]
  ------------------
  336|  1.56k|    {
  337|  1.56k|      * const_cast<Type *> (obj) = v;
  338|  1.56k|      return true;
  339|  1.56k|    }
  340|    103|    return false;
  341|  1.66k|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF9FDSelect0EEEbPKT_:
  312|     83|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     83|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF8FDSelectEEEbPKT_:
  312|    139|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    139|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF11FDSelect3_4IN2OT7IntTypeItLj2EEENS4_IhLj1EEEEEEEbPKT_:
  312|     77|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     77|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS4_IhLj1EEEEEEEbPKT_j:
  286|     76|  {
  287|     76|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     76|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     76|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeItLj2EEENS4_IhLj1EEEEEEEbPKT_jj:
  267|     76|  {
  268|     76|    unsigned m;
  269|     76|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 76, False: 0]
  ------------------
  270|     76|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 75, False: 1]
  ------------------
  271|     76|  }
_ZNK21hb_sanitize_context_t11check_arrayIN3CFF15Encoding1_RangeEEEbPKT_j:
  286|      6|  {
  287|      6|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|      6|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|      6|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3CFF15Encoding1_RangeEEEbPKT_jj:
  267|      6|  {
  268|      6|    unsigned m;
  269|      6|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6, False: 0]
  ------------------
  270|      6|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 5, False: 1]
  ------------------
  271|      6|  }
_ZNK21hb_sanitize_context_t11check_arrayIN3CFF12SuppEncodingEEEbPKT_j:
  286|      4|  {
  287|      4|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|      4|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|      4|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3CFF12SuppEncodingEEEbPKT_jj:
  267|      4|  {
  268|      4|    unsigned m;
  269|      4|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 4, False: 0]
  ------------------
  270|      4|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 2, False: 2]
  ------------------
  271|      4|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF8EncodingEEEbPKT_:
  312|     17|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     17|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF7CharsetEEEbPKT_:
  312|  1.03k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.03k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF10Charset1_2IN2OT7IntTypeIhLj1EEEEEEEbPKT_:
  312|    559|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    559|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF13Charset_RangeIN2OT7IntTypeIhLj1EEEEEEEbPKT_:
  312|  29.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  29.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF10Charset1_2IN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|    103|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    103|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF13Charset_RangeIN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|   289k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   289k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT4cff1EEEbPKT_:
  312|  1.71k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.71k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4cff1EEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4cff1EEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.0k, False: 1.71k]
  |  |  ------------------
  ------------------
  356|  31.0k|    {
  357|  31.0k|      end_processing ();
  358|  31.0k|      return blob;
  359|  31.0k|    }
  360|       |
  361|  1.71k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.71k|    sane = t->sanitize (this);
  364|  1.71k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.69k, False: 27]
  ------------------
  365|  1.69k|    {
  366|  1.69k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.69k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.69k|    }
  379|     27|    else
  380|     27|    {
  381|     27|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 27]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     27|    }
  394|       |
  395|  1.71k|    end_processing ();
  396|       |
  397|  1.71k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  3.43k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.71k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.69k, False: 27]
  |  |  ------------------
  ------------------
  398|  1.71k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.69k, False: 27]
  ------------------
  399|  1.69k|    {
  400|  1.69k|      hb_blob_make_immutable (blob);
  401|  1.69k|      return blob;
  402|  1.69k|    }
  403|     27|    else
  404|     27|    {
  405|     27|      hb_blob_destroy (blob);
  406|     27|      return hb_blob_get_empty ();
  407|     27|    }
  408|  1.71k|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF8CFFIndexIN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|  8.14k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  8.14k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7IntTypeIhLj1EEEEEbPKT_jj:
  294|  18.3k|  {
  295|  18.3k|    return this->check_range (base, a, b, hb_static_size (T));
  ------------------
  |  |   91|  18.3k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  296|  18.3k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7IntTypeIhLj1EEEEEbPKT_jjj:
  278|  18.3k|  {
  279|  18.3k|    unsigned m;
  280|  18.3k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (280:12): [True: 18.3k, False: 7]
  ------------------
  281|  18.3k|	   this->check_range (base, m, c);
  ------------------
  |  Branch (281:5): [True: 18.2k, False: 57]
  ------------------
  282|  18.3k|  }
_ZNK21hb_sanitize_context_t11check_arrayIhEEbPKT_j:
  286|   143k|  {
  287|   143k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   143k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   143k|  }
_ZNK21hb_sanitize_context_t11check_rangeIhEEbPKT_jj:
  267|   143k|  {
  268|   143k|    unsigned m;
  269|   143k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 143k, False: 0]
  ------------------
  270|   143k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 143k, False: 10]
  ------------------
  271|   143k|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF12CFF2FDSelectEEEbPKT_:
  312|     52|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     52|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3CFF11FDSelect3_4IN2OT7IntTypeIjLj4EEENS4_ItLj2EEEEEEEbPKT_:
  312|     24|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     24|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS4_ItLj2EEEEEEEbPKT_j:
  286|     23|  {
  287|     23|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     23|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     23|  }
_ZNK21hb_sanitize_context_t11check_rangeIN3CFF17FDSelect3_4_RangeIN2OT7IntTypeIjLj4EEENS4_ItLj2EEEEEEEbPKT_jj:
  267|     23|  {
  268|     23|    unsigned m;
  269|     23|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 22, False: 1]
  ------------------
  270|     23|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 15, False: 7]
  ------------------
  271|     23|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF18CFF2VariationStoreEEEbPKT_:
  312|     64|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     64|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT4cff2EEEbPKT_:
  312|  1.29k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.29k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4cff2EEEP9hb_blob_tPK9hb_face_tj:
  412|  31.9k|  {
  413|  31.9k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 31.9k, False: 0]
  ------------------
  414|  31.9k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  31.9k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  31.9k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4cff2EEEP9hb_blob_tS4_:
  345|  31.9k|  {
  346|  31.9k|    bool sane;
  347|       |
  348|  31.9k|    init (blob);
  349|       |
  350|  31.9k|  retry:
  351|  31.9k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  31.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  31.9k|    start_processing ();
  354|       |
  355|  31.9k|    if (unlikely (!start))
  ------------------
  |  |  259|  31.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.6k, False: 1.29k]
  |  |  ------------------
  ------------------
  356|  30.6k|    {
  357|  30.6k|      end_processing ();
  358|  30.6k|      return blob;
  359|  30.6k|    }
  360|       |
  361|  1.29k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.29k|    sane = t->sanitize (this);
  364|  1.29k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 1.24k, False: 51]
  ------------------
  365|  1.24k|    {
  366|  1.24k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 1.24k]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|  1.24k|    }
  379|     51|    else
  380|     51|    {
  381|     51|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 51]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     51|    }
  394|       |
  395|  1.29k|    end_processing ();
  396|       |
  397|  1.29k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.59k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 1.24k, False: 51]
  |  |  ------------------
  ------------------
  398|  1.29k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 1.24k, False: 51]
  ------------------
  399|  1.24k|    {
  400|  1.24k|      hb_blob_make_immutable (blob);
  401|  1.24k|      return blob;
  402|  1.24k|    }
  403|     51|    else
  404|     51|    {
  405|     51|      hb_blob_destroy (blob);
  406|     51|      return hb_blob_get_empty ();
  407|     51|    }
  408|  1.29k|  }
_ZNK21hb_sanitize_context_t12check_structIN3CFF8CFFIndexIN2OT7IntTypeIjLj4EEEEEEEbPKT_:
  312|  3.47k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.47k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT20KernOTSubTableHeaderEEEbPKT_:
  312|  4.36k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.36k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT21KernAATSubTableHeaderEEEbPKT_:
  312|  1.21k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.21k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t10set_objectIN2OT12KernSubTableINS1_20KernOTSubTableHeaderEEEEEvPKT_:
  176|  25.5k|  {
  177|  25.5k|    reset_object ();
  178|       |
  179|  25.5k|    if (!obj) return;
  ------------------
  |  Branch (179:9): [True: 1.92k, False: 23.6k]
  ------------------
  180|       |
  181|  23.6k|    const char *obj_start = (const char *) obj;
  182|  23.6k|    if (unlikely (obj_start < this->start || this->end <= obj_start))
  ------------------
  |  |  259|  47.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 23.6k]
  |  |  |  Branch (259:47): [True: 0, False: 23.6k]
  |  |  |  Branch (259:47): [True: 0, False: 23.6k]
  |  |  ------------------
  ------------------
  183|      0|      this->start = this->end = nullptr;
  184|  23.6k|    else
  185|  23.6k|    {
  186|  23.6k|      this->start = obj_start;
  187|  23.6k|      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
  188|  23.6k|    }
  189|  23.6k|  }
_ZN21hb_sanitize_context_t10set_objectIN2OT12KernSubTableINS1_21KernAATSubTableHeaderEEEEEvPKT_:
  176|  3.14k|  {
  177|  3.14k|    reset_object ();
  178|       |
  179|  3.14k|    if (!obj) return;
  ------------------
  |  Branch (179:9): [True: 2.55k, False: 598]
  ------------------
  180|       |
  181|    598|    const char *obj_start = (const char *) obj;
  182|    598|    if (unlikely (obj_start < this->start || this->end <= obj_start))
  ------------------
  |  |  259|  1.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 598]
  |  |  |  Branch (259:47): [True: 0, False: 598]
  |  |  |  Branch (259:47): [True: 0, False: 598]
  |  |  ------------------
  ------------------
  183|      0|      this->start = this->end = nullptr;
  184|    598|    else
  185|    598|    {
  186|    598|      this->start = obj_start;
  187|    598|      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
  188|    598|    }
  189|    598|  }
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat2IN2OT20KernOTSubTableHeaderEEEEEbPKT_:
  312|     93|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     93|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToIN3AAT10ClassTableINS1_7IntTypeItLj2EEEEES6_Lb0EEEEEbPKT_:
  312|    306|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    306|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT10ClassTableIN2OT7IntTypeItLj2EEEEEEEbPKT_:
  312|    306|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    306|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat1IN2OT21KernAATSubTableHeaderEEEEEbPKT_:
  312|    206|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    206|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN3AAT19KerxSubTableFormat2IN2OT21KernAATSubTableHeaderEEEEEbPKT_:
  312|     65|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     65|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT19KernSubTableFormat3INS1_21KernAATSubTableHeaderEEEEEbPKT_:
  312|     51|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     51|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT7DataMapEEEbPKT_:
  312|  6.88k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.88k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t15reference_tableIN2OT4metaEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.6k|  {
  413|  32.6k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.6k, False: 0]
  ------------------
  414|  32.6k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.6k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.6k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4metaEEEP9hb_blob_tS4_:
  345|  32.6k|  {
  346|  32.6k|    bool sane;
  347|       |
  348|  32.6k|    init (blob);
  349|       |
  350|  32.6k|  retry:
  351|  32.6k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.6k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.6k|    start_processing ();
  354|       |
  355|  32.6k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.5k, False: 67]
  |  |  ------------------
  ------------------
  356|  32.5k|    {
  357|  32.5k|      end_processing ();
  358|  32.5k|      return blob;
  359|  32.5k|    }
  360|       |
  361|     67|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|     67|    sane = t->sanitize (this);
  364|     67|    if (sane)
  ------------------
  |  Branch (364:9): [True: 15, False: 52]
  ------------------
  365|     15|    {
  366|     15|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 15]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|     15|    }
  379|     52|    else
  380|     52|    {
  381|     52|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 52]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     52|    }
  394|       |
  395|     67|    end_processing ();
  396|       |
  397|     67|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    134|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     67|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 15, False: 52]
  |  |  ------------------
  ------------------
  398|     67|    if (sane)
  ------------------
  |  Branch (398:9): [True: 15, False: 52]
  ------------------
  399|     15|    {
  400|     15|      hb_blob_make_immutable (blob);
  401|     15|      return blob;
  402|     15|    }
  403|     52|    else
  404|     52|    {
  405|     52|      hb_blob_destroy (blob);
  406|     52|      return hb_blob_get_empty ();
  407|     52|    }
  408|     67|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4metaEEEbPKT_:
  312|     67|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     67|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT7DataMapEEEbPKT_j:
  286|     49|  {
  287|     49|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     49|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     49|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT7DataMapEEEbPKT_jj:
  267|     49|  {
  268|     49|    unsigned m;
  269|     49|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 48, False: 1]
  ------------------
  270|     49|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 36, False: 12]
  ------------------
  271|     49|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT10NameRecordEEEbPKT_:
  312|   581k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   581k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14UnsizedArrayOfINS1_7IntTypeIhLj1EEEEENS4_ItLj2EEELb0EEEEEbPKT_:
  312|   581k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   581k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT4nameEEEbPKT_:
  312|  1.29k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.29k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT10NameRecordEEEbPKT_j:
  286|  1.72k|  {
  287|  1.72k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.72k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.72k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT10NameRecordEEEbPKT_jj:
  267|  1.72k|  {
  268|  1.72k|    unsigned m;
  269|  1.72k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.72k, False: 0]
  ------------------
  270|  1.72k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 1.69k, False: 37]
  ------------------
  271|  1.72k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4nameEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.6k|  {
  413|  32.6k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.6k, False: 0]
  ------------------
  414|  32.6k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.6k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.6k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4nameEEEP9hb_blob_tS4_:
  345|  32.6k|  {
  346|  32.6k|    bool sane;
  347|       |
  348|  32.6k|    init (blob);
  349|       |
  350|  32.6k|  retry:
  351|  32.6k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.6k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.6k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.6k|    start_processing ();
  354|       |
  355|  32.6k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.3k, False: 1.29k]
  |  |  ------------------
  ------------------
  356|  31.3k|    {
  357|  31.3k|      end_processing ();
  358|  31.3k|      return blob;
  359|  31.3k|    }
  360|       |
  361|  1.29k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.29k|    sane = t->sanitize (this);
  364|  1.29k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 688, False: 605]
  ------------------
  365|    688|    {
  366|    688|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 688]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    688|    }
  379|    605|    else
  380|    605|    {
  381|    605|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 605]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    605|    }
  394|       |
  395|  1.29k|    end_processing ();
  396|       |
  397|  1.29k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.58k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.29k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 688, False: 605]
  |  |  ------------------
  ------------------
  398|  1.29k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 688, False: 605]
  ------------------
  399|    688|    {
  400|    688|      hb_blob_make_immutable (blob);
  401|    688|      return blob;
  402|    688|    }
  403|    605|    else
  404|    605|    {
  405|    605|      hb_blob_destroy (blob);
  406|    605|      return hb_blob_get_empty ();
  407|    605|    }
  408|  1.29k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4postEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.7k|  {
  413|  32.7k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.7k, False: 0]
  ------------------
  414|  32.7k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.7k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.7k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4postEEEP9hb_blob_tS4_:
  345|  32.7k|  {
  346|  32.7k|    bool sane;
  347|       |
  348|  32.7k|    init (blob);
  349|       |
  350|  32.7k|  retry:
  351|  32.7k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  32.7k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  32.7k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  32.7k|    start_processing ();
  354|       |
  355|  32.7k|    if (unlikely (!start))
  ------------------
  |  |  259|  32.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 31.5k, False: 1.18k]
  |  |  ------------------
  ------------------
  356|  31.5k|    {
  357|  31.5k|      end_processing ();
  358|  31.5k|      return blob;
  359|  31.5k|    }
  360|       |
  361|  1.18k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.18k|    sane = t->sanitize (this);
  364|  1.18k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 647, False: 537]
  ------------------
  365|    647|    {
  366|    647|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 647]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    647|    }
  379|    537|    else
  380|    537|    {
  381|    537|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 537]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    537|    }
  394|       |
  395|  1.18k|    end_processing ();
  396|       |
  397|  1.18k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  2.36k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  1.18k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 647, False: 537]
  |  |  ------------------
  ------------------
  398|  1.18k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 647, False: 537]
  ------------------
  399|    647|    {
  400|    647|      hb_blob_make_immutable (blob);
  401|    647|      return blob;
  402|    647|    }
  403|    537|    else
  404|    537|    {
  405|    537|      hb_blob_destroy (blob);
  406|    537|      return hb_blob_get_empty ();
  407|    537|    }
  408|  1.18k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4postEEEbPKT_:
  312|  1.18k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.18k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|   108k|  {
  287|   108k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|   108k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|   108k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|   108k|  {
  268|   108k|    unsigned m;
  269|   108k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 108k, False: 0]
  ------------------
  270|   108k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 108k, False: 9]
  ------------------
  271|   108k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  3.58M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.58M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GSUB_impl11SingleSubstENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  40.5k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEbPKT_:
  312|  3.33k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.33k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_11MediumTypesEEEEEbPKT_:
  312|  1.12k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.12k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GSUB_impl13MultipleSubstENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|   139k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  23.1k|  {
  287|  23.1k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  23.1k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  23.1k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  23.1k|  {
  268|  23.1k|    unsigned m;
  269|  23.1k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 23.1k, False: 0]
  ------------------
  270|  23.1k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 22.8k, False: 284]
  ------------------
  271|  23.1k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   206k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   206k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  12.8k|  {
  335|  12.8k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  12.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 11.6k, False: 1.13k]
  ------------------
  336|  11.6k|    {
  337|  11.6k|      * const_cast<Type *> (obj) = v;
  338|  11.6k|      return true;
  339|  11.6k|    }
  340|  1.13k|    return false;
  341|  12.8k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  4.14k|  {
  287|  4.14k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  4.14k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  4.14k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  4.14k|  {
  268|  4.14k|    unsigned m;
  269|  4.14k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 4.14k, False: 0]
  ------------------
  270|  4.14k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 3.72k, False: 416]
  ------------------
  271|  4.14k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   226k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   226k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl8SequenceINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.26k|  {
  335|  1.26k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.26k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.21k, False: 48]
  ------------------
  336|  1.21k|    {
  337|  1.21k|      * const_cast<Type *> (obj) = v;
  338|  1.21k|      return true;
  339|  1.21k|    }
  340|     48|    return false;
  341|  1.26k|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GSUB_impl14AlternateSubstENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  28.9k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  5.02k|  {
  287|  5.02k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  5.02k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  5.02k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  5.02k|  {
  268|  5.02k|    unsigned m;
  269|  5.02k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 5.02k, False: 0]
  ------------------
  270|  5.02k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 4.87k, False: 151]
  ------------------
  271|  5.02k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   107k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   107k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    922|  {
  335|    922|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    922|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 875, False: 47]
  ------------------
  336|    875|    {
  337|    875|      * const_cast<Type *> (obj) = v;
  338|    875|      return true;
  339|    875|    }
  340|     47|    return false;
  341|    922|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  3.14k|  {
  287|  3.14k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  3.14k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  3.14k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  3.14k|  {
  268|  3.14k|    unsigned m;
  269|  3.14k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 3.14k, False: 0]
  ------------------
  270|  3.14k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 2.96k, False: 178]
  ------------------
  271|  3.14k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  13.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  13.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl12AlternateSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    660|  {
  335|    660|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    660|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 634, False: 26]
  ------------------
  336|    634|    {
  337|    634|      * const_cast<Type *> (obj) = v;
  338|    634|      return true;
  339|    634|    }
  340|     26|    return false;
  341|    660|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GSUB_impl13LigatureSubstENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  86.5k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  15.6k|  {
  287|  15.6k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  15.6k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  15.6k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  15.6k|  {
  268|  15.6k|    unsigned m;
  269|  15.6k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 15.6k, False: 0]
  ------------------
  270|  15.6k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 15.3k, False: 266]
  ------------------
  271|  15.6k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   190k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   190k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  44.2k|  {
  287|  44.2k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  44.2k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  44.2k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  44.2k|  {
  268|  44.2k|    unsigned m;
  269|  44.2k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 44.2k, False: 0]
  ------------------
  270|  44.2k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 43.8k, False: 488]
  ------------------
  271|  44.2k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  2.08M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  2.08M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  9.61k|  {
  335|  9.61k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  9.61k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 9.24k, False: 369]
  ------------------
  336|  9.24k|    {
  337|  9.24k|      * const_cast<Type *> (obj) = v;
  338|  9.24k|      return true;
  339|  9.24k|    }
  340|    369|    return false;
  341|  9.61k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.74k|  {
  335|  1.74k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.74k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.33k, False: 405]
  ------------------
  336|  1.33k|    {
  337|  1.33k|      * const_cast<Type *> (obj) = v;
  338|  1.33k|      return true;
  339|  1.33k|    }
  340|    405|    return false;
  341|  1.74k|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|  6.35k|  {
  287|  6.35k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.35k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.35k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|  6.35k|  {
  268|  6.35k|    unsigned m;
  269|  6.35k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.35k, False: 0]
  ------------------
  270|  6.35k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.05k, False: 304]
  ------------------
  271|  6.35k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|  3.92M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  3.92M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  6.55k|  {
  287|  6.55k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.55k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.55k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  6.55k|  {
  268|  6.55k|    unsigned m;
  269|  6.55k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.55k, False: 0]
  ------------------
  270|  6.55k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.41k, False: 142]
  ------------------
  271|  6.55k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   156k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   156k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_11MediumTypesEEENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.87k|  {
  335|  1.87k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.87k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.81k, False: 54]
  ------------------
  336|  1.81k|    {
  337|  1.81k|      * const_cast<Type *> (obj) = v;
  338|  1.81k|      return true;
  339|  1.81k|    }
  340|     54|    return false;
  341|  1.87k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_11MediumTypesEEENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|  1.48k|  {
  335|  1.48k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.48k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.38k, False: 99]
  ------------------
  336|  1.38k|    {
  337|  1.38k|      * const_cast<Type *> (obj) = v;
  338|  1.38k|      return true;
  339|  1.38k|    }
  340|     99|    return false;
  341|  1.48k|  }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT9ExtensionINS1_6Layout9GSUB_impl14ExtensionSubstEEENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  43.6k|  { return format->sanitize (this); }
_ZN21hb_sanitize_context_t12may_dispatchIN2OT16ExtensionFormat1INS1_6Layout9GSUB_impl14ExtensionSubstEEES6_EEbPKT_PKT0_:
  135|  7.15k|  { return format->sanitize (this); }
_ZNK21hb_sanitize_context_t12check_structIN2OT16ExtensionFormat1INS1_6Layout9GSUB_impl14ExtensionSubstEEEEEbPKT_:
  312|  7.15k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.15k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t12may_dispatchIN2OT6Layout9GSUB_impl23ReverseChainSingleSubstENS1_7IntTypeItLj2EEEEEbPKT_PKT0_:
  135|  65.2k|  { return format->sanitize (this); }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  56.2k|  {
  335|  56.2k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  56.2k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 51.5k, False: 4.71k]
  ------------------
  336|  51.5k|    {
  337|  51.5k|      * const_cast<Type *> (obj) = v;
  338|  51.5k|      return true;
  339|  51.5k|    }
  340|  4.71k|    return false;
  341|  56.2k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEEEES8_Lb1EEEEEbPKT_:
  312|  20.7k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  20.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  20.0k|  {
  287|  20.0k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  20.0k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  20.0k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  20.0k|  {
  268|  20.0k|    unsigned m;
  269|  20.0k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 20.0k, False: 0]
  ------------------
  270|  20.0k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 19.8k, False: 220]
  ------------------
  271|  20.0k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   331k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   331k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  25.8k|  {
  335|  25.8k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  25.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 19.8k, False: 6.07k]
  ------------------
  336|  19.8k|    {
  337|  19.8k|      * const_cast<Type *> (obj) = v;
  338|  19.8k|      return true;
  339|  19.8k|    }
  340|  6.07k|    return false;
  341|  25.8k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeItLj2EEEEES8_Lb1EEEiEEbPKT_RKT0_:
  334|  6.72k|  {
  335|  6.72k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  6.72k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 610, False: 6.11k]
  ------------------
  336|    610|    {
  337|    610|      * const_cast<Type *> (obj) = v;
  338|    610|      return true;
  339|    610|    }
  340|  6.11k|    return false;
  341|  6.72k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEEEES8_Lb1EEEEEbPKT_:
  312|    336|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    336|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_j:
  286|    197|  {
  287|    197|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    197|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    197|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_jj:
  267|    197|  {
  268|    197|    unsigned m;
  269|    197|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 197, False: 0]
  ------------------
  270|    197|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 184, False: 13]
  ------------------
  271|    197|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEEEbPKT_:
  312|   173k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   173k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEELb1EEEiEEbPKT_RKT0_:
  334|    784|  {
  335|    784|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    784|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 758, False: 26]
  ------------------
  336|    758|    {
  337|    758|      * const_cast<Type *> (obj) = v;
  338|    758|      return true;
  339|    758|    }
  340|     26|    return false;
  341|    784|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_16List16OfOffsetToINS1_6Layout9GSUB_impl11SubstLookupENS1_7IntTypeIjLj3EEEEES8_Lb1EEEiEEbPKT_RKT0_:
  334|    110|  {
  335|    110|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    110|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 74, False: 36]
  ------------------
  336|     74|    {
  337|     74|      * const_cast<Type *> (obj) = v;
  338|     74|      return true;
  339|     74|    }
  340|     36|    return false;
  341|    110|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT6Layout4GSUBEEEP9hb_blob_tPK9hb_face_tj:
  412|  32.9k|  {
  413|  32.9k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 32.9k, False: 0]
  ------------------
  414|  32.9k|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  32.9k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  32.9k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT6Layout4GSUBEEEP9hb_blob_tS5_:
  345|  32.9k|  {
  346|  32.9k|    bool sane;
  347|       |
  348|  32.9k|    init (blob);
  349|       |
  350|  41.3k|  retry:
  351|  41.3k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  41.3k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  41.3k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  41.3k|    start_processing ();
  354|       |
  355|  41.3k|    if (unlikely (!start))
  ------------------
  |  |  259|  41.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 23.8k, False: 17.5k]
  |  |  ------------------
  ------------------
  356|  23.8k|    {
  357|  23.8k|      end_processing ();
  358|  23.8k|      return blob;
  359|  23.8k|    }
  360|       |
  361|  17.5k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  17.5k|    sane = t->sanitize (this);
  364|  17.5k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 7.79k, False: 9.71k]
  ------------------
  365|  7.79k|    {
  366|  7.79k|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 7.34k, False: 444]
  ------------------
  367|  7.34k|      {
  368|  7.34k|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|  7.34k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  7.34k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|  7.34k|	edit_count = 0;
  372|  7.34k|	sane = t->sanitize (this);
  373|  7.34k|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 148, False: 7.20k]
  ------------------
  374|    148|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|    148|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    148|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|    148|	  sane = false;
  376|    148|	}
  377|  7.34k|      }
  378|  7.79k|    }
  379|  9.71k|    else
  380|  9.71k|    {
  381|  9.71k|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 9.61k, False: 100]
  |  Branch (381:25): [True: 8.50k, False: 1.11k]
  ------------------
  382|  8.50k|	start = hb_blob_get_data_writable (blob, nullptr);
  383|  8.50k|	end = start + blob->length;
  384|       |
  385|  8.50k|	if (start)
  ------------------
  |  Branch (385:6): [True: 8.45k, False: 42]
  ------------------
  386|  8.45k|	{
  387|  8.45k|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|  8.45k|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|  8.45k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  8.45k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|  8.45k|	  goto retry;
  391|  8.45k|	}
  392|  8.50k|      }
  393|  9.71k|    }
  394|       |
  395|  9.04k|    end_processing ();
  396|       |
  397|  9.04k|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  18.0k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  9.04k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 7.45k, False: 1.59k]
  |  |  ------------------
  ------------------
  398|  9.04k|    if (sane)
  ------------------
  |  Branch (398:9): [True: 7.45k, False: 1.59k]
  ------------------
  399|  7.45k|    {
  400|  7.45k|      hb_blob_make_immutable (blob);
  401|  7.45k|      return blob;
  402|  7.45k|    }
  403|  1.59k|    else
  404|  1.59k|    {
  405|  1.59k|      hb_blob_destroy (blob);
  406|  1.59k|      return hb_blob_get_empty ();
  407|  1.59k|    }
  408|  9.04k|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4VORGEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4VORGEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.2k|  retry:
  351|  33.2k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.2k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.2k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.2k|    start_processing ();
  354|       |
  355|  33.2k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 33.1k, False: 52]
  |  |  ------------------
  ------------------
  356|  33.1k|    {
  357|  33.1k|      end_processing ();
  358|  33.1k|      return blob;
  359|  33.1k|    }
  360|       |
  361|     52|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|     52|    sane = t->sanitize (this);
  364|     52|    if (sane)
  ------------------
  |  Branch (364:9): [True: 38, False: 14]
  ------------------
  365|     38|    {
  366|     38|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 38]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|     38|    }
  379|     14|    else
  380|     14|    {
  381|     14|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 14]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|     14|    }
  394|       |
  395|     52|    end_processing ();
  396|       |
  397|     52|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    104|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     52|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 38, False: 14]
  |  |  ------------------
  ------------------
  398|     52|    if (sane)
  ------------------
  |  Branch (398:9): [True: 38, False: 14]
  ------------------
  399|     38|    {
  400|     38|      hb_blob_make_immutable (blob);
  401|     38|      return blob;
  402|     38|    }
  403|     14|    else
  404|     14|    {
  405|     14|      hb_blob_destroy (blob);
  406|     14|      return hb_blob_get_empty ();
  407|     14|    }
  408|     52|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4VORGEEEbPKT_:
  312|     52|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|     52|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT16VertOriginMetricEEEbPKT_j:
  286|     41|  {
  287|     41|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|     41|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|     41|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT16VertOriginMetricEEEbPKT_jj:
  267|     41|  {
  268|     41|    unsigned m;
  269|     41|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 41, False: 0]
  ------------------
  270|     41|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 38, False: 3]
  ------------------
  271|     41|  }
_ZN25hb_sanitize_with_object_tC2IPKN2OT12KernSubTableINS1_20KernOTSubTableHeaderEEEEEP21hb_sanitize_context_tRKT_:
  433|  25.5k|  { c->set_object (obj); }
_ZN25hb_sanitize_with_object_tC2IPKN2OT12KernSubTableINS1_21KernAATSubTableHeaderEEEEEP21hb_sanitize_context_tRKT_:
  433|  3.14k|  { c->set_object (obj); }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4kernEEEP9hb_blob_tPK9hb_face_tj:
  412|  31.5k|  {
  413|  31.5k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 31.5k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  31.5k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  31.5k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4kernEEEP9hb_blob_tS4_:
  345|  31.5k|  {
  346|  31.5k|    bool sane;
  347|       |
  348|  31.5k|    init (blob);
  349|       |
  350|  31.5k|  retry:
  351|  31.5k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  31.5k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  31.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  31.5k|    start_processing ();
  354|       |
  355|  31.5k|    if (unlikely (!start))
  ------------------
  |  |  259|  31.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.8k, False: 739]
  |  |  ------------------
  ------------------
  356|  30.8k|    {
  357|  30.8k|      end_processing ();
  358|  30.8k|      return blob;
  359|  30.8k|    }
  360|       |
  361|    739|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    739|    sane = t->sanitize (this);
  364|    739|    if (sane)
  ------------------
  |  Branch (364:9): [True: 577, False: 162]
  ------------------
  365|    577|    {
  366|    577|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 0, False: 577]
  ------------------
  367|      0|      {
  368|      0|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|      0|	edit_count = 0;
  372|      0|	sane = t->sanitize (this);
  373|      0|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 0, False: 0]
  ------------------
  374|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|      0|	  sane = false;
  376|      0|	}
  377|      0|      }
  378|    577|    }
  379|    162|    else
  380|    162|    {
  381|    162|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 0, False: 162]
  |  Branch (381:25): [True: 0, False: 0]
  ------------------
  382|      0|	start = hb_blob_get_data_writable (blob, nullptr);
  383|      0|	end = start + blob->length;
  384|       |
  385|      0|	if (start)
  ------------------
  |  Branch (385:6): [True: 0, False: 0]
  ------------------
  386|      0|	{
  387|      0|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|      0|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|      0|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|      0|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|      0|	  goto retry;
  391|      0|	}
  392|      0|      }
  393|    162|    }
  394|       |
  395|    739|    end_processing ();
  396|       |
  397|    739|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  1.47k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    739|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 577, False: 162]
  |  |  ------------------
  ------------------
  398|    739|    if (sane)
  ------------------
  |  Branch (398:9): [True: 577, False: 162]
  ------------------
  399|    577|    {
  400|    577|      hb_blob_make_immutable (blob);
  401|    577|      return blob;
  402|    577|    }
  403|    162|    else
  404|    162|    {
  405|    162|      hb_blob_destroy (blob);
  406|    162|      return hb_blob_get_empty ();
  407|    162|    }
  408|    739|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4BASEEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4BASEEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.5k|  retry:
  351|  33.5k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.5k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.5k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.5k|    start_processing ();
  354|       |
  355|  33.5k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.9k, False: 630]
  |  |  ------------------
  ------------------
  356|  32.9k|    {
  357|  32.9k|      end_processing ();
  358|  32.9k|      return blob;
  359|  32.9k|    }
  360|       |
  361|    630|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|    630|    sane = t->sanitize (this);
  364|    630|    if (sane)
  ------------------
  |  Branch (364:9): [True: 227, False: 403]
  ------------------
  365|    227|    {
  366|    227|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 224, False: 3]
  ------------------
  367|    224|      {
  368|    224|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    224|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    224|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    224|	edit_count = 0;
  372|    224|	sane = t->sanitize (this);
  373|    224|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 15, False: 209]
  ------------------
  374|     15|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|     15|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     15|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|     15|	  sane = false;
  376|     15|	}
  377|    224|      }
  378|    227|    }
  379|    403|    else
  380|    403|    {
  381|    403|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 399, False: 4]
  |  Branch (381:25): [True: 312, False: 87]
  ------------------
  382|    312|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    312|	end = start + blob->length;
  384|       |
  385|    312|	if (start)
  ------------------
  |  Branch (385:6): [True: 311, False: 1]
  ------------------
  386|    311|	{
  387|    311|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    311|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    311|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    311|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    311|	  goto retry;
  391|    311|	}
  392|    312|      }
  393|    403|    }
  394|       |
  395|    319|    end_processing ();
  396|       |
  397|    319|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|    638|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    319|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 204, False: 115]
  |  |  ------------------
  ------------------
  398|    319|    if (sane)
  ------------------
  |  Branch (398:9): [True: 204, False: 115]
  ------------------
  399|    204|    {
  400|    204|      hb_blob_make_immutable (blob);
  401|    204|      return blob;
  402|    204|    }
  403|    115|    else
  404|    115|    {
  405|    115|      hb_blob_destroy (blob);
  406|    115|      return hb_blob_get_empty ();
  407|    115|    }
  408|    319|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT4BASEEEEbPKT_:
  312|    854|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    854|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_4AxisENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.32k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.32k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT4AxisEEEbPKT_:
  312|  1.19k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.19k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13SortedArrayOfINS1_3TagENS1_7IntTypeItLj2EEEEES6_Lb1EEEEEbPKT_:
  312|  1.15k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.15k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT3TagEEEbPKT_j:
  286|  1.01k|  {
  287|  1.01k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  1.01k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  1.01k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT3TagEEEbPKT_jj:
  267|  1.01k|  {
  268|  1.01k|    unsigned m;
  269|  1.01k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 1.01k, False: 0]
  ------------------
  270|  1.01k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 915, False: 101]
  ------------------
  271|  1.01k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13SortedArrayOfINS1_3TagENS1_7IntTypeItLj2EEEEES6_Lb1EEEiEEbPKT_RKT0_:
  334|    151|  {
  335|    151|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    151|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 100, False: 51]
  ------------------
  336|    100|    {
  337|    100|      * const_cast<Type *> (obj) = v;
  338|    100|      return true;
  339|    100|    }
  340|     51|    return false;
  341|    151|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_14BaseScriptListENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.10k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.10k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT14BaseScriptListEEEbPKT_:
  312|  1.03k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.03k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT16BaseScriptRecordEEEbPKT_j:
  286|    999|  {
  287|    999|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    999|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    999|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT16BaseScriptRecordEEEbPKT_jj:
  267|    999|  {
  268|    999|    unsigned m;
  269|    999|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 999, False: 0]
  ------------------
  270|    999|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 966, False: 33]
  ------------------
  271|    999|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT16BaseScriptRecordEEEbPKT_:
  312|   339k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   339k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10BaseScriptENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   339k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   339k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10BaseScriptEEEbPKT_:
  312|  18.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  18.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_10BaseValuesENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  17.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  17.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT10BaseValuesEEEbPKT_:
  312|  4.34k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  4.34k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|  4.18k|  {
  287|  4.18k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  4.18k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  4.18k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|  4.18k|  {
  268|  4.18k|    unsigned m;
  269|  4.18k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 4.18k, False: 0]
  ------------------
  270|  4.18k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 4.08k, False: 98]
  ------------------
  271|  4.18k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|   311k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|   311k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT16BaseCoordFormat1EEEbPKT_:
  312|    489|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    489|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT16BaseCoordFormat2EEEbPKT_:
  312|  7.75k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.75k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT16BaseCoordFormat3EEEbPKT_:
  312|    636|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    636|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_9BaseCoordENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  2.28k|  {
  335|  2.28k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  2.28k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 2.15k, False: 131]
  ------------------
  336|  2.15k|    {
  337|  2.15k|      * const_cast<Type *> (obj) = v;
  338|  2.15k|      return true;
  339|  2.15k|    }
  340|    131|    return false;
  341|  2.28k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10BaseValuesENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    352|  {
  335|    352|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    352|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 207, False: 145]
  ------------------
  336|    207|    {
  337|    207|      * const_cast<Type *> (obj) = v;
  338|    207|      return true;
  339|    207|    }
  340|    145|    return false;
  341|    352|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_6MinMaxENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.27M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.27M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT6MinMaxEEEbPKT_:
  312|  81.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  81.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT16FeatMinMaxRecordEEEbPKT_j:
  286|  80.8k|  {
  287|  80.8k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  80.8k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  80.8k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT16FeatMinMaxRecordEEEbPKT_jj:
  267|  80.8k|  {
  268|  80.8k|    unsigned m;
  269|  80.8k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 80.8k, False: 0]
  ------------------
  270|  80.8k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 80.5k, False: 248]
  ------------------
  271|  80.8k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT16FeatMinMaxRecordEEEbPKT_:
  312|  71.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  71.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_6MinMaxENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    811|  {
  335|    811|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    811|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 733, False: 78]
  ------------------
  336|    733|    {
  337|    733|      * const_cast<Type *> (obj) = v;
  338|    733|      return true;
  339|    733|    }
  340|     78|    return false;
  341|    811|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT17BaseLangSysRecordEEEbPKT_j:
  286|  17.5k|  {
  287|  17.5k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  17.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  17.5k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT17BaseLangSysRecordEEEbPKT_jj:
  267|  17.5k|  {
  268|  17.5k|    unsigned m;
  269|  17.5k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 17.5k, False: 0]
  ------------------
  270|  17.5k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 17.2k, False: 278]
  ------------------
  271|  17.5k|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT17BaseLangSysRecordEEEbPKT_:
  312|  1.25M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.25M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_10BaseScriptENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.47k|  {
  335|  1.47k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.47k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.17k, False: 299]
  ------------------
  336|  1.17k|    {
  337|  1.17k|      * const_cast<Type *> (obj) = v;
  338|  1.17k|      return true;
  339|  1.17k|    }
  340|    299|    return false;
  341|  1.47k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_14BaseScriptListENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    400|  {
  335|    400|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    400|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 89, False: 311]
  ------------------
  336|     89|    {
  337|     89|      * const_cast<Type *> (obj) = v;
  338|     89|      return true;
  339|     89|    }
  340|    311|    return false;
  341|    400|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_4AxisENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    399|  {
  335|    399|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    399|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 27, False: 372]
  ------------------
  336|     27|    {
  337|     27|      * const_cast<Type *> (obj) = v;
  338|     27|      return true;
  339|     27|    }
  340|    372|    return false;
  341|    399|  }
_ZN21hb_sanitize_context_t15reference_tableIN2OT4MATHEEEP9hb_blob_tPK9hb_face_tj:
  412|  33.2k|  {
  413|  33.2k|    if (!num_glyphs_set)
  ------------------
  |  Branch (413:9): [True: 0, False: 33.2k]
  ------------------
  414|      0|      set_num_glyphs (hb_face_get_glyph_count (face));
  415|  33.2k|    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
  416|  33.2k|  }
_ZN21hb_sanitize_context_t13sanitize_blobIN2OT4MATHEEEP9hb_blob_tS4_:
  345|  33.2k|  {
  346|  33.2k|    bool sane;
  347|       |
  348|  33.2k|    init (blob);
  349|       |
  350|  33.8k|  retry:
  351|  33.8k|    DEBUG_MSG_FUNC (SANITIZE, start, "start");
  ------------------
  |  |  233|  33.8k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  33.8k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  352|       |
  353|  33.8k|    start_processing ();
  354|       |
  355|  33.8k|    if (unlikely (!start))
  ------------------
  |  |  259|  33.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.6k, False: 1.27k]
  |  |  ------------------
  ------------------
  356|  32.6k|    {
  357|  32.6k|      end_processing ();
  358|  32.6k|      return blob;
  359|  32.6k|    }
  360|       |
  361|  1.27k|    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
  362|       |
  363|  1.27k|    sane = t->sanitize (this);
  364|  1.27k|    if (sane)
  ------------------
  |  Branch (364:9): [True: 535, False: 740]
  ------------------
  365|    535|    {
  366|    535|      if (edit_count)
  ------------------
  |  Branch (366:11): [True: 530, False: 5]
  ------------------
  367|    530|      {
  368|    530|	DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
  ------------------
  |  |  233|    530|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    530|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  369|       |
  370|       |	/* sanitize again to ensure no toe-stepping */
  371|    530|	edit_count = 0;
  372|    530|	sane = t->sanitize (this);
  373|    530|	if (edit_count) {
  ------------------
  |  Branch (373:6): [True: 66, False: 464]
  ------------------
  374|     66|	  DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
  ------------------
  |  |  233|     66|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|     66|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  375|     66|	  sane = false;
  376|     66|	}
  377|    530|      }
  378|    535|    }
  379|    740|    else
  380|    740|    {
  381|    740|      if (edit_count && !writable) {
  ------------------
  |  Branch (381:11): [True: 733, False: 7]
  |  Branch (381:25): [True: 637, False: 96]
  ------------------
  382|    637|	start = hb_blob_get_data_writable (blob, nullptr);
  383|    637|	end = start + blob->length;
  384|       |
  385|    637|	if (start)
  ------------------
  |  Branch (385:6): [True: 626, False: 11]
  ------------------
  386|    626|	{
  387|    626|	  writable = true;
  388|       |	  /* ok, we made it writable by relocating.  try again */
  389|    626|	  DEBUG_MSG_FUNC (SANITIZE, start, "retry");
  ------------------
  |  |  233|    626|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    626|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  390|    626|	  goto retry;
  391|    626|	}
  392|    637|      }
  393|    740|    }
  394|       |
  395|    649|    end_processing ();
  396|       |
  397|    649|    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
  ------------------
  |  |  233|  1.29k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|    649|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  |  |  |  Branch (233:111): [True: 450, False: 199]
  |  |  ------------------
  ------------------
  398|    649|    if (sane)
  ------------------
  |  Branch (398:9): [True: 450, False: 199]
  ------------------
  399|    450|    {
  400|    450|      hb_blob_make_immutable (blob);
  401|    450|      return blob;
  402|    450|    }
  403|    199|    else
  404|    199|    {
  405|    199|      hb_blob_destroy (blob);
  406|    199|      return hb_blob_get_empty ();
  407|    199|    }
  408|    649|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13MathConstantsENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.78k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.78k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT13MathConstantsEEEbPKT_:
  312|    942|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    942|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT15MathValueRecordEEEbPKT_:
  312|  7.23M|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  7.23M|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13MathConstantsENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    654|  {
  335|    654|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    654|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 261, False: 393]
  ------------------
  336|    261|    {
  337|    261|      * const_cast<Type *> (obj) = v;
  338|    261|      return true;
  339|    261|    }
  340|    393|    return false;
  341|    654|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_13MathGlyphInfoENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.38k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.38k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT13MathGlyphInfoEEEbPKT_:
  312|  1.14k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.14k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_25MathItalicsCorrectionInfoENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.10k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.10k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT25MathItalicsCorrectionInfoEEEbPKT_:
  312|    707|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    707|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT15MathValueRecordEEEbPKT_j:
  286|  7.46k|  {
  287|  7.46k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  7.46k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  7.46k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT15MathValueRecordEEEbPKT_jj:
  267|  7.46k|  {
  268|  7.46k|    unsigned m;
  269|  7.46k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 7.46k, False: 0]
  ------------------
  270|  7.46k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.92k, False: 534]
  ------------------
  271|  7.46k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_25MathItalicsCorrectionInfoENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    211|  {
  335|    211|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    211|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 104, False: 107]
  ------------------
  336|    104|    {
  337|    104|      * const_cast<Type *> (obj) = v;
  338|    104|      return true;
  339|    104|    }
  340|    107|    return false;
  341|    211|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_23MathTopAccentAttachmentENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|    992|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    992|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT23MathTopAccentAttachmentEEEbPKT_:
  312|    778|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    778|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_23MathTopAccentAttachmentENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    202|  {
  335|    202|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    202|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 147, False: 55]
  ------------------
  336|    147|    {
  337|    147|      * const_cast<Type *> (obj) = v;
  338|    147|      return true;
  339|    147|    }
  340|     55|    return false;
  341|    202|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12MathKernInfoENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|    904|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    904|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT12MathKernInfoEEEbPKT_:
  312|    700|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    700|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT18MathKernInfoRecordEEEbPKT_j:
  286|    594|  {
  287|    594|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    594|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    594|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT18MathKernInfoRecordEEEbPKT_jj:
  267|    594|  {
  268|    594|    unsigned m;
  269|    594|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 594, False: 0]
  ------------------
  270|    594|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 536, False: 58]
  ------------------
  271|    594|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_8MathKernENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  15.5k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  15.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8MathKernEEEbPKT_:
  312|  6.94k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.94k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_8MathKernENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.22k|  {
  335|  1.22k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.22k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.18k, False: 44]
  ------------------
  336|  1.18k|    {
  337|  1.18k|      * const_cast<Type *> (obj) = v;
  338|  1.18k|      return true;
  339|  1.18k|    }
  340|     44|    return false;
  341|  1.22k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12MathKernInfoENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    224|  {
  335|    224|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    224|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 165, False: 59]
  ------------------
  336|    165|    {
  337|    165|      * const_cast<Type *> (obj) = v;
  338|    165|      return true;
  339|    165|    }
  340|     59|    return false;
  341|    224|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_13MathGlyphInfoENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    307|  {
  335|    307|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    307|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 75, False: 232]
  ------------------
  336|     75|    {
  337|     75|      * const_cast<Type *> (obj) = v;
  338|     75|      return true;
  339|     75|    }
  340|    232|    return false;
  341|    307|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_12MathVariantsENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  1.14k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  1.14k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT12MathVariantsEEEbPKT_:
  312|    859|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|    859|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT8OffsetToINS1_21MathGlyphConstructionENS1_7IntTypeItLj2EEELb1EEEEEbPKT_j:
  286|    801|  {
  287|    801|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|    801|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|    801|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT8OffsetToINS1_21MathGlyphConstructionENS1_7IntTypeItLj2EEELb1EEEEEbPKT_jj:
  267|    801|  {
  268|    801|    unsigned m;
  269|    801|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 801, False: 0]
  ------------------
  270|    801|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 718, False: 83]
  ------------------
  271|    801|  }
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_21MathGlyphConstructionENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  21.8k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  21.8k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT21MathGlyphConstructionEEEbPKT_:
  312|  11.3k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  11.3k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT8OffsetToINS1_17MathGlyphAssemblyENS1_7IntTypeItLj2EEELb1EEEEEbPKT_:
  312|  10.6k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  10.6k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t12check_structIN2OT17MathGlyphAssemblyEEEbPKT_:
  312|  6.64k|  { return likely (this->check_range (obj, obj->min_size)); }
  ------------------
  |  |  258|  6.64k|#define likely(expr) __builtin_expect (bool(expr), 1)
  ------------------
_ZNK21hb_sanitize_context_t11check_arrayIN2OT19MathGlyphPartRecordEEEbPKT_j:
  286|  6.45k|  {
  287|  6.45k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  6.45k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  6.45k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT19MathGlyphPartRecordEEEbPKT_jj:
  267|  6.45k|  {
  268|  6.45k|    unsigned m;
  269|  6.45k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 6.45k, False: 0]
  ------------------
  270|  6.45k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 6.17k, False: 281]
  ------------------
  271|  6.45k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_17MathGlyphAssemblyENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    470|  {
  335|    470|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    470|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 436, False: 34]
  ------------------
  336|    436|    {
  337|    436|      * const_cast<Type *> (obj) = v;
  338|    436|      return true;
  339|    436|    }
  340|     34|    return false;
  341|    470|  }
_ZNK21hb_sanitize_context_t11check_arrayIN2OT22MathGlyphVariantRecordEEEbPKT_j:
  286|  10.5k|  {
  287|  10.5k|    return this->check_range (base, len, hb_static_size (T));
  ------------------
  |  |   91|  10.5k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  288|  10.5k|  }
_ZNK21hb_sanitize_context_t11check_rangeIN2OT22MathGlyphVariantRecordEEEbPKT_jj:
  267|  10.5k|  {
  268|  10.5k|    unsigned m;
  269|  10.5k|    return !hb_unsigned_mul_overflows (a, b, &m) &&
  ------------------
  |  Branch (269:12): [True: 10.5k, False: 0]
  ------------------
  270|  10.5k|	   this->check_range (base, m);
  ------------------
  |  Branch (270:5): [True: 10.0k, False: 451]
  ------------------
  271|  10.5k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_21MathGlyphConstructionENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|  1.27k|  {
  335|  1.27k|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|  1.27k|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 1.21k, False: 62]
  ------------------
  336|  1.21k|    {
  337|  1.21k|      * const_cast<Type *> (obj) = v;
  338|  1.21k|      return true;
  339|  1.21k|    }
  340|     62|    return false;
  341|  1.27k|  }
_ZN21hb_sanitize_context_t7try_setIN2OT8OffsetToINS1_12MathVariantsENS1_7IntTypeItLj2EEELb1EEEiEEbPKT_RKT0_:
  334|    229|  {
  335|    229|    if (this->may_edit (obj, hb_static_size (Type)))
  ------------------
  |  |   91|    229|#define hb_static_size(T) hb_static_size<T>::value
  ------------------
  |  Branch (335:9): [True: 145, False: 84]
  ------------------
  336|    145|    {
  337|    145|      * const_cast<Type *> (obj) = v;
  338|    145|      return true;
  339|    145|    }
  340|     84|    return false;
  341|    229|  }

_ZN22hb_serialize_context_t8object_t4finiEv:
   71|  24.7k|    void fini () {
   72|  24.7k|      real_links.fini ();
   73|  24.7k|      virtual_links.fini ();
   74|  24.7k|    }
_ZNK22hb_serialize_context_t8object_teqERKS0_:
  104|  7.26k|    {
  105|       |      // Virtual links aren't considered for equality since they don't affect the functionality
  106|       |      // of the object.
  107|  7.26k|      return (tail - head == o.tail - o.head)
  ------------------
  |  Branch (107:14): [True: 7.26k, False: 0]
  ------------------
  108|  7.26k|	  && (real_links.length == o.real_links.length)
  ------------------
  |  Branch (108:7): [True: 7.26k, False: 0]
  ------------------
  109|  7.26k|	  && 0 == hb_memcmp (head, o.head, tail - head)
  ------------------
  |  Branch (109:7): [True: 7.26k, False: 0]
  ------------------
  110|  7.26k|	  && real_links.as_bytes () == o.real_links.as_bytes ();
  ------------------
  |  Branch (110:7): [True: 7.26k, False: 0]
  ------------------
  111|  7.26k|    }
_ZNK22hb_serialize_context_t8object_t4hashEv:
  113|  44.1k|    {
  114|       |      // Virtual links aren't considered for equality since they don't affect the functionality
  115|       |      // of the object.
  116|  44.1k|      return hb_bytes_t (head, tail - head).hash () ^
  117|  44.1k|          real_links.as_bytes ().hash ();
  118|  44.1k|    }
_ZN22hb_serialize_context_tC2EPvj:
  188|  1.71k|  { reset (); }
_ZN22hb_serialize_context_tD2Ev:
  189|  1.71k|  ~hb_serialize_context_t () { fini (); }
_ZN22hb_serialize_context_t4finiEv:
  192|  3.43k|  {
  193|  16.9k|    for (object_t *_ : ++hb_iter (packed)) _->fini ();
  ------------------
  |  Branch (193:22): [True: 16.9k, False: 3.43k]
  ------------------
  194|  3.43k|    packed.fini ();
  195|  3.43k|    this->packed_map.fini ();
  196|       |
  197|  3.88k|    while (current)
  ------------------
  |  Branch (197:12): [True: 452, False: 3.43k]
  ------------------
  198|    452|    {
  199|    452|      auto *_ = current;
  200|    452|      current = current->next;
  201|    452|      _->fini ();
  202|    452|    }
  203|  3.43k|  }
_ZNK22hb_serialize_context_t8in_errorEv:
  205|   229k|  bool in_error () const { return bool (errors); }
_ZNK22hb_serialize_context_t10successfulEv:
  207|  40.4k|  bool successful () const { return !bool (errors); }
_ZNK22hb_serialize_context_t15offset_overflowEv:
  210|    205|  HB_NODISCARD bool offset_overflow () const { return errors & HB_SERIALIZE_ERROR_OFFSET_OVERFLOW; }
_ZNK22hb_serialize_context_t13only_overflowEv:
  213|    347|  {
  214|    347|    return errors == HB_SERIALIZE_ERROR_OFFSET_OVERFLOW
  ------------------
  |  Branch (214:12): [True: 0, False: 347]
  ------------------
  215|    347|        || errors == HB_SERIALIZE_ERROR_INT_OVERFLOW
  ------------------
  |  Branch (215:12): [True: 0, False: 347]
  ------------------
  216|    347|        || errors == HB_SERIALIZE_ERROR_ARRAY_OVERFLOW;
  ------------------
  |  Branch (216:12): [True: 0, False: 347]
  ------------------
  217|    347|  }
_ZN22hb_serialize_context_t5resetEv:
  228|  1.71k|  {
  229|  1.71k|    this->errors = HB_SERIALIZE_ERROR_NONE;
  230|  1.71k|    this->head = this->start;
  231|  1.71k|    this->tail = this->end;
  232|  1.71k|    this->zerocopy = nullptr;
  233|  1.71k|    this->debug_depth = 0;
  234|       |
  235|  1.71k|    fini ();
  236|  1.71k|    this->packed.push (nullptr);
  237|  1.71k|    this->packed_map.init ();
  238|  1.71k|  }
_ZN22hb_serialize_context_t13check_successEb20hb_serialize_error_t:
  242|  37.2k|  {
  243|  37.2k|    return successful ()
  ------------------
  |  Branch (243:12): [True: 36.9k, False: 286]
  ------------------
  244|  37.2k|        && (success || err (err_type));
  ------------------
  |  Branch (244:13): [True: 36.7k, False: 198]
  |  Branch (244:24): [True: 0, False: 198]
  ------------------
  245|  37.2k|  }
_ZN22hb_serialize_context_t13end_serializeEv:
  282|  1.71k|  {
  283|  1.71k|    DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, -1,
  ------------------
  |  |  231|  3.43k|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (231:145): [True: 1.43k, False: 286]
  |  |  ------------------
  ------------------
  284|  1.71k|		     "end [%p..%p] serialized %u bytes; %s",
  285|  1.71k|		     this->start, this->end,
  286|  1.71k|		     (unsigned) (this->head - this->start),
  287|  1.71k|		     successful () ? "successful" : "UNSUCCESSFUL");
  288|       |
  289|  1.71k|    propagate_error (packed, packed_map);
  290|       |
  291|  1.71k|    if (unlikely (!current)) return;
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 81, False: 1.63k]
  |  |  ------------------
  ------------------
  292|  1.63k|    if (unlikely (in_error()))
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 205, False: 1.43k]
  |  |  ------------------
  ------------------
  293|    205|    {
  294|       |      // Offset overflows that occur before link resolution cannot be handled
  295|       |      // by repacking, so set a more general error.
  296|    205|      if (offset_overflow ()) err (HB_SERIALIZE_ERROR_OTHER);
  ------------------
  |  Branch (296:11): [True: 0, False: 205]
  ------------------
  297|    205|      return;
  298|    205|    }
  299|       |
  300|  1.43k|    assert (!current->next);
  301|       |
  302|       |    /* Only "pack" if there exist other objects... Otherwise, don't bother.
  303|       |     * Saves a move. */
  304|  1.43k|    if (packed.length <= 1)
  ------------------
  |  Branch (304:9): [True: 0, False: 1.43k]
  ------------------
  305|      0|      return;
  306|       |
  307|  1.43k|    pop_pack (false);
  308|       |
  309|  1.43k|    resolve_links ();
  310|  1.43k|  }
_ZN22hb_serialize_context_t11pop_discardEv:
  331|    256|  {
  332|    256|    object_t *obj = current;
  333|    256|    if (unlikely (!obj)) return;
  ------------------
  |  |  259|    256|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 256]
  |  |  ------------------
  ------------------
  334|       |    // Allow cleanup when we've error'd out on int overflows which don't compromise
  335|       |    // the serializer state.
  336|    256|    if (unlikely (in_error() && !only_overflow ())) return;
  ------------------
  |  |  259|    512|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 256, False: 0]
  |  |  |  Branch (259:47): [True: 256, False: 0]
  |  |  |  Branch (259:47): [True: 256, False: 0]
  |  |  ------------------
  ------------------
  337|       |
  338|      0|    current = current->next;
  339|      0|    revert (zerocopy ? zerocopy : obj->head, obj->tail);
  ------------------
  |  Branch (339:13): [True: 0, False: 0]
  ------------------
  340|      0|    zerocopy = nullptr;
  341|      0|    obj->fini ();
  342|      0|    object_pool.release (obj);
  343|      0|  }
_ZN22hb_serialize_context_t8pop_packEb:
  350|  24.4k|  {
  351|  24.4k|    object_t *obj = current;
  352|  24.4k|    if (unlikely (!obj)) return 0;
  ------------------
  |  |  259|  24.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 24.4k]
  |  |  ------------------
  ------------------
  353|       |    // Allow cleanup when we've error'd out on int overflows which don't compromise
  354|       |    // the serializer state.
  355|  24.4k|    if (unlikely (in_error()  && !only_overflow ())) return 0;
  ------------------
  |  |  259|  24.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 91, False: 24.3k]
  |  |  |  Branch (259:47): [True: 91, False: 24.3k]
  |  |  |  Branch (259:47): [True: 91, False: 0]
  |  |  ------------------
  ------------------
  356|       |
  357|  24.3k|    current = current->next;
  358|  24.3k|    obj->tail = head;
  359|  24.3k|    obj->next = nullptr;
  360|  24.3k|    assert (obj->head <= obj->tail);
  361|      0|    unsigned len = obj->tail - obj->head;
  362|  24.3k|    head = zerocopy ? zerocopy : obj->head; /* Rewind head. */
  ------------------
  |  Branch (362:12): [True: 0, False: 24.3k]
  ------------------
  363|  24.3k|    bool was_zerocopy = zerocopy;
  364|  24.3k|    zerocopy = nullptr;
  365|       |
  366|  24.3k|    if (!len)
  ------------------
  |  Branch (366:9): [True: 0, False: 24.3k]
  ------------------
  367|      0|    {
  368|      0|      assert (!obj->real_links.length);
  369|      0|      assert (!obj->virtual_links.length);
  370|      0|      return 0;
  371|      0|    }
  372|       |
  373|  24.3k|    objidx_t objidx;
  374|  24.3k|    uint32_t hash = 0;
  375|  24.3k|    if (share)
  ------------------
  |  Branch (375:9): [True: 22.8k, False: 1.43k]
  ------------------
  376|  22.8k|    {
  377|  22.8k|      hash = hb_hash (obj);
  378|  22.8k|      objidx = packed_map.get_with_hash (obj, hash);
  379|  22.8k|      if (objidx)
  ------------------
  |  Branch (379:11): [True: 7.26k, False: 15.6k]
  ------------------
  380|  7.26k|      {
  381|  7.26k|        merge_virtual_links (obj, objidx);
  382|  7.26k|	obj->fini ();
  383|  7.26k|	return objidx;
  384|  7.26k|      }
  385|  22.8k|    }
  386|       |
  387|  17.0k|    tail -= len;
  388|  17.0k|    if (was_zerocopy)
  ------------------
  |  Branch (388:9): [True: 0, False: 17.0k]
  ------------------
  389|      0|      assert (tail == obj->head);
  390|  17.0k|    else
  391|  17.0k|      memmove (tail, obj->head, len);
  392|       |
  393|      0|    obj->head = tail;
  394|  17.0k|    obj->tail = tail + len;
  395|       |
  396|  17.0k|    packed.push (obj);
  397|       |
  398|  17.0k|    if (unlikely (!propagate_error (packed)))
  ------------------
  |  |  259|  17.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 70, False: 16.9k]
  |  |  ------------------
  ------------------
  399|     70|    {
  400|       |      /* Obj wasn't successfully added to packed, so clean it up otherwise its
  401|       |       * links will be leaked. When we use constructor/destructors properly, we
  402|       |       * can remove these. */
  403|     70|      obj->fini ();
  404|     70|      return 0;
  405|     70|    }
  406|       |
  407|  16.9k|    objidx = packed.length - 1;
  408|       |
  409|  16.9k|    if (share) packed_map.set_with_hash (obj, hash, objidx);
  ------------------
  |  Branch (409:9): [True: 15.5k, False: 1.43k]
  ------------------
  410|  16.9k|    propagate_error (packed_map);
  411|       |
  412|  16.9k|    return objidx;
  413|  17.0k|  }
_ZN22hb_serialize_context_t13resolve_linksEv:
  530|  1.43k|  {
  531|  1.43k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|  1.43k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.43k]
  |  |  ------------------
  ------------------
  532|       |
  533|  1.43k|    assert (!current);
  534|      0|    assert (packed.length > 1);
  535|       |
  536|      0|    for (const object_t* parent : ++hb_iter (packed))
  ------------------
  |  Branch (536:33): [True: 15.8k, False: 1.43k]
  ------------------
  537|  15.8k|      for (const object_t::link_t &link : parent->real_links)
  ------------------
  |  Branch (537:41): [True: 18.9k, False: 15.8k]
  ------------------
  538|  18.9k|      {
  539|  18.9k|	const object_t* child = packed[link.objidx];
  540|  18.9k|	if (unlikely (!child)) { err (HB_SERIALIZE_ERROR_OTHER); return; }
  ------------------
  |  |  259|  18.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 18.9k]
  |  |  ------------------
  ------------------
  541|  18.9k|	unsigned offset = 0;
  542|  18.9k|	switch ((whence_t) link.whence) {
  ------------------
  |  Branch (542:10): [True: 0, False: 18.9k]
  ------------------
  543|  18.9k|	case Head:     offset = child->head - parent->head; break;
  ------------------
  |  Branch (543:2): [True: 18.9k, False: 0]
  ------------------
  544|      0|	case Tail:     offset = child->head - parent->tail; break;
  ------------------
  |  Branch (544:2): [True: 0, False: 18.9k]
  ------------------
  545|      0|	case Absolute: offset = (head - start) + (child->head - tail); break;
  ------------------
  |  Branch (545:2): [True: 0, False: 18.9k]
  ------------------
  546|  18.9k|	}
  547|       |
  548|  18.9k|	assert (offset >= link.bias);
  549|      0|	offset -= link.bias;
  550|  18.9k|	if (link.is_signed)
  ------------------
  |  Branch (550:6): [True: 0, False: 18.9k]
  ------------------
  551|      0|	{
  552|      0|	  assert (link.width == 2 || link.width == 4);
  553|      0|	  if (link.width == 4)
  ------------------
  |  Branch (553:8): [True: 0, False: 0]
  ------------------
  554|      0|	    assign_offset<int32_t> (parent, link, offset);
  555|      0|	  else
  556|      0|	    assign_offset<int16_t> (parent, link, offset);
  557|      0|	}
  558|  18.9k|	else
  559|  18.9k|	{
  560|  18.9k|	  assert (link.width == 2 || link.width == 3 || link.width == 4);
  561|  18.9k|	  if (link.width == 4)
  ------------------
  |  Branch (561:8): [True: 0, False: 18.9k]
  ------------------
  562|      0|	    assign_offset<uint32_t> (parent, link, offset);
  563|  18.9k|	  else if (link.width == 3)
  ------------------
  |  Branch (563:13): [True: 0, False: 18.9k]
  ------------------
  564|      0|	    assign_offset<uint32_t, 3> (parent, link, offset);
  565|  18.9k|	  else
  566|  18.9k|	    assign_offset<uint16_t> (parent, link, offset);
  567|  18.9k|	}
  568|  18.9k|      }
  569|  1.43k|  }
_ZN22hb_serialize_context_t3errE20hb_serialize_error_t:
  594|    287|  {
  595|    287|    return !bool ((errors = (errors | err_type)));
  596|    287|  }
_ZNK22hb_serialize_context_t10copy_bytesEv:
  721|  1.43k|  {
  722|  1.43k|    assert (successful ());
  723|       |    /* Copy both items from head side and tail side... */
  724|      0|    unsigned int len = (this->head - this->start)
  725|  1.43k|		     + (this->end  - this->tail);
  726|       |
  727|       |    // If len is zero don't hb_malloc as the memory won't get properly
  728|       |    // cleaned up later.
  729|  1.43k|    if (!len) return hb_bytes_t ();
  ------------------
  |  Branch (729:9): [True: 0, False: 1.43k]
  ------------------
  730|       |
  731|  1.43k|    char *p = (char *) hb_malloc (len);
  ------------------
  |  |  233|  1.43k|#define hb_malloc hb_malloc_impl
  ------------------
  732|  1.43k|    if (unlikely (!p)) return hb_bytes_t ();
  ------------------
  |  |  259|  1.43k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 1.41k]
  |  |  ------------------
  ------------------
  733|       |
  734|  1.41k|    hb_memcpy (p, this->start, this->head - this->start);
  735|  1.41k|    hb_memcpy (p + (this->head - this->start), this->tail, this->end - this->tail);
  736|  1.41k|    return hb_bytes_t (p, len);
  737|  1.43k|  }
_ZN22hb_serialize_context_t19merge_virtual_linksEPKNS_8object_tEj:
  768|  7.26k|  void merge_virtual_links (const object_t* from, objidx_t to_idx) {
  769|  7.26k|    object_t* to = packed[to_idx];
  770|  7.26k|    for (const auto& l : from->virtual_links) {
  ------------------
  |  Branch (770:24): [True: 0, False: 7.26k]
  ------------------
  771|      0|      to->virtual_links.push (l);
  772|      0|    }
  773|  7.26k|  }
_ZN22hb_serialize_context_t15propagate_errorIR11hb_vector_tIPNS_8object_tELb0EEJR12hb_hashmap_tIPKS2_jLb0EEEEEbOT_DpOT0_:
  265|  1.71k|  { return propagate_error (std::forward<T1> (o1)) &&
  ------------------
  |  Branch (265:12): [True: 1.43k, False: 286]
  ------------------
  266|  1.71k|	   propagate_error (std::forward<Ts> (os)...); }
  ------------------
  |  Branch (266:5): [True: 1.43k, False: 0]
  ------------------
_ZN22hb_serialize_context_t15propagate_errorIR11hb_vector_tIPNS_8object_tELb0EEEEbOT_:
  262|  18.7k|  { return check_success (!hb_deref (obj).in_error ()); }
_ZN22hb_serialize_context_t15propagate_errorIR12hb_hashmap_tIPKNS_8object_tEjLb0EEEEbOT_:
  262|  18.4k|  { return check_success (!hb_deref (obj).in_error ()); }
_ZN22hb_serialize_context_t13assign_offsetItLj2EEEvPKNS_8object_tERKNS1_6link_tEj:
  755|  18.9k|  {
  756|  18.9k|    auto &off = * ((BEInt<T, Size> *) (parent->head + link.position));
  757|  18.9k|    assert (0 == off);
  758|      0|    check_assign (off, offset, HB_SERIALIZE_ERROR_OFFSET_OVERFLOW);
  759|  18.9k|  }
_ZN22hb_serialize_context_t12check_assignI5BEIntItLi2EERjEEbRT_OT0_20hb_serialize_error_t:
  259|  18.9k|  { return check_equal (v1 = v2, v2, err_type); }
_ZN22hb_serialize_context_t11check_equalIR5BEIntItLi2EERjEEbOT_OT0_20hb_serialize_error_t:
  249|  18.9k|  {
  250|  18.9k|    if ((long long) v1 != (long long) v2)
  ------------------
  |  Branch (250:9): [True: 0, False: 18.9k]
  ------------------
  251|      0|    {
  252|      0|      return err (err_type);
  253|      0|    }
  254|  18.9k|    return true;
  255|  18.9k|  }
_ZNK22hb_serialize_context_t11start_embedIN2OT6Layout6Common8CoverageEEEPT_PKS5_:
  587|  1.55k|  { return reinterpret_cast<Type *> (this->head); }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout6Common8CoverageEEEPT_S6_:
  708|  1.55k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout6Common8CoverageEEEPT_S6_mb:
  693|  1.55k|  {
  694|  1.55k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.55k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 17, False: 1.53k]
  |  |  ------------------
  ------------------
  695|       |
  696|  1.53k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  1.53k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  3.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.53k]
  |  |  |  Branch (259:47): [True: 0, False: 1.53k]
  |  |  |  Branch (259:47): [True: 0, False: 1.53k]
  |  |  ------------------
  ------------------
  700|  1.53k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  1.53k|    return reinterpret_cast<Type *> (obj);
  702|  1.53k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout6Common8CoverageEEEPT_mb:
  619|  1.53k|  {
  620|  1.53k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.53k]
  |  |  ------------------
  ------------------
  621|       |
  622|  1.53k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  3.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.53k]
  |  |  |  Branch (259:47): [True: 0, False: 1.53k]
  |  |  |  Branch (259:47): [True: 0, False: 1.53k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  1.53k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 1.53k, False: 0]
  ------------------
  628|  1.53k|      hb_memset (this->head, 0, size);
  629|  1.53k|    char *ret = this->head;
  630|  1.53k|    this->head += size;
  631|  1.53k|    return reinterpret_cast<Type *> (ret);
  632|  1.53k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7ArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_S8_:
  708|  1.97k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7ArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_S8_mb:
  693|  3.95k|  {
  694|  3.95k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  3.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.95k]
  |  |  ------------------
  ------------------
  695|       |
  696|  3.95k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  3.95k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  7.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.95k]
  |  |  |  Branch (259:47): [True: 0, False: 3.95k]
  |  |  |  Branch (259:47): [True: 0, False: 3.95k]
  |  |  ------------------
  ------------------
  700|  3.95k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  3.95k|    return reinterpret_cast<Type *> (obj);
  702|  3.95k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7ArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_mb:
  619|  3.95k|  {
  620|  3.95k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  3.95k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.95k]
  |  |  ------------------
  ------------------
  621|       |
  622|  3.95k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  7.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.95k]
  |  |  |  Branch (259:47): [True: 0, False: 3.95k]
  |  |  |  Branch (259:47): [True: 0, False: 3.95k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  3.95k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 1.97k, False: 1.97k]
  ------------------
  628|  1.97k|      hb_memset (this->head, 0, size);
  629|  3.95k|    char *ret = this->head;
  630|  3.95k|    this->head += size;
  631|  3.95k|    return reinterpret_cast<Type *> (ret);
  632|  3.95k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout6Common17CoverageFormat2_4INS2_10SmallTypesEEEEEPT_S8_:
  708|    253|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout6Common17CoverageFormat2_4INS2_10SmallTypesEEEEEPT_S8_mb:
  693|    253|  {
  694|    253|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    253|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  ------------------
  ------------------
  695|       |
  696|    253|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|    253|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|    506|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  |  Branch (259:47): [True: 0, False: 253]
  |  |  |  Branch (259:47): [True: 0, False: 253]
  |  |  ------------------
  ------------------
  700|    253|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|    253|    return reinterpret_cast<Type *> (obj);
  702|    253|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout6Common17CoverageFormat2_4INS2_10SmallTypesEEEEEPT_mb:
  619|    253|  {
  620|    253|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    253|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  ------------------
  ------------------
  621|       |
  622|    253|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|    506|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 253]
  |  |  |  Branch (259:47): [True: 0, False: 253]
  |  |  |  Branch (259:47): [True: 0, False: 253]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|    253|    if (clear)
  ------------------
  |  Branch (627:9): [True: 253, False: 0]
  ------------------
  628|    253|      hb_memset (this->head, 0, size);
  629|    253|    char *ret = this->head;
  630|    253|    this->head += size;
  631|    253|    return reinterpret_cast<Type *> (ret);
  632|    253|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7ArrayOfINS1_6Layout6Common11RangeRecordINS3_10SmallTypesEEENS1_7IntTypeItLj2EEEEEEEPT_SC_:
  708|    253|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7ArrayOfINS1_6Layout6Common11RangeRecordINS3_10SmallTypesEEENS1_7IntTypeItLj2EEEEEEEPT_SC_mb:
  693|    506|  {
  694|    506|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    506|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 506]
  |  |  ------------------
  ------------------
  695|       |
  696|    506|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|    506|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  1.01k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 506]
  |  |  |  Branch (259:47): [True: 0, False: 506]
  |  |  |  Branch (259:47): [True: 0, False: 506]
  |  |  ------------------
  ------------------
  700|    506|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|    506|    return reinterpret_cast<Type *> (obj);
  702|    506|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7ArrayOfINS1_6Layout6Common11RangeRecordINS3_10SmallTypesEEENS1_7IntTypeItLj2EEEEEEEPT_mb:
  619|    506|  {
  620|    506|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    506|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 506]
  |  |  ------------------
  ------------------
  621|       |
  622|    506|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  1.01k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 506]
  |  |  |  Branch (259:47): [True: 0, False: 506]
  |  |  |  Branch (259:47): [True: 0, False: 506]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|    506|    if (clear)
  ------------------
  |  Branch (627:9): [True: 506, False: 0]
  ------------------
  628|    506|      hb_memset (this->head, 0, size);
  629|    506|    char *ret = this->head;
  630|    506|    this->head += size;
  631|    506|    return reinterpret_cast<Type *> (ret);
  632|    506|  }
_ZN22hb_serialize_context_t10extend_minIN2OT6LookupEEEPT_S4_:
  708|  1.71k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6LookupEEEPT_S4_mb:
  693|  1.71k|  {
  694|  1.71k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 81, False: 1.63k]
  |  |  ------------------
  ------------------
  695|       |
  696|  1.63k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  1.63k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  700|  1.63k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  1.63k|    return reinterpret_cast<Type *> (obj);
  702|  1.63k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6LookupEEEPT_mb:
  619|  1.63k|  {
  620|  1.63k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  621|       |
  622|  1.63k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  1.63k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 1.63k, False: 0]
  ------------------
  628|  1.63k|      hb_memset (this->head, 0, size);
  629|  1.63k|    char *ret = this->head;
  630|  1.63k|    this->head += size;
  631|  1.63k|    return reinterpret_cast<Type *> (ret);
  632|  1.63k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7ArrayOfINS1_6OffsetINS1_7IntTypeItLj2EEELb1EEES5_EEEEPT_S9_:
  708|  1.63k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7ArrayOfINS1_6OffsetINS1_7IntTypeItLj2EEELb1EEES5_EEEEPT_S9_mb:
  693|  3.27k|  {
  694|  3.27k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.27k]
  |  |  ------------------
  ------------------
  695|       |
  696|  3.27k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  3.27k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  6.54k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.27k]
  |  |  |  Branch (259:47): [True: 0, False: 3.27k]
  |  |  |  Branch (259:47): [True: 0, False: 3.27k]
  |  |  ------------------
  ------------------
  700|  3.27k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  3.27k|    return reinterpret_cast<Type *> (obj);
  702|  3.27k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7ArrayOfINS1_6OffsetINS1_7IntTypeItLj2EEELb1EEES5_EEEEPT_mb:
  619|  3.27k|  {
  620|  3.27k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.27k]
  |  |  ------------------
  ------------------
  621|       |
  622|  3.27k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  6.54k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.27k]
  |  |  |  Branch (259:47): [True: 0, False: 3.27k]
  |  |  |  Branch (259:47): [True: 0, False: 3.27k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  3.27k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 3.27k, False: 0]
  ------------------
  628|  3.27k|      hb_memset (this->head, 0, size);
  629|  3.27k|    char *ret = this->head;
  630|  3.27k|    this->head += size;
  631|  3.27k|    return reinterpret_cast<Type *> (ret);
  632|  3.27k|  }
_ZN22hb_serialize_context_t4pushIN2OT6Layout6Common8CoverageEEEPT_v:
  315|  1.55k|  {
  316|  1.55k|    if (unlikely (in_error ())) return start_embed<Type> ();
  ------------------
  |  |  259|  1.55k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 16, False: 1.53k]
  |  |  ------------------
  ------------------
  317|       |
  318|  1.53k|    object_t *obj = object_pool.alloc ();
  319|  1.53k|    if (unlikely (!obj))
  ------------------
  |  |  259|  1.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.53k]
  |  |  ------------------
  ------------------
  320|      1|      check_success (false);
  321|  1.53k|    else
  322|  1.53k|    {
  323|  1.53k|      obj->head = head;
  324|  1.53k|      obj->tail = tail;
  325|  1.53k|      obj->next = current;
  326|  1.53k|      current = obj;
  327|  1.53k|    }
  328|  1.53k|    return start_embed<Type> ();
  329|  1.55k|  }
_ZN22hb_serialize_context_t8add_linkIN2OT8OffsetToINS1_6Layout6Common8CoverageENS1_7IntTypeItLj2EEELb1EEEEEvRT_jNS_8whence_tEj:
  488|  1.53k|  {
  489|  1.53k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|  1.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 56, False: 1.48k]
  |  |  ------------------
  ------------------
  490|       |
  491|  1.48k|    if (!objidx)
  ------------------
  |  Branch (491:9): [True: 0, False: 1.48k]
  ------------------
  492|      0|      return;
  493|       |
  494|  1.48k|    assert (current);
  495|      0|    assert (current->head <= (const char *) &ofs);
  496|       |
  497|      0|    auto& link = *current->real_links.push ();
  498|  1.48k|    if (current->real_links.in_error ())
  ------------------
  |  Branch (498:9): [True: 16, False: 1.46k]
  ------------------
  499|     16|      err (HB_SERIALIZE_ERROR_OTHER);
  500|       |
  501|  1.48k|    link.width = sizeof (T);
  502|  1.48k|    link.objidx = objidx;
  503|  1.48k|    if (unlikely (!sizeof (T)))
  ------------------
  |  |  259|  1.48k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [Folded - Ignored]
  |  |  ------------------
  ------------------
  504|      0|    {
  505|       |      // This link is not associated with an actual offset and exists merely to enforce
  506|       |      // an ordering constraint.
  507|      0|      link.is_signed = 0;
  508|      0|      link.whence = 0;
  509|      0|      link.position = 0;
  510|      0|      link.bias = 0;
  511|      0|      return;
  512|      0|    }
  513|       |
  514|  1.48k|    link.is_signed = std::is_signed<hb_unwrap_type (T)>::value;
  515|  1.48k|    link.whence = (unsigned) whence;
  516|  1.48k|    link.position = (const char *) &ofs - current->head;
  517|  1.48k|    link.bias = bias;
  518|  1.48k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7IntTypeItLj2EEEEEPT_mb:
  619|  1.63k|  {
  620|  1.63k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  621|       |
  622|  1.63k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  1.63k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 1.63k, False: 0]
  ------------------
  628|  1.63k|      hb_memset (this->head, 0, size);
  629|  1.63k|    char *ret = this->head;
  630|  1.63k|    this->head += size;
  631|  1.63k|    return reinterpret_cast<Type *> (ret);
  632|  1.63k|  }
_ZN22hb_serialize_context_t12check_assignIN2OT7IntTypeItLj2EEERjEEbRT_OT0_20hb_serialize_error_t:
  259|  9.94k|  { return check_equal (v1 = v2, v2, err_type); }
_ZN22hb_serialize_context_t11check_equalIRN2OT7IntTypeItLj2EEERjEEbOT_OT0_20hb_serialize_error_t:
  249|  24.7k|  {
  250|  24.7k|    if ((long long) v1 != (long long) v2)
  ------------------
  |  Branch (250:9): [True: 0, False: 24.7k]
  ------------------
  251|      0|    {
  252|      0|      return err (err_type);
  253|      0|    }
  254|  24.7k|    return true;
  255|  24.7k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7IntTypeItLj2EEEEEPT_RS4_:
  710|  1.63k|  Type *extend_min (Type &obj) { return extend_min (std::addressof (obj)); }
_ZN22hb_serialize_context_t10extend_minIN2OT7IntTypeItLj2EEEEEPT_S5_:
  708|  1.63k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7IntTypeItLj2EEEEEPT_S5_mb:
  693|  1.63k|  {
  694|  1.63k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  695|       |
  696|  1.63k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  1.63k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  3.27k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  |  Branch (259:47): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  700|  1.63k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  1.63k|    return reinterpret_cast<Type *> (obj);
  702|  1.63k|  }
_ZN22hb_serialize_context_t12check_assignIN2OT7IntTypeItLj2EEEjEEbRT_OT0_20hb_serialize_error_t:
  259|  14.8k|  { return check_equal (v1 = v2, v2, err_type); }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEPT_S8_:
  708|    850|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEPT_S8_mb:
  693|    850|  {
  694|    850|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
  695|       |
  696|    850|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|    850|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  |  Branch (259:47): [True: 0, False: 850]
  |  |  |  Branch (259:47): [True: 0, False: 850]
  |  |  ------------------
  ------------------
  700|    850|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|    850|    return reinterpret_cast<Type *> (obj);
  702|    850|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout9GSUB_impl22LigatureSubstFormat1_2INS2_10SmallTypesEEEEEPT_mb:
  619|    850|  {
  620|    850|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    850|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  ------------------
  ------------------
  621|       |
  622|    850|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 850]
  |  |  |  Branch (259:47): [True: 0, False: 850]
  |  |  |  Branch (259:47): [True: 0, False: 850]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|    850|    if (clear)
  ------------------
  |  Branch (627:9): [True: 850, False: 0]
  ------------------
  628|    850|      hb_memset (this->head, 0, size);
  629|    850|    char *ret = this->head;
  630|    850|    this->head += size;
  631|    850|    return reinterpret_cast<Type *> (ret);
  632|    850|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_SE_:
  708|    850|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_SE_mb:
  693|  1.70k|  {
  694|  1.70k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70k]
  |  |  ------------------
  ------------------
  695|       |
  696|  1.70k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  1.70k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  3.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70k]
  |  |  |  Branch (259:47): [True: 0, False: 1.70k]
  |  |  |  Branch (259:47): [True: 0, False: 1.70k]
  |  |  ------------------
  ------------------
  700|  1.70k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  1.70k|    return reinterpret_cast<Type *> (obj);
  702|  1.70k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_mb:
  619|  1.70k|  {
  620|  1.70k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  1.70k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70k]
  |  |  ------------------
  ------------------
  621|       |
  622|  1.70k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  3.40k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.70k]
  |  |  |  Branch (259:47): [True: 0, False: 1.70k]
  |  |  |  Branch (259:47): [True: 0, False: 1.70k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  1.70k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 1.70k, False: 0]
  ------------------
  628|  1.70k|      hb_memset (this->head, 0, size);
  629|  1.70k|    char *ret = this->head;
  630|  1.70k|    this->head += size;
  631|  1.70k|    return reinterpret_cast<Type *> (ret);
  632|  1.70k|  }
_ZN22hb_serialize_context_t4pushIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEPT_v:
  315|  5.16k|  {
  316|  5.16k|    if (unlikely (in_error ())) return start_embed<Type> ();
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 5.13k]
  |  |  ------------------
  ------------------
  317|       |
  318|  5.13k|    object_t *obj = object_pool.alloc ();
  319|  5.13k|    if (unlikely (!obj))
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 5.13k]
  |  |  ------------------
  ------------------
  320|      1|      check_success (false);
  321|  5.13k|    else
  322|  5.13k|    {
  323|  5.13k|      obj->head = head;
  324|  5.13k|      obj->tail = tail;
  325|  5.13k|      obj->next = current;
  326|  5.13k|      current = obj;
  327|  5.13k|    }
  328|  5.13k|    return start_embed<Type> ();
  329|  5.16k|  }
_ZNK22hb_serialize_context_t11start_embedIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEPT_PKS7_:
  587|  5.16k|  { return reinterpret_cast<Type *> (this->head); }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEPT_S8_:
  708|  5.16k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEPT_S8_mb:
  693|  5.16k|  {
  694|  5.16k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  5.16k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 27, False: 5.13k]
  |  |  ------------------
  ------------------
  695|       |
  696|  5.13k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  5.13k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  |  Branch (259:47): [True: 0, False: 5.13k]
  |  |  |  Branch (259:47): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
  700|  5.13k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  5.13k|    return reinterpret_cast<Type *> (obj);
  702|  5.13k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout9GSUB_impl11LigatureSetINS2_10SmallTypesEEEEEPT_mb:
  619|  5.13k|  {
  620|  5.13k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  5.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
  621|       |
  622|  5.13k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 5.13k]
  |  |  |  Branch (259:47): [True: 0, False: 5.13k]
  |  |  |  Branch (259:47): [True: 0, False: 5.13k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  5.13k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 5.13k, False: 0]
  ------------------
  628|  5.13k|      hb_memset (this->head, 0, size);
  629|  5.13k|    char *ret = this->head;
  630|  5.13k|    this->head += size;
  631|  5.13k|    return reinterpret_cast<Type *> (ret);
  632|  5.13k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_SE_:
  708|  5.13k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_SE_mb:
  693|  10.2k|  {
  694|  10.2k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  695|       |
  696|  10.2k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  10.2k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  20.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  700|  10.2k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  10.2k|    return reinterpret_cast<Type *> (obj);
  702|  10.2k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT7ArrayOfINS1_8OffsetToINS1_6Layout9GSUB_impl8LigatureINS4_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEESA_EEEEPT_mb:
  619|  10.2k|  {
  620|  10.2k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  10.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  621|       |
  622|  10.2k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  20.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 10.2k]
  |  |  |  Branch (259:47): [True: 0, False: 10.2k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  10.2k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 10.2k, False: 0]
  ------------------
  628|  10.2k|      hb_memset (this->head, 0, size);
  629|  10.2k|    char *ret = this->head;
  630|  10.2k|    this->head += size;
  631|  10.2k|    return reinterpret_cast<Type *> (ret);
  632|  10.2k|  }
_ZN22hb_serialize_context_t4pushIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEEEPT_v:
  315|  14.8k|  {
  316|  14.8k|    if (unlikely (in_error ())) return start_embed<Type> ();
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 55, False: 14.8k]
  |  |  ------------------
  ------------------
  317|       |
  318|  14.8k|    object_t *obj = object_pool.alloc ();
  319|  14.8k|    if (unlikely (!obj))
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 14.8k]
  |  |  ------------------
  ------------------
  320|      1|      check_success (false);
  321|  14.8k|    else
  322|  14.8k|    {
  323|  14.8k|      obj->head = head;
  324|  14.8k|      obj->tail = tail;
  325|  14.8k|      obj->next = current;
  326|  14.8k|      current = obj;
  327|  14.8k|    }
  328|  14.8k|    return start_embed<Type> ();
  329|  14.8k|  }
_ZNK22hb_serialize_context_t11start_embedIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEEEPT_PKS7_:
  587|  14.8k|  { return reinterpret_cast<Type *> (this->head); }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEEEPT_S8_:
  708|  14.8k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEEEPT_S8_mb:
  693|  14.8k|  {
  694|  14.8k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 56, False: 14.8k]
  |  |  ------------------
  ------------------
  695|       |
  696|  14.8k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  14.8k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  |  Branch (259:47): [True: 0, False: 14.8k]
  |  |  |  Branch (259:47): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
  700|  14.8k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  14.8k|    return reinterpret_cast<Type *> (obj);
  702|  14.8k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout9GSUB_impl8LigatureINS2_10SmallTypesEEEEEPT_mb:
  619|  14.8k|  {
  620|  14.8k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
  621|       |
  622|  14.8k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.8k]
  |  |  |  Branch (259:47): [True: 0, False: 14.8k]
  |  |  |  Branch (259:47): [True: 0, False: 14.8k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  14.8k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 14.8k, False: 0]
  ------------------
  628|  14.8k|      hb_memset (this->head, 0, size);
  629|  14.8k|    char *ret = this->head;
  630|  14.8k|    this->head += size;
  631|  14.8k|    return reinterpret_cast<Type *> (ret);
  632|  14.8k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT15HeadlessArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_S8_:
  708|  14.8k|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT15HeadlessArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_S8_mb:
  693|  29.6k|  {
  694|  29.6k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
  695|       |
  696|  29.6k|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|  29.6k|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  59.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29.6k]
  |  |  |  Branch (259:47): [True: 0, False: 29.6k]
  |  |  |  Branch (259:47): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
  700|  29.6k|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|  29.6k|    return reinterpret_cast<Type *> (obj);
  702|  29.6k|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT15HeadlessArrayOfINS1_11HBGlyphID16ENS1_7IntTypeItLj2EEEEEEEPT_mb:
  619|  29.6k|  {
  620|  29.6k|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|  29.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
  621|       |
  622|  29.6k|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  59.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29.6k]
  |  |  |  Branch (259:47): [True: 0, False: 29.6k]
  |  |  |  Branch (259:47): [True: 0, False: 29.6k]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|  29.6k|    if (clear)
  ------------------
  |  Branch (627:9): [True: 14.8k, False: 14.8k]
  ------------------
  628|  14.8k|      hb_memset (this->head, 0, size);
  629|  29.6k|    char *ret = this->head;
  630|  29.6k|    this->head += size;
  631|  29.6k|    return reinterpret_cast<Type *> (ret);
  632|  29.6k|  }
_ZN22hb_serialize_context_t8add_linkIN2OT8OffsetToINS1_6Layout9GSUB_impl8LigatureINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEvRT_jNS_8whence_tEj:
  488|  14.8k|  {
  489|  14.8k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|  14.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 44, False: 14.7k]
  |  |  ------------------
  ------------------
  490|       |
  491|  14.7k|    if (!objidx)
  ------------------
  |  Branch (491:9): [True: 0, False: 14.7k]
  ------------------
  492|      0|      return;
  493|       |
  494|  14.7k|    assert (current);
  495|      0|    assert (current->head <= (const char *) &ofs);
  496|       |
  497|      0|    auto& link = *current->real_links.push ();
  498|  14.7k|    if (current->real_links.in_error ())
  ------------------
  |  Branch (498:9): [True: 30, False: 14.7k]
  ------------------
  499|     30|      err (HB_SERIALIZE_ERROR_OTHER);
  500|       |
  501|  14.7k|    link.width = sizeof (T);
  502|  14.7k|    link.objidx = objidx;
  503|  14.7k|    if (unlikely (!sizeof (T)))
  ------------------
  |  |  259|  14.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [Folded - Ignored]
  |  |  ------------------
  ------------------
  504|      0|    {
  505|       |      // This link is not associated with an actual offset and exists merely to enforce
  506|       |      // an ordering constraint.
  507|      0|      link.is_signed = 0;
  508|      0|      link.whence = 0;
  509|      0|      link.position = 0;
  510|      0|      link.bias = 0;
  511|      0|      return;
  512|      0|    }
  513|       |
  514|  14.7k|    link.is_signed = std::is_signed<hb_unwrap_type (T)>::value;
  515|  14.7k|    link.whence = (unsigned) whence;
  516|  14.7k|    link.position = (const char *) &ofs - current->head;
  517|  14.7k|    link.bias = bias;
  518|  14.7k|  }
_ZN22hb_serialize_context_t8add_linkIN2OT8OffsetToINS1_6Layout9GSUB_impl11LigatureSetINS3_10SmallTypesEEENS1_7IntTypeItLj2EEELb1EEEEEvRT_jNS_8whence_tEj:
  488|  5.07k|  {
  489|  5.07k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|  5.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 28, False: 5.05k]
  |  |  ------------------
  ------------------
  490|       |
  491|  5.05k|    if (!objidx)
  ------------------
  |  Branch (491:9): [True: 0, False: 5.05k]
  ------------------
  492|      0|      return;
  493|       |
  494|  5.05k|    assert (current);
  495|      0|    assert (current->head <= (const char *) &ofs);
  496|       |
  497|      0|    auto& link = *current->real_links.push ();
  498|  5.05k|    if (current->real_links.in_error ())
  ------------------
  |  Branch (498:9): [True: 14, False: 5.03k]
  ------------------
  499|     14|      err (HB_SERIALIZE_ERROR_OTHER);
  500|       |
  501|  5.05k|    link.width = sizeof (T);
  502|  5.05k|    link.objidx = objidx;
  503|  5.05k|    if (unlikely (!sizeof (T)))
  ------------------
  |  |  259|  5.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [Folded - Ignored]
  |  |  ------------------
  ------------------
  504|      0|    {
  505|       |      // This link is not associated with an actual offset and exists merely to enforce
  506|       |      // an ordering constraint.
  507|      0|      link.is_signed = 0;
  508|      0|      link.whence = 0;
  509|      0|      link.position = 0;
  510|      0|      link.bias = 0;
  511|      0|      return;
  512|      0|    }
  513|       |
  514|  5.05k|    link.is_signed = std::is_signed<hb_unwrap_type (T)>::value;
  515|  5.05k|    link.whence = (unsigned) whence;
  516|  5.05k|    link.position = (const char *) &ofs - current->head;
  517|  5.05k|    link.bias = bias;
  518|  5.05k|  }
_ZN22hb_serialize_context_t4pushIN2OT6Layout9GSUB_impl19SubstLookupSubTableEEEPT_v:
  315|  1.63k|  {
  316|  1.63k|    if (unlikely (in_error ())) return start_embed<Type> ();
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  317|       |
  318|  1.63k|    object_t *obj = object_pool.alloc ();
  319|  1.63k|    if (unlikely (!obj))
  ------------------
  |  |  259|  1.63k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.63k]
  |  |  ------------------
  ------------------
  320|      0|      check_success (false);
  321|  1.63k|    else
  322|  1.63k|    {
  323|  1.63k|      obj->head = head;
  324|  1.63k|      obj->tail = tail;
  325|  1.63k|      obj->next = current;
  326|  1.63k|      current = obj;
  327|  1.63k|    }
  328|  1.63k|    return start_embed<Type> ();
  329|  1.63k|  }
_ZNK22hb_serialize_context_t11start_embedIN2OT6Layout9GSUB_impl19SubstLookupSubTableEEEPT_PKS5_:
  587|  1.63k|  { return reinterpret_cast<Type *> (this->head); }
_ZN22hb_serialize_context_t8add_linkIN2OT8OffsetToINS1_6Layout9GSUB_impl19SubstLookupSubTableENS1_7IntTypeItLj2EEELb1EEEEEvRT_jNS_8whence_tEj:
  488|  1.53k|  {
  489|  1.53k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|  1.53k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 76, False: 1.46k]
  |  |  ------------------
  ------------------
  490|       |
  491|  1.46k|    if (!objidx)
  ------------------
  |  Branch (491:9): [True: 0, False: 1.46k]
  ------------------
  492|      0|      return;
  493|       |
  494|  1.46k|    assert (current);
  495|      0|    assert (current->head <= (const char *) &ofs);
  496|       |
  497|      0|    auto& link = *current->real_links.push ();
  498|  1.46k|    if (current->real_links.in_error ())
  ------------------
  |  Branch (498:9): [True: 29, False: 1.43k]
  ------------------
  499|     29|      err (HB_SERIALIZE_ERROR_OTHER);
  500|       |
  501|  1.46k|    link.width = sizeof (T);
  502|  1.46k|    link.objidx = objidx;
  503|  1.46k|    if (unlikely (!sizeof (T)))
  ------------------
  |  |  259|  1.46k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [Folded - Ignored]
  |  |  ------------------
  ------------------
  504|      0|    {
  505|       |      // This link is not associated with an actual offset and exists merely to enforce
  506|       |      // an ordering constraint.
  507|      0|      link.is_signed = 0;
  508|      0|      link.whence = 0;
  509|      0|      link.position = 0;
  510|      0|      link.bias = 0;
  511|      0|      return;
  512|      0|    }
  513|       |
  514|  1.46k|    link.is_signed = std::is_signed<hb_unwrap_type (T)>::value;
  515|  1.46k|    link.whence = (unsigned) whence;
  516|  1.46k|    link.position = (const char *) &ofs - current->head;
  517|  1.46k|    link.bias = bias;
  518|  1.46k|  }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEPT_S8_:
  708|     95|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEPT_S8_mb:
  693|     95|  {
  694|     95|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|     95|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  ------------------
  ------------------
  695|       |
  696|     95|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|     95|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|    190|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  |  Branch (259:47): [True: 0, False: 95]
  |  |  |  Branch (259:47): [True: 0, False: 95]
  |  |  ------------------
  ------------------
  700|     95|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|     95|    return reinterpret_cast<Type *> (obj);
  702|     95|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout9GSUB_impl20SingleSubstFormat1_3INS2_10SmallTypesEEEEEPT_mb:
  619|     95|  {
  620|     95|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|     95|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  ------------------
  ------------------
  621|       |
  622|     95|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|    190|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 95]
  |  |  |  Branch (259:47): [True: 0, False: 95]
  |  |  |  Branch (259:47): [True: 0, False: 95]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|     95|    if (clear)
  ------------------
  |  Branch (627:9): [True: 95, False: 0]
  ------------------
  628|     95|      hb_memset (this->head, 0, size);
  629|     95|    char *ret = this->head;
  630|     95|    this->head += size;
  631|     95|    return reinterpret_cast<Type *> (ret);
  632|     95|  }
_ZN22hb_serialize_context_t10extend_minIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEPT_S8_:
  708|    692|  Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
_ZN22hb_serialize_context_t11extend_sizeIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEPT_S8_mb:
  693|    692|  {
  694|    692|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
  695|       |
  696|    692|    assert (this->start <= (char *) obj);
  697|      0|    assert ((char *) obj <= this->head);
  698|      0|    assert ((size_t) (this->head - (char *) obj) <= size);
  699|    692|    if (unlikely (((char *) obj + size < (char *) obj) ||
  ------------------
  |  |  259|  1.38k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  |  Branch (259:47): [True: 0, False: 692]
  |  |  |  Branch (259:47): [True: 0, False: 692]
  |  |  ------------------
  ------------------
  700|    692|		  !this->allocate_size<Type> (((char *) obj) + size - this->head, clear))) return nullptr;
  701|    692|    return reinterpret_cast<Type *> (obj);
  702|    692|  }
_ZN22hb_serialize_context_t13allocate_sizeIN2OT6Layout9GSUB_impl20SingleSubstFormat2_4INS2_10SmallTypesEEEEEPT_mb:
  619|    692|  {
  620|    692|    if (unlikely (in_error ())) return nullptr;
  ------------------
  |  |  259|    692|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  ------------------
  ------------------
  621|       |
  622|    692|    if (unlikely (size > INT_MAX || this->tail - this->head < ptrdiff_t (size)))
  ------------------
  |  |  259|  1.38k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 692]
  |  |  |  Branch (259:47): [True: 0, False: 692]
  |  |  |  Branch (259:47): [True: 0, False: 692]
  |  |  ------------------
  ------------------
  623|      0|    {
  624|      0|      err (HB_SERIALIZE_ERROR_OUT_OF_ROOM);
  625|      0|      return nullptr;
  626|      0|    }
  627|    692|    if (clear)
  ------------------
  |  Branch (627:9): [True: 692, False: 0]
  ------------------
  628|    692|      hb_memset (this->head, 0, size);
  629|    692|    char *ret = this->head;
  630|    692|    this->head += size;
  631|    692|    return reinterpret_cast<Type *> (ret);
  632|    692|  }
_ZN22hb_serialize_context_t15start_serializeIN2OT6Layout9GSUB_impl11SubstLookupEEEPT_v:
  272|  1.71k|  {
  273|  1.71k|    DEBUG_MSG_LEVEL (SERIALIZE, this->start, 0, +1,
  ------------------
  |  |  231|  1.71k|#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...)	_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr,    true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
  ------------------
  274|  1.71k|		     "start [%p..%p] (%lu bytes)",
  275|  1.71k|		     this->start, this->end,
  276|  1.71k|		     (unsigned long) (this->end - this->start));
  277|       |
  278|  1.71k|    assert (!current);
  279|      0|    return push<Type> ();
  280|  1.71k|  }
_ZN22hb_serialize_context_t4pushIN2OT6Layout9GSUB_impl11SubstLookupEEEPT_v:
  315|  1.71k|  {
  316|  1.71k|    if (unlikely (in_error ())) return start_embed<Type> ();
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.71k]
  |  |  ------------------
  ------------------
  317|       |
  318|  1.71k|    object_t *obj = object_pool.alloc ();
  319|  1.71k|    if (unlikely (!obj))
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 81, False: 1.63k]
  |  |  ------------------
  ------------------
  320|     81|      check_success (false);
  321|  1.63k|    else
  322|  1.63k|    {
  323|  1.63k|      obj->head = head;
  324|  1.63k|      obj->tail = tail;
  325|  1.63k|      obj->next = current;
  326|  1.63k|      current = obj;
  327|  1.63k|    }
  328|  1.71k|    return start_embed<Type> ();
  329|  1.71k|  }
_ZNK22hb_serialize_context_t11start_embedIN2OT6Layout9GSUB_impl11SubstLookupEEEPT_PKS5_:
  587|  1.71k|  { return reinterpret_cast<Type *> (this->head); }
_ZNK22hb_serialize_context_t4copyIN2OT6Layout9GSUB_impl11SubstLookupEEEPT_v:
  740|  1.43k|  { return reinterpret_cast<Type *> ((char *) copy_bytes ().arrayZ); }

_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE4initEv:
  138|   765k|  {
  139|   765k|    head.init ();
  140|   765k|    tail.init ();
  141|   765k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE4initEv:
   83|   765k|  void init () { mask = 0; }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE4initEv:
  138|   765k|  {
  139|   765k|    head.init ();
  140|   765k|    tail.init ();
  141|   765k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE4initEv:
   83|   765k|  void init () { mask = 0; }
_ZN28hb_set_digest_bits_pattern_tImLj9EE4initEv:
   83|   765k|  void init () { mask = 0; }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE9add_arrayIjEEvPKT_jj:
  162|   650k|  {
  163|   650k|    head.add_array (array, count, stride);
  164|   650k|    tail.add_array (array, count, stride);
  165|   650k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE9add_arrayIjEEvPKT_jj:
  103|   650k|  {
  104|  8.57M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 7.92M, False: 650k]
  ------------------
  105|  7.92M|    {
  106|  7.92M|      add (*array);
  107|  7.92M|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  7.92M|    }
  109|   650k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE3addEj:
   87|  41.1M|  void add (hb_codepoint_t g) { mask |= mask_for (g); }
_ZN28hb_set_digest_bits_pattern_tImLj4EE8mask_forEj:
  130|   255M|  { return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE9add_arrayIjEEvPKT_jj:
  162|   650k|  {
  163|   650k|    head.add_array (array, count, stride);
  164|   650k|    tail.add_array (array, count, stride);
  165|   650k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE9add_arrayIjEEvPKT_jj:
  103|   650k|  {
  104|  8.57M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 7.92M, False: 650k]
  ------------------
  105|  7.92M|    {
  106|  7.92M|      add (*array);
  107|  7.92M|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  7.92M|    }
  109|   650k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE3addEj:
   87|  41.1M|  void add (hb_codepoint_t g) { mask |= mask_for (g); }
_ZN28hb_set_digest_bits_pattern_tImLj0EE8mask_forEj:
  130|  89.9M|  { return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
_ZN28hb_set_digest_bits_pattern_tImLj9EE9add_arrayIjEEvPKT_jj:
  103|   650k|  {
  104|  8.57M|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 7.92M, False: 650k]
  ------------------
  105|  7.92M|    {
  106|  7.92M|      add (*array);
  107|  7.92M|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  7.92M|    }
  109|   650k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE3addEj:
   87|  41.1M|  void add (hb_codepoint_t g) { mask |= mask_for (g); }
_ZN28hb_set_digest_bits_pattern_tImLj9EE8mask_forEj:
  130|  87.6M|  { return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE3addEj:
  150|  33.1M|  {
  151|  33.1M|    head.add (g);
  152|  33.1M|    tail.add (g);
  153|  33.1M|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE3addEj:
  150|  33.1M|  {
  151|  33.1M|    head.add (g);
  152|  33.1M|    tail.add (g);
  153|  33.1M|  }
_ZNK24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE8may_haveEj:
  183|   213M|  {
  184|   213M|    return head.may_have (g) && tail.may_have (g);
  ------------------
  |  Branch (184:12): [True: 48.5M, False: 165M]
  |  Branch (184:33): [True: 45.8M, False: 2.74M]
  ------------------
  185|   213M|  }
_ZNK28hb_set_digest_bits_pattern_tImLj4EE8may_haveEj:
  125|   213M|  { return mask & mask_for (g); }
_ZNK24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE8may_haveEj:
  183|  48.5M|  {
  184|  48.5M|    return head.may_have (g) && tail.may_have (g);
  ------------------
  |  Branch (184:12): [True: 46.2M, False: 2.31M]
  |  Branch (184:33): [True: 45.8M, False: 437k]
  ------------------
  185|  48.5M|  }
_ZNK28hb_set_digest_bits_pattern_tImLj0EE8may_haveEj:
  125|  48.5M|  { return mask & mask_for (g); }
_ZNK28hb_set_digest_bits_pattern_tImLj9EE8may_haveEj:
  125|  46.2M|  { return mask & mask_for (g); }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE16add_sorted_arrayIN2OT11HBGlyphID16EEEbRK17hb_sorted_array_tIKT_E:
  175|  6.04k|  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE16add_sorted_arrayIN2OT11HBGlyphID16EEEbPKT_jj:
  170|  6.04k|  {
  171|  6.04k|    return head.add_sorted_array (array, count, stride) &&
  ------------------
  |  Branch (171:12): [True: 6.04k, False: 0]
  ------------------
  172|  6.04k|	   tail.add_sorted_array (array, count, stride);
  ------------------
  |  Branch (172:5): [True: 6.04k, False: 0]
  ------------------
  173|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE16add_sorted_arrayIN2OT11HBGlyphID16EEEbPKT_jj:
  114|  6.04k|  {
  115|  6.04k|    add_array (array, count, stride);
  116|  6.04k|    return true;
  117|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE9add_arrayIN2OT11HBGlyphID16EEEvPKT_jj:
  103|  6.04k|  {
  104|   101k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 95.7k, False: 6.04k]
  ------------------
  105|  95.7k|    {
  106|  95.7k|      add (*array);
  107|  95.7k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  95.7k|    }
  109|  6.04k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE16add_sorted_arrayIN2OT11HBGlyphID16EEEbPKT_jj:
  170|  6.04k|  {
  171|  6.04k|    return head.add_sorted_array (array, count, stride) &&
  ------------------
  |  Branch (171:12): [True: 6.04k, False: 0]
  ------------------
  172|  6.04k|	   tail.add_sorted_array (array, count, stride);
  ------------------
  |  Branch (172:5): [True: 6.04k, False: 0]
  ------------------
  173|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE16add_sorted_arrayIN2OT11HBGlyphID16EEEbPKT_jj:
  114|  6.04k|  {
  115|  6.04k|    add_array (array, count, stride);
  116|  6.04k|    return true;
  117|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE9add_arrayIN2OT11HBGlyphID16EEEvPKT_jj:
  103|  6.04k|  {
  104|   101k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 95.7k, False: 6.04k]
  ------------------
  105|  95.7k|    {
  106|  95.7k|      add (*array);
  107|  95.7k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  95.7k|    }
  109|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE16add_sorted_arrayIN2OT11HBGlyphID16EEEbPKT_jj:
  114|  6.04k|  {
  115|  6.04k|    add_array (array, count, stride);
  116|  6.04k|    return true;
  117|  6.04k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE9add_arrayIN2OT11HBGlyphID16EEEvPKT_jj:
  103|  6.04k|  {
  104|   101k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 95.7k, False: 6.04k]
  ------------------
  105|  95.7k|    {
  106|  95.7k|      add (*array);
  107|  95.7k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  95.7k|    }
  109|  6.04k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE9add_rangeEjj:
  156|   191k|  {
  157|   191k|    return head.add_range (a, b) &&
  ------------------
  |  Branch (157:12): [True: 191k, False: 0]
  ------------------
  158|   191k|	   tail.add_range (a, b);
  ------------------
  |  Branch (158:5): [True: 191k, False: 0]
  ------------------
  159|   191k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE9add_rangeEjj:
   90|   191k|  {
   91|   191k|    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
  ------------------
  |  Branch (91:9): [True: 85.9k, False: 106k]
  ------------------
   92|  85.9k|      mask = (mask_t) -1;
   93|   106k|    else {
   94|   106k|      mask_t ma = mask_for (a);
   95|   106k|      mask_t mb = mask_for (b);
   96|   106k|      mask |= mb + (mb - ma) - (mb < ma);
   97|   106k|    }
   98|   191k|    return true;
   99|   191k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE9add_rangeEjj:
  156|   191k|  {
  157|   191k|    return head.add_range (a, b) &&
  ------------------
  |  Branch (157:12): [True: 191k, False: 0]
  ------------------
  158|   191k|	   tail.add_range (a, b);
  ------------------
  |  Branch (158:5): [True: 191k, False: 0]
  ------------------
  159|   191k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE9add_rangeEjj:
   90|   191k|  {
   91|   191k|    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
  ------------------
  |  Branch (91:9): [True: 109k, False: 82.4k]
  ------------------
   92|   109k|      mask = (mask_t) -1;
   93|  82.4k|    else {
   94|  82.4k|      mask_t ma = mask_for (a);
   95|  82.4k|      mask_t mb = mask_for (b);
   96|  82.4k|      mask |= mb + (mb - ma) - (mb < ma);
   97|  82.4k|    }
   98|   191k|    return true;
   99|   191k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE9add_rangeEjj:
   90|   191k|  {
   91|   191k|    if ((b >> shift) - (a >> shift) >= mask_bits - 1)
  ------------------
  |  Branch (91:9): [True: 55.9k, False: 136k]
  ------------------
   92|  55.9k|      mask = (mask_t) -1;
   93|   136k|    else {
   94|   136k|      mask_t ma = mask_for (a);
   95|   136k|      mask_t mb = mask_for (b);
   96|   136k|      mask |= mb + (mb - ma) - (mb < ma);
   97|   136k|    }
   98|   191k|    return true;
   99|   191k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE16add_sorted_arrayIN2OT11HBGlyphID24EEEbRK17hb_sorted_array_tIKT_E:
  175|  2.28k|  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE16add_sorted_arrayIN2OT11HBGlyphID24EEEbPKT_jj:
  170|  2.28k|  {
  171|  2.28k|    return head.add_sorted_array (array, count, stride) &&
  ------------------
  |  Branch (171:12): [True: 2.28k, False: 0]
  ------------------
  172|  2.28k|	   tail.add_sorted_array (array, count, stride);
  ------------------
  |  Branch (172:5): [True: 2.28k, False: 0]
  ------------------
  173|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE16add_sorted_arrayIN2OT11HBGlyphID24EEEbPKT_jj:
  114|  2.28k|  {
  115|  2.28k|    add_array (array, count, stride);
  116|  2.28k|    return true;
  117|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE9add_arrayIN2OT11HBGlyphID24EEEvPKT_jj:
  103|  2.28k|  {
  104|  11.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 9.40k, False: 2.28k]
  ------------------
  105|  9.40k|    {
  106|  9.40k|      add (*array);
  107|  9.40k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  9.40k|    }
  109|  2.28k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE16add_sorted_arrayIN2OT11HBGlyphID24EEEbPKT_jj:
  170|  2.28k|  {
  171|  2.28k|    return head.add_sorted_array (array, count, stride) &&
  ------------------
  |  Branch (171:12): [True: 2.28k, False: 0]
  ------------------
  172|  2.28k|	   tail.add_sorted_array (array, count, stride);
  ------------------
  |  Branch (172:5): [True: 2.28k, False: 0]
  ------------------
  173|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE16add_sorted_arrayIN2OT11HBGlyphID24EEEbPKT_jj:
  114|  2.28k|  {
  115|  2.28k|    add_array (array, count, stride);
  116|  2.28k|    return true;
  117|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE9add_arrayIN2OT11HBGlyphID24EEEvPKT_jj:
  103|  2.28k|  {
  104|  11.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 9.40k, False: 2.28k]
  ------------------
  105|  9.40k|    {
  106|  9.40k|      add (*array);
  107|  9.40k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  9.40k|    }
  109|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE16add_sorted_arrayIN2OT11HBGlyphID24EEEbPKT_jj:
  114|  2.28k|  {
  115|  2.28k|    add_array (array, count, stride);
  116|  2.28k|    return true;
  117|  2.28k|  }
_ZN28hb_set_digest_bits_pattern_tImLj9EE9add_arrayIN2OT11HBGlyphID24EEEvPKT_jj:
  103|  2.28k|  {
  104|  11.6k|    for (unsigned int i = 0; i < count; i++)
  ------------------
  |  Branch (104:30): [True: 9.40k, False: 2.28k]
  ------------------
  105|  9.40k|    {
  106|  9.40k|      add (*array);
  107|  9.40k|      array = &StructAtOffsetUnaligned<T> ((const void *) array, stride);
  108|  9.40k|    }
  109|  2.28k|  }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE3addERKS5_:
  144|  1.12M|  {
  145|  1.12M|    head.add (o.head);
  146|  1.12M|    tail.add (o.tail);
  147|  1.12M|  }
_ZN28hb_set_digest_bits_pattern_tImLj4EE3addERKS0_:
   85|  1.12M|  void add (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }
_ZN24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE3addERKS3_:
  144|  1.12M|  {
  145|  1.12M|    head.add (o.head);
  146|  1.12M|    tail.add (o.tail);
  147|  1.12M|  }
_ZN28hb_set_digest_bits_pattern_tImLj0EE3addERKS0_:
   85|  1.12M|  void add (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }
_ZN28hb_set_digest_bits_pattern_tImLj9EE3addERKS0_:
   85|  1.12M|  void add (const hb_set_digest_bits_pattern_t &o) { mask |= o.mask; }
_ZNK24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj4EES_IS0_ImLj0EES0_ImLj9EEEE8may_haveERKS5_:
  178|   713k|  {
  179|   713k|    return head.may_have (o.head) && tail.may_have (o.tail);
  ------------------
  |  Branch (179:12): [True: 175k, False: 537k]
  |  Branch (179:38): [True: 172k, False: 3.33k]
  ------------------
  180|   713k|  }
_ZNK28hb_set_digest_bits_pattern_tImLj4EE8may_haveERKS0_:
  122|   713k|  { return mask & o.mask; }
_ZNK24hb_set_digest_combiner_tI28hb_set_digest_bits_pattern_tImLj0EES0_ImLj9EEE8may_haveERKS3_:
  178|   175k|  {
  179|   175k|    return head.may_have (o.head) && tail.may_have (o.tail);
  ------------------
  |  Branch (179:12): [True: 172k, False: 3.11k]
  |  Branch (179:38): [True: 172k, False: 226]
  ------------------
  180|   175k|  }
_ZNK28hb_set_digest_bits_pattern_tImLj0EE8may_haveERKS0_:
  122|   175k|  { return mask & o.mask; }
_ZNK28hb_set_digest_bits_pattern_tImLj9EE8may_haveERKS0_:
  122|   172k|  { return mask & o.mask; }

hb_set_create:
   53|   100k|{
   54|   100k|  hb_set_t *set;
   55|       |
   56|   100k|  if (!(set = hb_object_create<hb_set_t> ()))
  ------------------
  |  Branch (56:7): [True: 1.49k, False: 98.5k]
  ------------------
   57|  1.49k|    return hb_set_get_empty ();
   58|       |
   59|  98.5k|  return set;
   60|   100k|}
hb_set_get_empty:
   73|  1.49k|{
   74|  1.49k|  return const_cast<hb_set_t *> (&Null (hb_set_t));
  ------------------
  |  |  124|  1.49k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
   75|  1.49k|}
hb_set_destroy:
  105|   100k|{
  106|   100k|  if (!hb_object_destroy (set)) return;
  ------------------
  |  Branch (106:7): [True: 1.49k, False: 98.5k]
  ------------------
  107|       |
  108|  98.5k|  hb_free (set);
  ------------------
  |  |  236|  98.5k|#define hb_free hb_free_impl
  ------------------
  109|  98.5k|}
hb_set_add:
  253|  33.3k|{
  254|       |  /* Immutible-safe. */
  255|  33.3k|  set->add (codepoint);
  256|  33.3k|}

_ZN8hb_set_tC2Ev:
  165|  98.5k|  hb_set_t () : sparseset () {};
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE4initEv:
   63|  98.5k|  {
   64|  98.5k|    hb_object_init (this);
   65|  98.5k|    s.init ();
   66|  98.5k|  }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE4finiEv:
   68|  98.5k|  {
   69|  98.5k|    hb_object_fini (this);
   70|  98.5k|    s.fini ();
   71|  98.5k|  }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3addEj:
   86|  85.8k|  void add (hb_codepoint_t g) { s.add (g); }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE9add_rangeEjj:
   87|  87.1k|  bool add_range (hb_codepoint_t a, hb_codepoint_t b) { return s.add_range (a, b); }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE9del_rangeEjj:
  104|  24.6k|  void del_range (hb_codepoint_t a, hb_codepoint_t b) { s.del_range (a, b); }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tE3delEj:
  103|  5.83M|  void del (hb_codepoint_t g) { s.del (g); }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tEC2Ev:
   41|  98.5k|  hb_sparseset_t () { init (); }
_ZN14hb_sparseset_tI23hb_bit_set_invertible_tED2Ev:
   42|  98.5k|  ~hb_sparseset_t () { fini (); }

_ZN19hb_shape_plan_key_t4initEbP9hb_face_tPK23hb_segment_properties_tPK12hb_feature_tjPKijPKPKc:
   69|   615k|{
   70|   615k|  hb_feature_t *features = nullptr;
   71|   615k|  if (copy && num_user_features && !(features = (hb_feature_t *) hb_calloc (num_user_features, sizeof (hb_feature_t))))
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
  |  Branch (71:7): [True: 49.4k, False: 565k]
  |  Branch (71:15): [True: 0, False: 49.4k]
  |  Branch (71:36): [True: 0, False: 0]
  ------------------
   72|      0|    goto bail;
   73|       |
   74|   615k|  this->props = *props;
   75|   615k|  this->num_user_features = num_user_features;
   76|   615k|  this->user_features = copy ? features : user_features;
  ------------------
  |  Branch (76:25): [True: 49.4k, False: 565k]
  ------------------
   77|   615k|  if (copy && num_user_features)
  ------------------
  |  Branch (77:7): [True: 49.4k, False: 565k]
  |  Branch (77:15): [True: 0, False: 49.4k]
  ------------------
   78|      0|  {
   79|      0|    hb_memcpy (features, user_features, num_user_features * sizeof (hb_feature_t));
   80|       |    /* Make start/end uniform to easier catch bugs. */
   81|      0|    for (unsigned int i = 0; i < num_user_features; i++)
  ------------------
  |  Branch (81:30): [True: 0, False: 0]
  ------------------
   82|      0|    {
   83|      0|      if (features[0].start != HB_FEATURE_GLOBAL_START)
  ------------------
  |  |  805|      0|#define HB_FEATURE_GLOBAL_START	0
  ------------------
  |  Branch (83:11): [True: 0, False: 0]
  ------------------
   84|      0|	features[0].start = 1;
   85|      0|      if (features[0].end   != HB_FEATURE_GLOBAL_END)
  ------------------
  |  |  815|      0|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  |  Branch (85:11): [True: 0, False: 0]
  ------------------
   86|      0|	features[0].end   = 2;
   87|      0|    }
   88|      0|  }
   89|   615k|  this->shaper_func = nullptr;
   90|   615k|  this->shaper_name = nullptr;
   91|   615k|#ifndef HB_NO_OT_SHAPE
   92|   615k|  this->ot.init (face, coords, num_coords);
   93|   615k|#endif
   94|       |
   95|       |  /*
   96|       |   * Choose shaper.
   97|       |   */
   98|       |
   99|   615k|#define HB_SHAPER_PLAN(shaper) \
  100|   615k|	HB_STMT_START { \
  101|   615k|	  if (face->data.shaper) \
  102|   615k|	  { \
  103|   615k|	    this->shaper_func = _hb_##shaper##_shape; \
  104|   615k|	    this->shaper_name = #shaper; \
  105|   615k|	    return true; \
  106|   615k|	  } \
  107|   615k|	} HB_STMT_END
  108|       |
  109|   615k|  if (unlikely (shaper_list))
  ------------------
  |  |  259|   615k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 615k]
  |  |  ------------------
  ------------------
  110|      0|  {
  111|      0|    for (; *shaper_list; shaper_list++)
  ------------------
  |  Branch (111:12): [True: 0, False: 0]
  ------------------
  112|      0|      if (false)
  ------------------
  |  Branch (112:11): [Folded - Ignored]
  ------------------
  113|      0|	;
  114|      0|#define HB_SHAPER_IMPLEMENT(shaper) \
  115|      0|      else if (0 == strcmp (*shaper_list, #shaper)) \
  116|      0|	HB_SHAPER_PLAN (shaper);
  117|      0|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|      0|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|      0|#ifndef HB_NO_OT_SHAPE
  |  |   47|      0|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  115|      0|      else if (0 == strcmp (*shaper_list, #shaper)) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (115:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  116|      0|	HB_SHAPER_PLAN (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|      0|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  101|      0|	  if (face->data.shaper) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (101:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  102|      0|	  { \
  |  |  |  |  |  |  103|      0|	    this->shaper_func = _hb_##shaper##_shape; \
  |  |  |  |  |  |  104|      0|	    this->shaper_name = #shaper; \
  |  |  |  |  |  |  105|      0|	    return true; \
  |  |  |  |  |  |  106|      0|	  } \
  |  |  |  |  |  |  107|      0|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|      0|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|      0|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|      0|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|      0|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  115|      0|      else if (0 == strcmp (*shaper_list, #shaper)) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (115:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  116|      0|	HB_SHAPER_PLAN (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|      0|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  101|      0|	  if (face->data.shaper) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (101:8): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  102|      0|	  { \
  |  |  |  |  |  |  103|      0|	    this->shaper_func = _hb_##shaper##_shape; \
  |  |  |  |  |  |  104|      0|	    this->shaper_name = #shaper; \
  |  |  |  |  |  |  105|      0|	    return true; \
  |  |  |  |  |  |  106|      0|	  } \
  |  |  |  |  |  |  107|      0|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|      0|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      0|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|      0|#endif
  ------------------
  118|      0|#undef HB_SHAPER_IMPLEMENT
  119|      0|  }
  120|   615k|  else
  121|   615k|  {
  122|   615k|    const HB_UNUSED hb_shaper_entry_t *shapers = _hb_shapers_get ();
  123|   615k|    for (unsigned int i = 0; i < HB_SHAPERS_COUNT; i++)
  ------------------
  |  Branch (123:30): [True: 615k, False: 153]
  ------------------
  124|   615k|      if (false)
  ------------------
  |  Branch (124:11): [Folded - Ignored]
  ------------------
  125|      0|	;
  126|   615k|#define HB_SHAPER_IMPLEMENT(shaper) \
  127|   615k|      else if (shapers[i].func == _hb_##shaper##_shape) \
  128|   615k|	HB_SHAPER_PLAN (shaper);
  129|   615k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|   615k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|   615k|#ifndef HB_NO_OT_SHAPE
  |  |   47|   615k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  127|   615k|      else if (shapers[i].func == _hb_##shaper##_shape) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:16): [True: 615k, False: 153]
  |  |  |  |  ------------------
  |  |  |  |  128|   615k|	HB_SHAPER_PLAN (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|   615k|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|   615k|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  101|   615k|	  if (face->data.shaper) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (101:8): [True: 614k, False: 153]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  102|   615k|	  { \
  |  |  |  |  |  |  103|   614k|	    this->shaper_func = _hb_##shaper##_shape; \
  |  |  |  |  |  |  104|   614k|	    this->shaper_name = #shaper; \
  |  |  |  |  |  |  105|   614k|	    return true; \
  |  |  |  |  |  |  106|   614k|	  } \
  |  |  |  |  |  |  107|   615k|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|   615k|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|    153|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|    153|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|   615k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  127|   615k|      else if (shapers[i].func == _hb_##shaper##_shape) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (127:16): [True: 153, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  128|    153|	HB_SHAPER_PLAN (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|    153|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|    153|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  101|    153|	  if (face->data.shaper) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (101:8): [True: 0, False: 153]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  102|    153|	  { \
  |  |  |  |  |  |  103|      0|	    this->shaper_func = _hb_##shaper##_shape; \
  |  |  |  |  |  |  104|      0|	    this->shaper_name = #shaper; \
  |  |  |  |  |  |  105|      0|	    return true; \
  |  |  |  |  |  |  106|      0|	  } \
  |  |  |  |  |  |  107|    153|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|    153|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|   615k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|   615k|#endif
  ------------------
  130|   615k|#undef HB_SHAPER_IMPLEMENT
  131|   615k|  }
  132|    153|#undef HB_SHAPER_PLAN
  133|       |
  134|    153|bail:
  135|    153|  ::hb_free (features);
  ------------------
  |  |  236|    153|#define hb_free hb_free_impl
  ------------------
  136|    153|  return false;
  137|   615k|}
_ZN19hb_shape_plan_key_t19user_features_matchEPKS_:
  141|   515k|{
  142|   515k|  if (this->num_user_features != other->num_user_features)
  ------------------
  |  Branch (142:7): [True: 0, False: 515k]
  ------------------
  143|      0|    return false;
  144|   515k|  for (unsigned int i = 0; i < num_user_features; i++)
  ------------------
  |  Branch (144:28): [True: 0, False: 515k]
  ------------------
  145|      0|  {
  146|      0|    if (this->user_features[i].tag   != other->user_features[i].tag   ||
  ------------------
  |  Branch (146:9): [True: 0, False: 0]
  ------------------
  147|      0|	this->user_features[i].value != other->user_features[i].value ||
  ------------------
  |  Branch (147:2): [True: 0, False: 0]
  ------------------
  148|      0|	(this->user_features[i].start == HB_FEATURE_GLOBAL_START &&
  ------------------
  |  |  805|      0|#define HB_FEATURE_GLOBAL_START	0
  ------------------
  |  Branch (148:2): [True: 0, False: 0]
  |  Branch (148:3): [True: 0, False: 0]
  ------------------
  149|      0|	 this->user_features[i].end   == HB_FEATURE_GLOBAL_END) !=
  ------------------
  |  |  815|      0|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  |  Branch (149:3): [True: 0, False: 0]
  ------------------
  150|      0|	(other->user_features[i].start == HB_FEATURE_GLOBAL_START &&
  ------------------
  |  |  805|      0|#define HB_FEATURE_GLOBAL_START	0
  ------------------
  |  Branch (150:3): [True: 0, False: 0]
  ------------------
  151|      0|	 other->user_features[i].end   == HB_FEATURE_GLOBAL_END))
  ------------------
  |  |  815|      0|#define HB_FEATURE_GLOBAL_END	((unsigned int) -1)
  ------------------
  |  Branch (151:3): [True: 0, False: 0]
  ------------------
  152|      0|      return false;
  153|      0|  }
  154|   515k|  return true;
  155|   515k|}
_ZN19hb_shape_plan_key_t5equalEPKS_:
  159|   531k|{
  160|   531k|  return hb_segment_properties_equal (&this->props, &other->props) &&
  ------------------
  |  Branch (160:10): [True: 515k, False: 16.0k]
  ------------------
  161|   531k|	 this->user_features_match (other) &&
  ------------------
  |  Branch (161:3): [True: 515k, False: 0]
  ------------------
  162|   531k|#ifndef HB_NO_OT_SHAPE
  163|   531k|	 this->ot.equal (&other->ot) &&
  ------------------
  |  Branch (163:3): [True: 515k, False: 0]
  ------------------
  164|   531k|#endif
  165|   531k|	 this->shaper_func == other->shaper_func;
  ------------------
  |  Branch (165:3): [True: 515k, False: 0]
  ------------------
  166|   531k|}
hb_shape_plan_create2:
  228|  49.9k|{
  229|  49.9k|  DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr,
  ------------------
  |  |  233|  49.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  49.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  230|  49.9k|		  "face=%p num_features=%u num_coords=%u shaper_list=%p",
  231|  49.9k|		  face,
  232|  49.9k|		  num_user_features,
  233|  49.9k|		  num_coords,
  234|  49.9k|		  shaper_list);
  235|       |
  236|  49.9k|  if (unlikely (props->direction == HB_DIRECTION_INVALID))
  ------------------
  |  |  259|  49.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.9k]
  |  |  ------------------
  ------------------
  237|      0|    return hb_shape_plan_get_empty ();
  238|       |
  239|  49.9k|  hb_shape_plan_t *shape_plan;
  240|       |
  241|  49.9k|  if (unlikely (!props))
  ------------------
  |  |  259|  49.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.9k]
  |  |  ------------------
  ------------------
  242|      0|    goto bail;
  243|  49.9k|  if (!(shape_plan = hb_object_create<hb_shape_plan_t> ()))
  ------------------
  |  Branch (243:7): [True: 483, False: 49.4k]
  ------------------
  244|    483|    goto bail;
  245|       |
  246|  49.4k|  if (unlikely (!face))
  ------------------
  |  |  259|  49.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 49.4k]
  |  |  ------------------
  ------------------
  247|      0|    face = hb_face_get_empty ();
  248|  49.4k|  hb_face_make_immutable (face);
  249|  49.4k|  shape_plan->face_unsafe = face;
  250|       |
  251|  49.4k|  if (unlikely (!shape_plan->key.init (true,
  ------------------
  |  |  259|  49.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 153, False: 49.3k]
  |  |  ------------------
  ------------------
  252|  49.4k|				       face,
  253|  49.4k|				       props,
  254|  49.4k|				       user_features,
  255|  49.4k|				       num_user_features,
  256|  49.4k|				       coords,
  257|  49.4k|				       num_coords,
  258|  49.4k|				       shaper_list)))
  259|    153|    goto bail2;
  260|  49.3k|#ifndef HB_NO_OT_SHAPE
  261|  49.3k|  if (unlikely (!shape_plan->ot.init0 (face, &shape_plan->key)))
  ------------------
  |  |  259|  49.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 25, False: 49.2k]
  |  |  ------------------
  ------------------
  262|     25|    goto bail3;
  263|  49.2k|#endif
  264|       |
  265|  49.2k|  return shape_plan;
  266|       |
  267|      0|#ifndef HB_NO_OT_SHAPE
  268|     25|bail3:
  269|     25|#endif
  270|     25|  shape_plan->key.fini ();
  271|    178|bail2:
  272|    178|  hb_free (shape_plan);
  ------------------
  |  |  236|    178|#define hb_free hb_free_impl
  ------------------
  273|    661|bail:
  274|    661|  return hb_shape_plan_get_empty ();
  275|    178|}
hb_shape_plan_get_empty:
  288|    661|{
  289|    661|  return const_cast<hb_shape_plan_t *> (&Null (hb_shape_plan_t));
  ------------------
  |  |  124|    661|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  290|    661|}
hb_shape_plan_reference:
  304|   564k|{
  305|   564k|  return hb_object_reference (shape_plan);
  306|   564k|}
hb_shape_plan_destroy:
  320|   614k|{
  321|   614k|  if (!hb_object_destroy (shape_plan)) return;
  ------------------
  |  Branch (321:7): [True: 565k, False: 49.2k]
  ------------------
  322|       |
  323|  49.2k|  hb_free (shape_plan);
  ------------------
  |  |  236|  49.2k|#define hb_free hb_free_impl
  ------------------
  324|  49.2k|}
hb_shape_plan_execute:
  451|   565k|{
  452|   565k|  bool ret = _hb_shape_plan_execute_internal (shape_plan, font, buffer,
  453|   565k|					      features, num_features);
  454|       |
  455|   565k|  if (ret && buffer->content_type == HB_BUFFER_CONTENT_TYPE_UNICODE)
  ------------------
  |  Branch (455:7): [True: 565k, False: 661]
  |  Branch (455:14): [True: 0, False: 565k]
  ------------------
  456|      0|    buffer->content_type = HB_BUFFER_CONTENT_TYPE_GLYPHS;
  457|       |
  458|   565k|  return ret;
  459|   565k|}
hb_shape_plan_create_cached2:
  521|   565k|{
  522|   565k|  DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr,
  ------------------
  |  |  233|   565k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|   565k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  523|   565k|		  "face=%p num_features=%u shaper_list=%p",
  524|   565k|		  face,
  525|   565k|		  num_user_features,
  526|   565k|		  shaper_list);
  527|       |
  528|   565k|retry:
  529|   565k|  hb_face_t::plan_node_t *cached_plan_nodes = face->shape_plans;
  530|       |
  531|   565k|  bool dont_cache = !hb_object_is_valid (face);
  532|       |
  533|   565k|  if (likely (!dont_cache))
  ------------------
  |  |  258|   565k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 565k, False: 157]
  |  |  ------------------
  ------------------
  534|   565k|  {
  535|   565k|    hb_shape_plan_key_t key;
  536|   565k|    if (!key.init (false,
  ------------------
  |  Branch (536:9): [True: 0, False: 565k]
  ------------------
  537|   565k|		   face,
  538|   565k|		   props,
  539|   565k|		   user_features,
  540|   565k|		   num_user_features,
  541|   565k|		   coords,
  542|   565k|		   num_coords,
  543|   565k|		   shaper_list))
  544|      0|      return hb_shape_plan_get_empty ();
  545|       |
  546|   581k|    for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
  ------------------
  |  Branch (546:60): [True: 531k, False: 49.7k]
  ------------------
  547|   531k|      if (node->shape_plan->key.equal (&key))
  ------------------
  |  Branch (547:11): [True: 515k, False: 16.0k]
  ------------------
  548|   515k|      {
  549|   515k|	DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
  ------------------
  |  |  233|   515k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|   515k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  550|   515k|	return hb_shape_plan_reference (node->shape_plan);
  551|   515k|      }
  552|   565k|  }
  553|       |
  554|  49.9k|  hb_shape_plan_t *shape_plan = hb_shape_plan_create2 (face, props,
  555|  49.9k|						       user_features, num_user_features,
  556|  49.9k|						       coords, num_coords,
  557|  49.9k|						       shaper_list);
  558|       |
  559|  49.9k|  if (unlikely (dont_cache))
  ------------------
  |  |  259|  49.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 157, False: 49.7k]
  |  |  ------------------
  ------------------
  560|    157|    return shape_plan;
  561|       |
  562|  49.7k|  hb_face_t::plan_node_t *node = (hb_face_t::plan_node_t *) hb_calloc (1, sizeof (hb_face_t::plan_node_t));
  ------------------
  |  |  234|  49.7k|#define hb_calloc hb_calloc_impl
  ------------------
  563|  49.7k|  if (unlikely (!node))
  ------------------
  |  |  259|  49.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 847, False: 48.9k]
  |  |  ------------------
  ------------------
  564|    847|    return shape_plan;
  565|       |
  566|  48.9k|  node->shape_plan = shape_plan;
  567|  48.9k|  node->next = cached_plan_nodes;
  568|       |
  569|  48.9k|  if (unlikely (!face->shape_plans.cmpexch (cached_plan_nodes, node)))
  ------------------
  |  |  259|  48.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 48.9k]
  |  |  ------------------
  ------------------
  570|      0|  {
  571|      0|    hb_shape_plan_destroy (shape_plan);
  572|      0|    hb_free (node);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  573|      0|    goto retry;
  574|      0|  }
  575|  48.9k|  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan, "inserted into cache");
  ------------------
  |  |  233|  48.9k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|  48.9k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  576|       |
  577|  48.9k|  return hb_shape_plan_reference (shape_plan);
  578|  48.9k|}
hb-shape-plan.cc:_ZL31_hb_shape_plan_execute_internalP15hb_shape_plan_tP9hb_font_tP11hb_buffer_tPK12hb_feature_tj:
  392|   565k|{
  393|   565k|  DEBUG_MSG_FUNC (SHAPE_PLAN, shape_plan,
  ------------------
  |  |  233|   565k|#define DEBUG_MSG_FUNC(WHAT, OBJ, ...)				_hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  306|   565k|#define HB_FUNC __PRETTY_FUNCTION__
  |  |  ------------------
  ------------------
  394|   565k|		  "num_features=%u shaper_func=%p, shaper_name=%s",
  395|   565k|		  num_features,
  396|   565k|		  shape_plan->key.shaper_func,
  397|   565k|		  shape_plan->key.shaper_name);
  398|       |
  399|   565k|  if (unlikely (!buffer->len))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 565k]
  |  |  ------------------
  ------------------
  400|      0|    return true;
  401|       |
  402|   565k|  assert (!hb_object_is_immutable (buffer));
  403|       |
  404|      0|  buffer->assert_unicode ();
  405|       |
  406|   565k|  if (unlikely (!hb_object_is_valid (shape_plan)))
  ------------------
  |  |  259|   565k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 661, False: 565k]
  |  |  ------------------
  ------------------
  407|    661|    return false;
  408|       |
  409|   565k|  assert (shape_plan->face_unsafe == font->face);
  410|      0|  assert (hb_segment_properties_equal (&shape_plan->key.props, &buffer->props));
  411|       |
  412|      0|#define HB_SHAPER_EXECUTE(shaper) \
  413|      0|	HB_STMT_START { \
  414|      0|	  return font->data.shaper && \
  415|      0|		 _hb_##shaper##_shape (shape_plan, font, buffer, features, num_features); \
  416|      0|	} HB_STMT_END
  417|       |
  418|   565k|  if (false)
  ------------------
  |  Branch (418:7): [Folded - Ignored]
  ------------------
  419|      0|    ;
  420|   565k|#define HB_SHAPER_IMPLEMENT(shaper) \
  421|   565k|  else if (shape_plan->key.shaper_func == _hb_##shaper##_shape) \
  422|   565k|    HB_SHAPER_EXECUTE (shaper);
  423|   565k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|   565k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|   565k|#ifndef HB_NO_OT_SHAPE
  |  |   47|   565k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  421|   565k|  else if (shape_plan->key.shaper_func == _hb_##shaper##_shape) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (421:12): [True: 565k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  422|   565k|    HB_SHAPER_EXECUTE (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|   565k|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|   565k|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  414|   565k|	  return font->data.shaper && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (414:11): [True: 565k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  415|   565k|		 _hb_##shaper##_shape (shape_plan, font, buffer, features, num_features); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (415:4): [True: 565k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  416|   565k|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|   565k|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|      0|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|      0|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|   565k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  421|   565k|  else if (shape_plan->key.shaper_func == _hb_##shaper##_shape) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (421:12): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  422|      0|    HB_SHAPER_EXECUTE (shaper);
  |  |  |  |  ------------------
  |  |  |  |  |  |  413|      0|	HB_STMT_START { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  423|      0|#define HB_STMT_START do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  414|      0|	  return font->data.shaper && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (414:11): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  415|      0|		 _hb_##shaper##_shape (shape_plan, font, buffer, features, num_features); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (415:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|	} HB_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  424|      0|#define HB_STMT_END   while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (424:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|   565k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|   565k|#endif
  ------------------
  424|      0|#undef HB_SHAPER_IMPLEMENT
  425|       |
  426|      0|#undef HB_SHAPER_EXECUTE
  427|       |
  428|      0|  return false;
  429|   565k|}

_ZN19hb_shape_plan_key_t4finiEv:
   58|  49.3k|  HB_INTERNAL void fini () { hb_free ((void *) user_features); user_features = nullptr; }
  ------------------
  |  |  236|  49.3k|#define hb_free hb_free_impl
  ------------------
_ZN15hb_shape_plan_tD2Ev:
   67|  49.2k|  ~hb_shape_plan_t () { key.fini (); }

hb_shape_full:
  130|   569k|{
  131|   569k|  if (unlikely (!buffer->len))
  ------------------
  |  |  259|   569k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.64k, False: 565k]
  |  |  ------------------
  ------------------
  132|  3.64k|    return true;
  133|       |
  134|   565k|  buffer->enter ();
  135|       |
  136|   565k|  hb_buffer_t *text_buffer = nullptr;
  137|   565k|  if (buffer->flags & HB_BUFFER_FLAG_VERIFY)
  ------------------
  |  Branch (137:7): [True: 31.5k, False: 534k]
  ------------------
  138|  31.5k|  {
  139|  31.5k|    text_buffer = hb_buffer_create ();
  140|  31.5k|    hb_buffer_append (text_buffer, buffer, 0, -1);
  141|  31.5k|  }
  142|       |
  143|   565k|  hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached2 (font->face, &buffer->props,
  144|   565k|							      features, num_features,
  145|   565k|							      font->coords, font->num_coords,
  146|   565k|							      shaper_list);
  147|       |
  148|   565k|  hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
  149|       |
  150|   565k|  if (buffer->max_ops <= 0)
  ------------------
  |  Branch (150:7): [True: 0, False: 565k]
  ------------------
  151|      0|    buffer->shaping_failed = true;
  152|       |
  153|   565k|  hb_shape_plan_destroy (shape_plan);
  154|       |
  155|   565k|  if (text_buffer)
  ------------------
  |  Branch (155:7): [True: 31.5k, False: 534k]
  ------------------
  156|  31.5k|  {
  157|  31.5k|    if (res && buffer->successful && !buffer->shaping_failed
  ------------------
  |  Branch (157:9): [True: 31.1k, False: 393]
  |  Branch (157:16): [True: 30.7k, False: 409]
  |  Branch (157:38): [True: 30.3k, False: 318]
  ------------------
  158|  31.5k|	    && text_buffer->successful
  ------------------
  |  Branch (158:9): [True: 29.4k, False: 975]
  ------------------
  159|  31.5k|	    && !buffer->verify (text_buffer,
  ------------------
  |  Branch (159:9): [True: 834, False: 28.5k]
  ------------------
  160|  29.4k|				font,
  161|  29.4k|				features,
  162|  29.4k|				num_features,
  163|  29.4k|				shaper_list))
  164|    834|      res = false;
  165|  31.5k|    hb_buffer_destroy (text_buffer);
  166|  31.5k|  }
  167|       |
  168|   565k|  buffer->leave ();
  169|       |
  170|   565k|  return res;
  171|   569k|}
hb_shape:
  194|  66.6k|{
  195|  66.6k|  hb_shape_full (font, buffer, features, num_features, nullptr);
  196|  66.6k|}

_Z15_hb_shapers_getv:
  100|   615k|{
  101|   615k|  return static_shapers.get_unconst ();
  102|   615k|}
_ZN24hb_shapers_lazy_loader_t8get_nullEv:
   89|      1|  static const hb_shaper_entry_t *get_null ()      { return _hb_all_shapers; }
_ZN24hb_shapers_lazy_loader_t6createEv:
   47|      1|  {
   48|      1|    char *env = getenv ("HB_SHAPER_LIST");
   49|      1|    if (!env || !*env)
  ------------------
  |  Branch (49:9): [True: 1, False: 0]
  |  Branch (49:17): [True: 0, False: 0]
  ------------------
   50|      1|      return nullptr;
   51|       |
   52|      0|    hb_shaper_entry_t *shapers = (hb_shaper_entry_t *) hb_calloc (1, sizeof (_hb_all_shapers));
  ------------------
  |  |  234|      0|#define hb_calloc hb_calloc_impl
  ------------------
   53|      0|    if (unlikely (!shapers))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   54|      0|      return nullptr;
   55|       |
   56|      0|    hb_memcpy (shapers, _hb_all_shapers, sizeof (_hb_all_shapers));
   57|       |
   58|       |     /* Reorder shaper list to prefer requested shapers. */
   59|      0|    unsigned int i = 0;
   60|      0|    char *end, *p = env;
   61|      0|    for (;;)
   62|      0|    {
   63|      0|      end = strchr (p, ',');
   64|      0|      if (!end)
  ------------------
  |  Branch (64:11): [True: 0, False: 0]
  ------------------
   65|      0|	end = p + strlen (p);
   66|       |
   67|      0|      for (unsigned int j = i; j < ARRAY_LENGTH_CONST (_hb_all_shapers); j++)
  ------------------
  |  |  944|      0|#define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__array[0])))
  ------------------
  |  Branch (67:32): [True: 0, False: 0]
  ------------------
   68|      0|	if (end - p == (int) strlen (shapers[j].name) &&
  ------------------
  |  Branch (68:6): [True: 0, False: 0]
  ------------------
   69|      0|	    0 == strncmp (shapers[j].name, p, end - p))
  ------------------
  |  Branch (69:6): [True: 0, False: 0]
  ------------------
   70|      0|	{
   71|       |	  /* Reorder this shaper to position i */
   72|      0|	 struct hb_shaper_entry_t t = shapers[j];
   73|      0|	 memmove (&shapers[i + 1], &shapers[i], sizeof (shapers[i]) * (j - i));
   74|      0|	 shapers[i] = t;
   75|      0|	 i++;
   76|      0|	}
   77|       |
   78|      0|      if (!*end)
  ------------------
  |  Branch (78:11): [True: 0, False: 0]
  ------------------
   79|      0|	break;
   80|      0|      else
   81|      0|	p = end + 1;
   82|      0|    }
   83|       |
   84|      0|    hb_atexit (free_static_shapers);
  ------------------
  |  |  466|      0|#    define hb_atexit atexit
  ------------------
   85|       |
   86|      0|    return shapers;
   87|      0|  }

_ZN26hb_shaper_object_dataset_tI9hb_font_tE4finiEv:
  119|  99.7k|  {
  120|  99.7k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  121|  99.7k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|  99.7k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|  99.7k|#ifndef HB_NO_OT_SHAPE
  |  |   47|  99.7k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  120|  99.7k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  |  |  ------------------
  |  |   48|  99.7k|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|  99.7k|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|  99.7k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  120|  99.7k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  |  |  ------------------
  |  |   62|  99.7k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|  99.7k|#endif
  ------------------
  122|  99.7k|#undef HB_SHAPER_IMPLEMENT
  123|  99.7k|  }
_ZN23hb_shaper_lazy_loader_tI9hb_font_tLj1E17hb_ot_font_data_tE8get_nullEv:
  101|   598k|	  static Type *get_null () { return nullptr; } \
_ZN23hb_shaper_lazy_loader_tI9hb_font_tLj1E17hb_ot_font_data_tE7destroyEPS1_:
  102|  33.0k|	  static void destroy (Type *p) { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (p); } \
  ------------------
  |  |   74|  33.0k|#define HB_SHAPER_DATA_DESTROY_FUNC(shaper, object)	_hb_##shaper##_shaper_##object##_data_destroy
  ------------------
_ZN26hb_shaper_object_dataset_tI9hb_face_tE5init0EPS0_:
  112|  33.3k|  {
  113|  33.3k|    this->parent_data = parent_data;
  114|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  115|  33.3k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|  33.3k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|  33.3k|#ifndef HB_NO_OT_SHAPE
  |  |   47|  33.3k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  114|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  |  |  ------------------
  |  |   48|  33.3k|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|  33.3k|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|  33.3k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  114|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  |  |  ------------------
  |  |   62|  33.3k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|  33.3k|#endif
  ------------------
  116|  33.3k|#undef HB_SHAPER_IMPLEMENT
  117|  33.3k|  }
_ZN26hb_shaper_object_dataset_tI9hb_face_tE4finiEv:
  119|  33.3k|  {
  120|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  121|  33.3k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|  33.3k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|  33.3k|#ifndef HB_NO_OT_SHAPE
  |  |   47|  33.3k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  120|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  |  |  ------------------
  |  |   48|  33.3k|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|  33.3k|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|  33.3k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  120|  33.3k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.fini ();
  |  |  ------------------
  |  |   62|  33.3k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|  33.3k|#endif
  ------------------
  122|  33.3k|#undef HB_SHAPER_IMPLEMENT
  123|  33.3k|  }
_ZN23hb_shaper_lazy_loader_tI9hb_face_tLj1E17hb_ot_face_data_tE8get_nullEv:
  101|   648k|	  static Type *get_null () { return nullptr; } \
_ZN23hb_shaper_lazy_loader_tI9hb_face_tLj1E17hb_ot_face_data_tE7destroyEPS1_:
  102|  33.1k|	  static void destroy (Type *p) { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (p); } \
  ------------------
  |  |   74|  33.1k|#define HB_SHAPER_DATA_DESTROY_FUNC(shaper, object)	_hb_##shaper##_shaper_##object##_data_destroy
  ------------------
_ZN23hb_shaper_lazy_loader_tI9hb_face_tLj2E23hb_fallback_face_data_tE8get_nullEv:
  101|    306|	  static Type *get_null () { return nullptr; } \
_ZN26hb_shaper_object_dataset_tI9hb_font_tE5init0EPS0_:
  112|  33.2k|  {
  113|  33.2k|    this->parent_data = parent_data;
  114|  33.2k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  115|  33.2k|#include "hb-shaper-list.hh"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Copyright © 2012  Google, Inc.
  |  |    3|       | *
  |  |    4|       | *  This is part of HarfBuzz, a text shaping library.
  |  |    5|       | *
  |  |    6|       | * Permission is hereby granted, without written agreement and without
  |  |    7|       | * license or royalty fees, to use, copy, modify, and distribute this
  |  |    8|       | * software and its documentation for any purpose, provided that the
  |  |    9|       | * above copyright notice and the following two paragraphs appear in
  |  |   10|       | * all copies of this software.
  |  |   11|       | *
  |  |   12|       | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  |  |   13|       | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  |  |   14|       | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  |  |   15|       | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  |  |   16|       | * DAMAGE.
  |  |   17|       | *
  |  |   18|       | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  |  |   19|       | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  |  |   20|       | * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  |  |   21|       | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  |  |   22|       | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  |  |   23|       | *
  |  |   24|       | * Google Author(s): Behdad Esfahbod
  |  |   25|       | */
  |  |   26|       |
  |  |   27|       |#ifndef HB_SHAPER_LIST_HH
  |  |   28|       |#define HB_SHAPER_LIST_HH
  |  |   29|       |#endif /* HB_SHAPER_LIST_HH */ /* Dummy header guards */
  |  |   30|       |
  |  |   31|  33.2k|#ifndef HB_NO_SHAPER
  |  |   32|       |
  |  |   33|       |
  |  |   34|       |/* v--- Add new shapers in the right place here. */
  |  |   35|       |
  |  |   36|       |#ifdef HAVE_WASM
  |  |   37|       |/* Only picks up fonts that have a "Wasm" table. */
  |  |   38|       |HB_SHAPER_IMPLEMENT (wasm)
  |  |   39|       |#endif
  |  |   40|       |
  |  |   41|       |#ifdef HAVE_GRAPHITE2
  |  |   42|       |/* Only picks up fonts that have a "Silf" table. */
  |  |   43|       |HB_SHAPER_IMPLEMENT (graphite2)
  |  |   44|       |#endif
  |  |   45|       |
  |  |   46|  33.2k|#ifndef HB_NO_OT_SHAPE
  |  |   47|  33.2k|HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main shaper. */
  |  |  ------------------
  |  |  |  |  114|  33.2k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  |  |  ------------------
  |  |   48|  33.2k|#endif
  |  |   49|       |
  |  |   50|       |#ifdef HAVE_UNISCRIBE
  |  |   51|       |HB_SHAPER_IMPLEMENT (uniscribe)
  |  |   52|       |#endif
  |  |   53|       |#ifdef HAVE_DIRECTWRITE
  |  |   54|       |HB_SHAPER_IMPLEMENT (directwrite)
  |  |   55|       |#endif
  |  |   56|       |#ifdef HAVE_CORETEXT
  |  |   57|       |HB_SHAPER_IMPLEMENT (coretext)
  |  |   58|       |#endif
  |  |   59|       |
  |  |   60|  33.2k|#ifndef HB_NO_FALLBACK_SHAPE
  |  |   61|  33.2k|HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
  |  |  ------------------
  |  |  |  |  114|  33.2k|#define HB_SHAPER_IMPLEMENT(shaper) shaper.init0 ();
  |  |  ------------------
  |  |   62|  33.2k|#endif
  |  |   63|       |
  |  |   64|       |
  |  |   65|  33.2k|#endif
  ------------------
  116|  33.2k|#undef HB_SHAPER_IMPLEMENT
  117|  33.2k|  }
_ZN23hb_shaper_lazy_loader_tI9hb_font_tLj1E17hb_ot_font_data_tE6createEPS0_:
  100|  33.0k|	  { return HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (data); } \
  ------------------
  |  |   73|  33.0k|#define HB_SHAPER_DATA_CREATE_FUNC(shaper, object)	_hb_##shaper##_shaper_##object##_data_create
  ------------------
_ZN23hb_shaper_lazy_loader_tI9hb_face_tLj1E17hb_ot_face_data_tE6createEPS0_:
  100|  33.1k|	  { return HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (data); } \
  ------------------
  |  |   73|  33.1k|#define HB_SHAPER_DATA_CREATE_FUNC(shaper, object)	_hb_##shaper##_shaper_##object##_data_create
  ------------------

_ZNK9hb_face_t15load_num_glyphsEv:
   94|  33.2k|{
   95|  33.2k|  unsigned ret = 0;
   96|       |
   97|  33.2k|#ifndef HB_NO_BEYOND_64K
   98|  33.2k|  ret = hb_max (ret, load_num_glyphs_from_loca (this));
   99|  33.2k|#endif
  100|       |
  101|  33.2k|  ret = hb_max (ret, load_num_glyphs_from_maxp (this));
  102|       |
  103|  33.2k|  num_glyphs = ret;
  104|  33.2k|  return ret;
  105|  33.2k|}
_ZNK9hb_face_t9load_upemEv:
  109|  33.2k|{
  110|  33.2k|  unsigned int ret = table.head->get_upem ();
  111|  33.2k|  upem = ret;
  112|  33.2k|  return ret;
  113|  33.2k|}
_Z35_glyf_get_advance_with_var_unscaledP9hb_font_tjb:
  126|  4.63k|{
  127|  4.63k|  return font->face->table.glyf->get_advance_with_var_unscaled (font, glyph, is_vertical);
  128|  4.63k|}
hb-common.cc:_ZL25load_num_glyphs_from_locaPK9hb_face_t:
   70|  33.2k|{
   71|  33.2k|  unsigned ret = 0;
   72|       |
   73|  33.2k|  unsigned indexToLocFormat = face->table.head->indexToLocFormat;
   74|       |
   75|  33.2k|  if (indexToLocFormat <= 1)
  ------------------
  |  Branch (75:7): [True: 33.2k, False: 13]
  ------------------
   76|  33.2k|  {
   77|  33.2k|    bool short_offset = 0 == indexToLocFormat;
   78|  33.2k|    hb_blob_t *loca_blob = face->table.loca.get_blob ();
   79|  33.2k|    ret = hb_max (1u, loca_blob->length / (short_offset ? 2 : 4)) - 1;
  ------------------
  |  Branch (79:44): [True: 33.2k, False: 19]
  ------------------
   80|  33.2k|  }
   81|       |
   82|  33.2k|  return ret;
   83|  33.2k|}
hb-common.cc:_ZL25load_num_glyphs_from_maxpPK9hb_face_t:
   88|  33.2k|{
   89|  33.2k|  return face->table.maxp->get_num_glyphs ();
   90|  33.2k|}

hb-ot-font.cc:_ZL13format1_namesj:
   74|  2.31M|{
   75|  2.31M|  assert (i < ARRAY_LENGTH (HB_STRING_ARRAY_OFFS_NAME) - 1);
   76|  2.31M|  return hb_bytes_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
  ------------------
  |  |   38|  2.31M|#define HB_STRING_ARRAY_POOL_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgstr)
  |  |  ------------------
  |  |  |  |  215|  2.31M|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  2.31M|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                return hb_bytes_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
  ------------------
  |  |   39|  2.31M|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  2.31M|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  2.31M|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|  2.31M|		     HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
  ------------------
  |  |   39|  2.31M|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  2.31M|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  2.31M|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		     HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
  ------------------
  |  |   39|  2.31M|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  2.31M|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  2.31M|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|  2.31M|}
hb-ot-font.cc:_ZL16cff1_std_stringsj:
   74|  50.3k|{
   75|  50.3k|  assert (i < ARRAY_LENGTH (HB_STRING_ARRAY_OFFS_NAME) - 1);
   76|  50.3k|  return hb_bytes_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
  ------------------
  |  |   38|  50.3k|#define HB_STRING_ARRAY_POOL_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgstr)
  |  |  ------------------
  |  |  |  |  215|  50.3k|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  50.3k|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                return hb_bytes_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
  ------------------
  |  |   39|  50.3k|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  50.3k|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  50.3k|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|  50.3k|		     HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
  ------------------
  |  |   39|  50.3k|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  50.3k|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  50.3k|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		     HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
  ------------------
  |  |   39|  50.3k|#define HB_STRING_ARRAY_OFFS_NAME	HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
  |  |  ------------------
  |  |  |  |  215|  50.3k|#define HB_PASTE(a,b) HB_PASTE1(a,b)
  |  |  |  |  ------------------
  |  |  |  |  |  |  214|  50.3k|#define HB_PASTE1(a,b) a##b
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|  50.3k|}

hb-ucd.cc:_ZL11_hb_ucd_cccj:
 2804|  26.9k|{
 2805|  26.9k|  return u<125259u?_hb_ucd_u8[8792+(((_hb_ucd_u8[8236+(((_hb_ucd_u8[7776+(((_hb_ucd_u8[7424+(((_hb_ucd_u8[7178+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0;
  ------------------
  |  Branch (2805:10): [True: 26.6k, False: 317]
  ------------------
 2806|  26.9k|}
hb-ucd.cc:_ZL10_hb_ucd_gcj:
 2799|  1.66M|{
 2800|  1.66M|  return u<1114110u?_hb_ucd_u8[6800+(((_hb_ucd_u8[1312+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2;
  ------------------
  |  Branch (2800:10): [True: 1.66M, False: 49]
  ------------------
 2801|  1.66M|}
hb-ucd.cc:_ZL11_hb_ucd_bmgj:
 2814|  48.0k|{
 2815|  48.0k|  return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9540+(((_hb_ucd_u8[9420+(((_hb_ucd_b4(9292+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0;
  ------------------
  |  Branch (2815:10): [True: 23.2k, False: 24.8k]
  ------------------
 2816|  48.0k|}
hb-ucd.cc:_ZL10_hb_ucd_b4PKhj:
 2809|  23.2k|{
 2810|  23.2k|  return (a[i>>1]>>((i&1u)<<2))&15u;
 2811|  23.2k|}
hb-ucd.cc:_ZL10_hb_ucd_scj:
 2819|   221k|{
 2820|   221k|  return u<918000u?_hb_ucd_u8[11062+(((_hb_ucd_u16[2040+(((_hb_ucd_u8[10326+(((_hb_ucd_u8[9876+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2;
  ------------------
  |  Branch (2820:10): [True: 220k, False: 981]
  ------------------
 2821|   221k|}
hb-ucd.cc:_ZL10_hb_ucd_dmj:
 2824|  1.58M|{
 2825|  1.58M|  return u<195102u?_hb_ucd_u16[6008+(((_hb_ucd_u8[17068+(((_hb_ucd_u8[16686+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0;
  ------------------
  |  Branch (2825:10): [True: 1.56M, False: 19.5k]
  ------------------
 2826|  1.58M|}

hb_ucd_get_unicode_funcs:
  253|   154k|{
  254|       |#ifdef HB_NO_UCD
  255|       |  return hb_unicode_funcs_get_empty ();
  256|       |#endif
  257|   154k|  return static_ucd_funcs.get_unconst ();
  258|   154k|}
_ZN34hb_ucd_unicode_funcs_lazy_loader_t6createEv:
  227|      1|  {
  228|      1|    hb_unicode_funcs_t *funcs = hb_unicode_funcs_create (nullptr);
  229|       |
  230|      1|    hb_unicode_funcs_set_combining_class_func (funcs, hb_ucd_combining_class, nullptr, nullptr);
  231|      1|    hb_unicode_funcs_set_general_category_func (funcs, hb_ucd_general_category, nullptr, nullptr);
  232|      1|    hb_unicode_funcs_set_mirroring_func (funcs, hb_ucd_mirroring, nullptr, nullptr);
  233|      1|    hb_unicode_funcs_set_script_func (funcs, hb_ucd_script, nullptr, nullptr);
  234|      1|    hb_unicode_funcs_set_compose_func (funcs, hb_ucd_compose, nullptr, nullptr);
  235|      1|    hb_unicode_funcs_set_decompose_func (funcs, hb_ucd_decompose, nullptr, nullptr);
  236|       |
  237|      1|    hb_unicode_funcs_make_immutable (funcs);
  238|       |
  239|      1|    hb_atexit (free_static_ucd_funcs);
  ------------------
  |  |  466|      1|#    define hb_atexit atexit
  ------------------
  240|       |
  241|      1|    return funcs;
  242|      1|  }
hb-ucd.cc:_ZL22hb_ucd_combining_classP18hb_unicode_funcs_tjPv:
   27|  26.9k|{
   28|  26.9k|  return (hb_unicode_combining_class_t) _hb_ucd_ccc (unicode);
   29|  26.9k|}
hb-ucd.cc:_ZL23hb_ucd_general_categoryP18hb_unicode_funcs_tjPv:
   35|  1.66M|{
   36|  1.66M|  return (hb_unicode_general_category_t) _hb_ucd_gc (unicode);
   37|  1.66M|}
hb-ucd.cc:_ZL16hb_ucd_mirroringP18hb_unicode_funcs_tjPv:
   43|  48.0k|{
   44|  48.0k|  return unicode + _hb_ucd_bmg (unicode);
   45|  48.0k|}
hb-ucd.cc:_ZL13hb_ucd_scriptP18hb_unicode_funcs_tjPv:
   51|   221k|{
   52|   221k|  return _hb_ucd_sc_map[_hb_ucd_sc (unicode)];
   53|   221k|}
hb-ucd.cc:_ZL14hb_ucd_composeP18hb_unicode_funcs_tjjPjPv:
  131|  20.1k|{
  132|       |  // Hangul is handled algorithmically.
  133|  20.1k|  if (_hb_ucd_compose_hangul (a, b, ab)) return true;
  ------------------
  |  Branch (133:7): [True: 0, False: 20.1k]
  ------------------
  134|       |
  135|  20.1k|  hb_codepoint_t u = 0;
  136|       |
  137|  20.1k|  if ((a & 0xFFFFF800u) == 0x0000u && (b & 0xFFFFFF80) == 0x0300u)
  ------------------
  |  Branch (137:7): [True: 3.53k, False: 16.6k]
  |  Branch (137:39): [True: 1.25k, False: 2.27k]
  ------------------
  138|  1.25k|  {
  139|       |    /* If "a" is small enough and "b" is in the U+0300 range,
  140|       |     * the composition data is encoded in a 32bit array sorted
  141|       |     * by "a,b" pair. */
  142|  1.25k|    uint32_t k = HB_CODEPOINT_ENCODE3_11_7_14 (a, b, 0);
  ------------------
  |  |  218|  1.25k|#define HB_CODEPOINT_ENCODE3_11_7_14(x,y,z) (((uint32_t) ((x) & 0x07FFu) << 21) | (((uint32_t) (y) & 0x007Fu) << 14) | (uint32_t) ((z) & 0x3FFFu))
  ------------------
  143|  1.25k|    const uint32_t *v = hb_bsearch (k,
  144|  1.25k|				    _hb_ucd_dm2_u32_map,
  145|  1.25k|				    ARRAY_LENGTH (_hb_ucd_dm2_u32_map),
  146|  1.25k|				    sizeof (*_hb_ucd_dm2_u32_map),
  147|  1.25k|				    _cmp_pair_11_7_14);
  148|  1.25k|    if (likely (!v)) return false;
  ------------------
  |  |  258|  1.25k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 783, False: 475]
  |  |  ------------------
  ------------------
  149|    475|    u = HB_CODEPOINT_DECODE3_11_7_14_3 (*v);
  ------------------
  |  |  221|    475|#define HB_CODEPOINT_DECODE3_11_7_14_3(v) ((hb_codepoint_t) (v) & 0x3FFFu)
  ------------------
  150|    475|  }
  151|  18.9k|  else
  152|  18.9k|  {
  153|       |    /* Otherwise it is stored in a 64bit array sorted by
  154|       |     * "a,b" pair. */
  155|  18.9k|    uint64_t k = HB_CODEPOINT_ENCODE3 (a, b, 0);
  ------------------
  |  |  212|  18.9k|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  156|  18.9k|    const uint64_t *v = hb_bsearch (k,
  157|  18.9k|				    _hb_ucd_dm2_u64_map,
  158|  18.9k|				    ARRAY_LENGTH (_hb_ucd_dm2_u64_map),
  159|  18.9k|				    sizeof (*_hb_ucd_dm2_u64_map),
  160|  18.9k|				    _cmp_pair);
  161|  18.9k|    if (likely (!v)) return false;
  ------------------
  |  |  258|  18.9k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 18.3k, False: 589]
  |  |  ------------------
  ------------------
  162|    589|    u = HB_CODEPOINT_DECODE3_3 (*v);
  ------------------
  |  |  215|    589|#define HB_CODEPOINT_DECODE3_3(v) ((hb_codepoint_t) (v) & 0x1FFFFFu)
  ------------------
  163|    589|  }
  164|       |
  165|  1.06k|  if (unlikely (!u)) return false;
  ------------------
  |  |  259|  1.06k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 203, False: 861]
  |  |  ------------------
  ------------------
  166|    861|  *ab = u;
  167|    861|  return true;
  168|  1.06k|}
hb-ucd.cc:_ZL22_hb_ucd_compose_hanguljjPj:
   90|  20.1k|{
   91|  20.1k|  if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   56|  40.3k|#define SBASE 0xAC00u
  ------------------
                if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   56|  10.3k|#define SBASE 0xAC00u
  ------------------
                if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   60|  10.3k|#define SCOUNT 11172u
  ------------------
                if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   59|  20.2k|#define TBASE 0x11A7u
  ------------------
                if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   59|     28|#define TBASE 0x11A7u
  ------------------
                if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
  ------------------
  |  |   63|     28|#define TCOUNT 28u
  ------------------
  |  Branch (91:7): [True: 10.3k, False: 9.84k]
  |  Branch (91:21): [True: 64, False: 10.2k]
  |  Branch (91:45): [True: 28, False: 36]
  |  Branch (91:58): [True: 0, False: 28]
  ------------------
   92|  20.1k|    !((a - SBASE) % TCOUNT))
  ------------------
  |  |   56|      0|#define SBASE 0xAC00u
  ------------------
                  !((a - SBASE) % TCOUNT))
  ------------------
  |  |   63|      0|#define TCOUNT 28u
  ------------------
  |  Branch (92:5): [True: 0, False: 0]
  ------------------
   93|      0|  {
   94|       |    /* LV,T */
   95|      0|    *ab = a + (b - TBASE);
  ------------------
  |  |   59|      0|#define TBASE 0x11A7u
  ------------------
   96|      0|    return true;
   97|      0|  }
   98|  20.1k|  else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   57|  40.3k|#define LBASE 0x1100u
  ------------------
                else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   57|  13.1k|#define LBASE 0x1100u
  ------------------
                else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   61|  13.1k|#define LCOUNT 19u
  ------------------
                else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   58|  20.1k|#define VBASE 0x1161u
  ------------------
                else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   58|     10|#define VBASE 0x1161u
  ------------------
                else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
  ------------------
  |  |   62|     10|#define VCOUNT 21u
  ------------------
  |  Branch (98:12): [True: 13.1k, False: 6.97k]
  |  Branch (98:26): [True: 22, False: 13.1k]
  |  Branch (98:50): [True: 10, False: 12]
  |  Branch (98:64): [True: 0, False: 10]
  ------------------
   99|      0|  {
  100|       |    /* L,V */
  101|      0|    int li = a - LBASE;
  ------------------
  |  |   57|      0|#define LBASE 0x1100u
  ------------------
  102|      0|    int vi = b - VBASE;
  ------------------
  |  |   58|      0|#define VBASE 0x1161u
  ------------------
  103|      0|    *ab = SBASE + li * NCOUNT + vi * TCOUNT;
  ------------------
  |  |   56|      0|#define SBASE 0xAC00u
  ------------------
                  *ab = SBASE + li * NCOUNT + vi * TCOUNT;
  ------------------
  |  |   64|      0|#define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   62|      0|#define VCOUNT 21u
  |  |  ------------------
  |  |               #define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   63|      0|#define TCOUNT 28u
  |  |  ------------------
  ------------------
                  *ab = SBASE + li * NCOUNT + vi * TCOUNT;
  ------------------
  |  |   63|      0|#define TCOUNT 28u
  ------------------
  104|      0|    return true;
  105|      0|  }
  106|  20.1k|  else
  107|  20.1k|    return false;
  108|  20.1k|}
hb-ucd.cc:_ZL17_cmp_pair_11_7_14PKvS0_:
  120|  11.4k|{
  121|  11.4k|  uint32_t& a = * (uint32_t*) _key;
  122|  11.4k|  uint32_t b = (* (uint32_t*) _item) & HB_CODEPOINT_ENCODE3_11_7_14(0x1FFFFFu, 0x1FFFFFu, 0);
  ------------------
  |  |  218|  11.4k|#define HB_CODEPOINT_ENCODE3_11_7_14(x,y,z) (((uint32_t) ((x) & 0x07FFu) << 21) | (((uint32_t) (y) & 0x007Fu) << 14) | (uint32_t) ((z) & 0x3FFFu))
  ------------------
  123|       |
  124|  11.4k|  return a < b ? -1 : a > b ? +1 : 0;
  ------------------
  |  Branch (124:10): [True: 5.62k, False: 5.86k]
  |  Branch (124:23): [True: 5.38k, False: 475]
  ------------------
  125|  11.4k|}
hb-ucd.cc:_ZL9_cmp_pairPKvS0_:
  112|   165k|{
  113|   165k|  uint64_t& a = * (uint64_t*) _key;
  114|   165k|  uint64_t b = (* (uint64_t*) _item) & HB_CODEPOINT_ENCODE3(0x1FFFFFu, 0x1FFFFFu, 0);
  ------------------
  |  |  212|   165k|#define HB_CODEPOINT_ENCODE3(x,y,z) (((uint64_t) (x) << 42) | ((uint64_t) (y) << 21) | (uint64_t) (z))
  ------------------
  115|       |
  116|   165k|  return a < b ? -1 : a > b ? +1 : 0;
  ------------------
  |  Branch (116:10): [True: 64.2k, False: 101k]
  |  Branch (116:23): [True: 100k, False: 589]
  ------------------
  117|   165k|}
hb-ucd.cc:_ZL16hb_ucd_decomposeP18hb_unicode_funcs_tjPjS1_Pv:
  174|  1.58M|{
  175|  1.58M|  if (_hb_ucd_decompose_hangul (ab, a, b)) return true;
  ------------------
  |  Branch (175:7): [True: 1.39k, False: 1.58M]
  ------------------
  176|       |
  177|  1.58M|  unsigned i = _hb_ucd_dm (ab);
  178|       |
  179|       |  /* If no data, there's no decomposition. */
  180|  1.58M|  if (likely (!i)) return false;
  ------------------
  |  |  258|  1.58M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.54M, False: 42.4k]
  |  |  ------------------
  ------------------
  181|  42.4k|  i--;
  182|       |
  183|       |  /* Check if it's a single-character decomposition. */
  184|  42.4k|  if (i < ARRAY_LENGTH (_hb_ucd_dm1_p0_map) + ARRAY_LENGTH (_hb_ucd_dm1_p2_map))
  ------------------
  |  Branch (184:7): [True: 723, False: 41.7k]
  ------------------
  185|    723|  {
  186|       |    /* Single-character decompositions currently are only in plane 0 or plane 2. */
  187|    723|    if (i < ARRAY_LENGTH (_hb_ucd_dm1_p0_map))
  ------------------
  |  Branch (187:9): [True: 687, False: 36]
  ------------------
  188|    687|    {
  189|       |      /* Plane 0. */
  190|    687|      *a = _hb_ucd_dm1_p0_map[i];
  191|    687|    }
  192|     36|    else
  193|     36|    {
  194|       |      /* Plane 2. */
  195|     36|      i -= ARRAY_LENGTH (_hb_ucd_dm1_p0_map);
  196|     36|      *a = 0x20000 | _hb_ucd_dm1_p2_map[i];
  197|     36|    }
  198|    723|    *b = 0;
  199|    723|    return true;
  200|    723|  }
  201|  41.7k|  i -= ARRAY_LENGTH (_hb_ucd_dm1_p0_map) + ARRAY_LENGTH (_hb_ucd_dm1_p2_map);
  202|       |
  203|       |  /* Otherwise they are encoded either in a 32bit array or a 64bit array. */
  204|  41.7k|  if (i < ARRAY_LENGTH (_hb_ucd_dm2_u32_map))
  ------------------
  |  Branch (204:7): [True: 39.6k, False: 2.08k]
  ------------------
  205|  39.6k|  {
  206|       |    /* 32bit array. */
  207|  39.6k|    uint32_t v = _hb_ucd_dm2_u32_map[i];
  208|  39.6k|    *a = HB_CODEPOINT_DECODE3_11_7_14_1 (v);
  ------------------
  |  |  219|  39.6k|#define HB_CODEPOINT_DECODE3_11_7_14_1(v) ((hb_codepoint_t) ((v) >> 21))
  ------------------
  209|  39.6k|    *b = HB_CODEPOINT_DECODE3_11_7_14_2 (v);
  ------------------
  |  |  220|  39.6k|#define HB_CODEPOINT_DECODE3_11_7_14_2(v) ((hb_codepoint_t) (((v) >> 14) & 0x007Fu) | 0x0300)
  ------------------
  210|  39.6k|    return true;
  211|  39.6k|  }
  212|  2.08k|  i -= ARRAY_LENGTH (_hb_ucd_dm2_u32_map);
  213|       |
  214|       |  /* 64bit array. */
  215|  2.08k|  uint64_t v = _hb_ucd_dm2_u64_map[i];
  216|  2.08k|  *a = HB_CODEPOINT_DECODE3_1 (v);
  ------------------
  |  |  213|  2.08k|#define HB_CODEPOINT_DECODE3_1(v) ((hb_codepoint_t) ((v) >> 42))
  ------------------
  217|  2.08k|  *b = HB_CODEPOINT_DECODE3_2 (v);
  ------------------
  |  |  214|  2.08k|#define HB_CODEPOINT_DECODE3_2(v) ((hb_codepoint_t) ((v) >> 21) & 0x1FFFFFu)
  ------------------
  218|  2.08k|  return true;
  219|  41.7k|}
hb-ucd.cc:_ZL24_hb_ucd_decompose_hanguljPjS_:
   68|  1.58M|{
   69|  1.58M|  unsigned si = ab - SBASE;
  ------------------
  |  |   56|  1.58M|#define SBASE 0xAC00u
  ------------------
   70|       |
   71|  1.58M|  if (si >= SCOUNT)
  ------------------
  |  |   60|  1.58M|#define SCOUNT 11172u
  ------------------
  |  Branch (71:7): [True: 1.58M, False: 1.39k]
  ------------------
   72|  1.58M|    return false;
   73|       |
   74|  1.39k|  if (si % TCOUNT)
  ------------------
  |  |   63|  1.39k|#define TCOUNT 28u
  ------------------
  |  Branch (74:7): [True: 1.10k, False: 290]
  ------------------
   75|  1.10k|  {
   76|       |    /* LV,T */
   77|  1.10k|    *a = SBASE + (si / TCOUNT) * TCOUNT;
  ------------------
  |  |   56|  1.10k|#define SBASE 0xAC00u
  ------------------
                  *a = SBASE + (si / TCOUNT) * TCOUNT;
  ------------------
  |  |   63|  1.10k|#define TCOUNT 28u
  ------------------
                  *a = SBASE + (si / TCOUNT) * TCOUNT;
  ------------------
  |  |   63|  1.10k|#define TCOUNT 28u
  ------------------
   78|  1.10k|    *b = TBASE + (si % TCOUNT);
  ------------------
  |  |   59|  1.10k|#define TBASE 0x11A7u
  ------------------
                  *b = TBASE + (si % TCOUNT);
  ------------------
  |  |   63|  1.10k|#define TCOUNT 28u
  ------------------
   79|  1.10k|    return true;
   80|  1.10k|  } else {
   81|       |    /* L,V */
   82|    290|    *a = LBASE + (si / NCOUNT);
  ------------------
  |  |   57|    290|#define LBASE 0x1100u
  ------------------
                  *a = LBASE + (si / NCOUNT);
  ------------------
  |  |   64|    290|#define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   62|    290|#define VCOUNT 21u
  |  |  ------------------
  |  |               #define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   63|    290|#define TCOUNT 28u
  |  |  ------------------
  ------------------
   83|    290|    *b = VBASE + (si % NCOUNT) / TCOUNT;
  ------------------
  |  |   58|    290|#define VBASE 0x1161u
  ------------------
                  *b = VBASE + (si % NCOUNT) / TCOUNT;
  ------------------
  |  |   64|    290|#define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   62|    290|#define VCOUNT 21u
  |  |  ------------------
  |  |               #define NCOUNT (VCOUNT * TCOUNT)
  |  |  ------------------
  |  |  |  |   63|    290|#define TCOUNT 28u
  |  |  ------------------
  ------------------
                  *b = VBASE + (si % NCOUNT) / TCOUNT;
  ------------------
  |  |   63|    290|#define TCOUNT 28u
  ------------------
   84|    290|    return true;
   85|    290|  }
   86|  1.39k|}
hb-ucd.cc:_ZL21free_static_ucd_funcsv:
  247|      1|{
  248|      1|  static_ucd_funcs.free_instance ();
  249|      1|}

hb-unicode.cc:_ZL34_hb_emoji_is_Extended_Pictographicj:
   72|  1.66k|{
   73|  1.66k|  return u<131070u?_hb_emoji_b1(264+_hb_emoji_u8,((_hb_emoji_u8[144+(((_hb_emoji_u8[64+(((_hb_emoji_b4(_hb_emoji_u8,u>>5>>2>>3))<<3)+((u>>5>>2)&7u))])<<2)+((u>>5)&3u))])<<5)+((u)&31u)):0;
  ------------------
  |  Branch (73:10): [True: 1.64k, False: 22]
  ------------------
   74|  1.66k|}
hb-unicode.cc:_ZL12_hb_emoji_b1PKhj:
   67|  1.64k|{
   68|  1.64k|  return (a[i>>3]>>((i&7u)<<0))&1u;
   69|  1.64k|}
hb-unicode.cc:_ZL12_hb_emoji_b4PKhj:
   62|  1.64k|{
   63|  1.64k|  return (a[i>>1]>>((i&1u)<<2))&15u;
   64|  1.64k|}

hb_unicode_funcs_get_default:
  153|   154k|{
  154|   154k|#if !defined(HB_NO_UNICODE_FUNCS) && !defined(HB_NO_UCD)
  155|   154k|  return hb_ucd_get_unicode_funcs ();
  156|       |#elif !defined(HB_NO_UNICODE_FUNCS) && defined(HAVE_GLIB)
  157|       |  return hb_glib_get_unicode_funcs ();
  158|       |#elif !defined(HB_NO_UNICODE_FUNCS) && defined(HAVE_ICU) && defined(HAVE_ICU_BUILTIN)
  159|       |  return hb_icu_get_unicode_funcs ();
  160|       |#else
  161|       |#define HB_UNICODE_FUNCS_NIL 1
  162|       |  return hb_unicode_funcs_get_empty ();
  163|       |#endif
  164|   154k|}
hb_unicode_funcs_create:
  183|      1|{
  184|      1|  hb_unicode_funcs_t *ufuncs;
  185|       |
  186|      1|  if (!(ufuncs = hb_object_create<hb_unicode_funcs_t> ()))
  ------------------
  |  Branch (186:7): [True: 0, False: 1]
  ------------------
  187|      0|    return hb_unicode_funcs_get_empty ();
  188|       |
  189|      1|  if (!parent)
  ------------------
  |  Branch (189:7): [True: 1, False: 0]
  ------------------
  190|      1|    parent = hb_unicode_funcs_get_empty ();
  191|       |
  192|      1|  hb_unicode_funcs_make_immutable (parent);
  193|      1|  ufuncs->parent = hb_unicode_funcs_reference (parent);
  194|       |
  195|      1|  ufuncs->func = parent->func;
  196|       |
  197|       |  /* We can safely copy user_data from parent since we hold a reference
  198|       |   * onto it and it's immutable.  We should not copy the destroy notifiers
  199|       |   * though. */
  200|      1|  ufuncs->user_data = parent->user_data;
  201|       |
  202|      1|  return ufuncs;
  203|      1|}
hb_unicode_funcs_get_empty:
  229|      2|{
  230|      2|  return const_cast<hb_unicode_funcs_t *> (&Null (hb_unicode_funcs_t));
  ------------------
  |  |  124|      2|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  231|      2|}
hb_unicode_funcs_reference:
  245|   213k|{
  246|   213k|  return hb_object_reference (ufuncs);
  247|   213k|}
hb_unicode_funcs_destroy:
  261|   368k|{
  262|   368k|  if (!hb_object_destroy (ufuncs)) return;
  ------------------
  |  Branch (262:7): [True: 368k, False: 0]
  ------------------
  263|       |
  264|      0|#define HB_UNICODE_FUNC_IMPLEMENT(name) \
  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  266|   368k|    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
  ------------------
  |  |   44|      0|  HB_UNICODE_FUNC_IMPLEMENT (combining_class) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|      0|  HB_IF_NOT_DEPRECATED (HB_UNICODE_FUNC_IMPLEMENT (eastasian_width)) \
  |  |  ------------------
  |  |  |  |  125|      0|#define HB_IF_NOT_DEPRECATED(x) x
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      0|  HB_UNICODE_FUNC_IMPLEMENT (general_category) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|      0|  HB_UNICODE_FUNC_IMPLEMENT (mirroring) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   48|      0|  HB_UNICODE_FUNC_IMPLEMENT (script) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|  HB_UNICODE_FUNC_IMPLEMENT (compose) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      0|  HB_UNICODE_FUNC_IMPLEMENT (decompose) \
  |  |  ------------------
  |  |  |  |  265|      0|  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (265:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      0|  HB_IF_NOT_DEPRECATED (HB_UNICODE_FUNC_IMPLEMENT (decompose_compatibility)) \
  |  |  ------------------
  |  |  |  |  125|   368k|#define HB_IF_NOT_DEPRECATED(x) x
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (125:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|      0|#undef HB_UNICODE_FUNC_IMPLEMENT
  268|       |
  269|      0|  hb_unicode_funcs_destroy (ufuncs->parent);
  270|       |
  271|      0|  hb_free (ufuncs);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  272|      0|}
hb_unicode_funcs_make_immutable:
  329|      2|{
  330|      2|  if (hb_object_is_immutable (ufuncs))
  ------------------
  |  Branch (330:7): [True: 1, False: 1]
  ------------------
  331|      1|    return;
  332|       |
  333|      1|  hb_object_make_immutable (ufuncs);
  334|      1|}
hb_unicode_funcs_set_combining_class_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
hb_unicode_funcs_set_general_category_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
hb_unicode_funcs_set_mirroring_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
hb_unicode_funcs_set_script_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
hb_unicode_funcs_set_compose_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
hb_unicode_funcs_set_decompose_func:
  377|      1|				    hb_destroy_func_t		    destroy)	\
  378|      1|{										\
  379|      1|  if (hb_object_is_immutable (ufuncs))						\
  ------------------
  |  Branch (379:7): [True: 0, False: 1]
  ------------------
  380|      1|    goto fail;									\
  381|      1|										\
  382|      1|  if (!func)									\
  ------------------
  |  Branch (382:7): [True: 0, False: 1]
  ------------------
  383|      1|  {										\
  384|      0|    if (destroy)								\
  ------------------
  |  Branch (384:9): [True: 0, False: 0]
  ------------------
  385|      0|      destroy (user_data);							\
  386|      0|    destroy = nullptr;								\
  387|      0|    user_data = ufuncs->parent->user_data.name;					\
  388|      0|  }										\
  389|      1|										\
  390|      1|  if (ufuncs->destroy.name)							\
  ------------------
  |  Branch (390:7): [True: 0, False: 1]
  ------------------
  391|      1|    ufuncs->destroy.name (ufuncs->user_data.name);				\
  392|      1|										\
  393|      1|  if (func)									\
  ------------------
  |  Branch (393:7): [True: 1, False: 0]
  ------------------
  394|      1|    ufuncs->func.name = func;							\
  395|      1|  else										\
  396|      1|    ufuncs->func.name = ufuncs->parent->func.name;				\
  397|      1|  ufuncs->user_data.name = user_data;						\
  398|      1|  ufuncs->destroy.name = destroy;						\
  399|      1|  return;									\
  400|      1|										\
  401|      0|fail:										\
  402|      0|  if (destroy)									\
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    destroy (user_data);							\
  404|      0|}
_Z42_hb_unicode_is_emoji_Extended_Pictographicj:
  622|  1.66k|{
  623|  1.66k|  return _hb_emoji_is_Extended_Pictographic (cp);
  624|  1.66k|}

_ZN18hb_unicode_funcs_t15combining_classEj:
   70|  26.9k|  return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
_ZN18hb_unicode_funcs_t16general_categoryEj:
   70|  1.66M|  return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
_ZN18hb_unicode_funcs_t9mirroringEj:
   70|  48.0k|  return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
_ZN18hb_unicode_funcs_t6scriptEj:
   70|   221k|  return_type name (hb_codepoint_t unicode) { return func.name (this, unicode, user_data.name); }
_ZN18hb_unicode_funcs_t7composeEjjPj:
   76|  21.0k|  {
   77|  21.0k|    *ab = 0;
   78|  21.0k|    if (unlikely (!a || !b)) return false;
  ------------------
  |  |  259|  41.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 837, False: 20.1k]
  |  |  |  Branch (259:47): [True: 837, False: 20.1k]
  |  |  |  Branch (259:47): [True: 0, False: 20.1k]
  |  |  ------------------
  ------------------
   79|  20.1k|    return func.compose (this, a, b, ab, user_data.compose);
   80|  21.0k|  }
_ZN18hb_unicode_funcs_t9decomposeEjPjS0_:
   84|  1.58M|  {
   85|  1.58M|    *a = ab; *b = 0;
   86|  1.58M|    return func.decompose (this, ab, a, b, user_data.decompose);
   87|  1.58M|  }
_ZN18hb_unicode_funcs_t24modified_combining_classEj:
  107|  27.1k|  {
  108|       |    /* Reorder SAKOT to ensure it comes after any tone marks. */
  109|  27.1k|    if (unlikely (u == 0x1A60u)) return 254;
  ------------------
  |  |  259|  27.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 116, False: 27.0k]
  |  |  ------------------
  ------------------
  110|       |    /* Reorder PADMA to ensure it comes after any vowel marks. */
  111|  27.0k|    if (unlikely (u == 0x0FC6u)) return 254;
  ------------------
  |  |  259|  27.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 10, False: 26.9k]
  |  |  ------------------
  ------------------
  112|       |    /* Reorder TSA -PHRU to reorder before U+0F74 */
  113|  26.9k|    if (unlikely (u == 0x0F39u)) return 127;
  ------------------
  |  |  259|  26.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 11, False: 26.9k]
  |  |  ------------------
  ------------------
  114|       |
  115|  26.9k|    return _hb_modified_combining_class[combining_class (u)];
  116|  26.9k|  }
_ZN18hb_unicode_funcs_t21is_variation_selectorEj:
  120|  43.9k|  {
  121|       |    /* U+180B..180D, U+180F MONGOLIAN FREE VARIATION SELECTORs are handled in the
  122|       |     * Arabic shaper.  No need to match them here. */
  123|  43.9k|    return unlikely (hb_in_ranges<hb_codepoint_t> (unicode,
  ------------------
  |  |  259|  43.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  ------------------
  124|  43.9k|						   0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
  125|  43.9k|						   0xE0100u, 0xE01EFu));  /* VARIATION SELECTOR-17..256 */
  126|  43.9k|  }
_ZN18hb_unicode_funcs_t20is_default_ignorableEj:
  168|   407k|  {
  169|   407k|    hb_codepoint_t plane = ch >> 16;
  170|   407k|    if (likely (plane == 0))
  ------------------
  |  |  258|   407k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 371k, False: 35.8k]
  |  |  ------------------
  ------------------
  171|   371k|    {
  172|       |      /* BMP */
  173|   371k|      hb_codepoint_t page = ch >> 8;
  174|   371k|      switch (page) {
  175|  33.3k|	case 0x00: return unlikely (ch == 0x00ADu);
  ------------------
  |  |  259|  33.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  ------------------
  |  Branch (175:2): [True: 33.3k, False: 338k]
  ------------------
  176|  5.74k|	case 0x03: return unlikely (ch == 0x034Fu);
  ------------------
  |  |  259|  5.74k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  ------------------
  |  Branch (176:2): [True: 5.74k, False: 365k]
  ------------------
  177|  1.13k|	case 0x06: return unlikely (ch == 0x061Cu);
  ------------------
  |  |  259|  1.13k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  ------------------
  |  Branch (177:2): [True: 1.13k, False: 370k]
  ------------------
  178|    862|	case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4u, 0x17B5u);
  ------------------
  |  Branch (178:2): [True: 862, False: 370k]
  ------------------
  179|    621|	case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180Bu, 0x180Eu);
  ------------------
  |  Branch (179:2): [True: 621, False: 371k]
  ------------------
  180|  6.37k|	case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200Bu, 0x200Fu,
  ------------------
  |  Branch (180:2): [True: 6.37k, False: 365k]
  ------------------
  181|  6.37k|					    0x202Au, 0x202Eu,
  182|  6.37k|					    0x2060u, 0x206Fu);
  183|  1.30k|	case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
  ------------------
  |  Branch (183:2): [True: 1.30k, False: 370k]
  |  Branch (183:20): [True: 1.06k, False: 245]
  |  Branch (183:74): [True: 66, False: 179]
  ------------------
  184|   268k|	case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0u, 0xFFF8u);
  ------------------
  |  Branch (184:2): [True: 268k, False: 102k]
  ------------------
  185|  53.4k|	default: return false;
  ------------------
  |  Branch (185:2): [True: 53.4k, False: 318k]
  ------------------
  186|   371k|      }
  187|   371k|    }
  188|  35.8k|    else
  189|  35.8k|    {
  190|       |      /* Other planes */
  191|  35.8k|      switch (plane) {
  192|  10.4k|	case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x1D173u, 0x1D17Au);
  ------------------
  |  Branch (192:2): [True: 10.4k, False: 25.4k]
  ------------------
  193|  1.22k|	case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0xE0000u, 0xE0FFFu);
  ------------------
  |  Branch (193:2): [True: 1.22k, False: 34.6k]
  ------------------
  194|  24.2k|	default: return false;
  ------------------
  |  Branch (194:2): [True: 24.2k, False: 11.6k]
  ------------------
  195|  35.8k|      }
  196|  35.8k|    }
  197|   407k|  }
_ZN18hb_unicode_funcs_t19space_fallback_typeEj:
  220|  1.91k|  {
  221|  1.91k|    switch (u)
  222|  1.91k|    {
  223|       |      /* All GC=Zs chars that can use a fallback. */
  224|     10|      default:	    return NOT_SPACE;	/* U+1680 OGHAM SPACE MARK */
  ------------------
  |  Branch (224:7): [True: 10, False: 1.90k]
  ------------------
  225|    315|      case 0x0020u: return SPACE;	/* U+0020 SPACE */
  ------------------
  |  Branch (225:7): [True: 315, False: 1.60k]
  ------------------
  226|     90|      case 0x00A0u: return SPACE;	/* U+00A0 NO-BREAK SPACE */
  ------------------
  |  Branch (226:7): [True: 90, False: 1.82k]
  ------------------
  227|    356|      case 0x2000u: return SPACE_EM_2;	/* U+2000 EN QUAD */
  ------------------
  |  Branch (227:7): [True: 356, False: 1.56k]
  ------------------
  228|     56|      case 0x2001u: return SPACE_EM;	/* U+2001 EM QUAD */
  ------------------
  |  Branch (228:7): [True: 56, False: 1.86k]
  ------------------
  229|     23|      case 0x2002u: return SPACE_EM_2;	/* U+2002 EN SPACE */
  ------------------
  |  Branch (229:7): [True: 23, False: 1.89k]
  ------------------
  230|     24|      case 0x2003u: return SPACE_EM;	/* U+2003 EM SPACE */
  ------------------
  |  Branch (230:7): [True: 24, False: 1.89k]
  ------------------
  231|    463|      case 0x2004u: return SPACE_EM_3;	/* U+2004 THREE-PER-EM SPACE */
  ------------------
  |  Branch (231:7): [True: 463, False: 1.45k]
  ------------------
  232|     81|      case 0x2005u: return SPACE_EM_4;	/* U+2005 FOUR-PER-EM SPACE */
  ------------------
  |  Branch (232:7): [True: 81, False: 1.83k]
  ------------------
  233|     37|      case 0x2006u: return SPACE_EM_6;	/* U+2006 SIX-PER-EM SPACE */
  ------------------
  |  Branch (233:7): [True: 37, False: 1.88k]
  ------------------
  234|     99|      case 0x2007u: return SPACE_FIGURE;	/* U+2007 FIGURE SPACE */
  ------------------
  |  Branch (234:7): [True: 99, False: 1.81k]
  ------------------
  235|    123|      case 0x2008u: return SPACE_PUNCTUATION;	/* U+2008 PUNCTUATION SPACE */
  ------------------
  |  Branch (235:7): [True: 123, False: 1.79k]
  ------------------
  236|     40|      case 0x2009u: return SPACE_EM_5;		/* U+2009 THIN SPACE */
  ------------------
  |  Branch (236:7): [True: 40, False: 1.87k]
  ------------------
  237|     62|      case 0x200Au: return SPACE_EM_16;		/* U+200A HAIR SPACE */
  ------------------
  |  Branch (237:7): [True: 62, False: 1.85k]
  ------------------
  238|     35|      case 0x202Fu: return SPACE_NARROW;	/* U+202F NARROW NO-BREAK SPACE */
  ------------------
  |  Branch (238:7): [True: 35, False: 1.88k]
  ------------------
  239|     23|      case 0x205Fu: return SPACE_4_EM_18;	/* U+205F MEDIUM MATHEMATICAL SPACE */
  ------------------
  |  Branch (239:7): [True: 23, False: 1.89k]
  ------------------
  240|     81|      case 0x3000u: return SPACE_EM;		/* U+3000 IDEOGRAPHIC SPACE */
  ------------------
  |  Branch (240:7): [True: 81, False: 1.83k]
  ------------------
  241|  1.91k|    }
  242|  1.91k|  }

_ZN9hb_utf8_t6strlenEPKh:
  128|  32.4k|  { return ::strlen ((const char *) text); }
_ZN9hb_utf8_t4nextEPKhS1_Pjj:
   45|   598k|  {
   46|       |    /* Written to only accept well-formed sequences.
   47|       |     * Based on ideas from ICU's U8_NEXT.
   48|       |     * Generates one "replacement" for each ill-formed byte. */
   49|       |
   50|   598k|    hb_codepoint_t c = *text++;
   51|       |
   52|   598k|    if (c > 0x7Fu)
  ------------------
  |  Branch (52:9): [True: 0, False: 598k]
  ------------------
   53|      0|    {
   54|      0|      if (hb_in_range<hb_codepoint_t> (c, 0xC2u, 0xDFu)) /* Two-byte */
  ------------------
  |  Branch (54:11): [True: 0, False: 0]
  ------------------
   55|      0|      {
   56|      0|	unsigned int t1;
   57|      0|	if (likely (text < end &&
  ------------------
  |  |  258|      0|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   58|      0|		    (t1 = text[0] - 0x80u) <= 0x3Fu))
   59|      0|	{
   60|      0|	  c = ((c&0x1Fu)<<6) | t1;
   61|      0|	  text++;
   62|      0|	}
   63|      0|	else
   64|      0|	  goto error;
   65|      0|      }
   66|      0|      else if (hb_in_range<hb_codepoint_t> (c, 0xE0u, 0xEFu)) /* Three-byte */
  ------------------
  |  Branch (66:16): [True: 0, False: 0]
  ------------------
   67|      0|      {
   68|      0|	unsigned int t1, t2;
   69|      0|	if (likely (1 < end - text &&
  ------------------
  |  |  258|      0|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   70|      0|		    (t1 = text[0] - 0x80u) <= 0x3Fu &&
   71|      0|		    (t2 = text[1] - 0x80u) <= 0x3Fu))
   72|      0|	{
   73|      0|	  c = ((c&0xFu)<<12) | (t1<<6) | t2;
   74|      0|	  if (unlikely (c < 0x0800u || hb_in_range<hb_codepoint_t> (c, 0xD800u, 0xDFFFu)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   75|      0|	    goto error;
   76|      0|	  text += 2;
   77|      0|	}
   78|      0|	else
   79|      0|	  goto error;
   80|      0|      }
   81|      0|      else if (hb_in_range<hb_codepoint_t> (c, 0xF0u, 0xF4u)) /* Four-byte */
  ------------------
  |  Branch (81:16): [True: 0, False: 0]
  ------------------
   82|      0|      {
   83|      0|	unsigned int t1, t2, t3;
   84|      0|	if (likely (2 < end - text &&
  ------------------
  |  |  258|      0|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  |  Branch (258:45): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   85|      0|		    (t1 = text[0] - 0x80u) <= 0x3Fu &&
   86|      0|		    (t2 = text[1] - 0x80u) <= 0x3Fu &&
   87|      0|		    (t3 = text[2] - 0x80u) <= 0x3Fu))
   88|      0|	{
   89|      0|	  c = ((c&0x7u)<<18) | (t1<<12) | (t2<<6) | t3;
   90|      0|	  if (unlikely (!hb_in_range<hb_codepoint_t> (c, 0x10000u, 0x10FFFFu)))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   91|      0|	    goto error;
   92|      0|	  text += 3;
   93|      0|	}
   94|      0|	else
   95|      0|	  goto error;
   96|      0|      }
   97|      0|      else
   98|      0|	goto error;
   99|      0|    }
  100|       |
  101|   598k|    *unicode = c;
  102|   598k|    return text;
  103|       |
  104|      0|  error:
  105|      0|    *unicode = replacement;
  106|      0|    return text;
  107|   598k|  }
_ZN13hb_utf32_xe_tIjLb1EE4nextEPKjS2_Pjj:
  302|   517k|  {
  303|   517k|    hb_codepoint_t c = *unicode = *text++;
  304|   517k|    if (validate && unlikely (c >= 0xD800u && (c <= 0xDFFFu || c > 0x10FFFFu)))
  ------------------
  |  |  259|  1.44M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 269k, False: 248k]
  |  |  |  Branch (259:47): [True: 223, False: 310k]
  |  |  |  Branch (259:47): [True: 268k, False: 41.3k]
  |  |  |  Branch (259:47): [True: 310k, False: 207k]
  |  |  ------------------
  ------------------
  |  Branch (304:9): [Folded - Ignored]
  ------------------
  305|   269k|      *unicode = replacement;
  306|   517k|    return text;
  307|   517k|  }
_ZN9hb_utf8_t10encode_lenEj:
  132|  58.6k|  {
  133|  58.6k|    if (unicode <   0x0080u) return 1;
  ------------------
  |  Branch (133:9): [True: 26.7k, False: 31.8k]
  ------------------
  134|  31.8k|    if (unicode <   0x0800u) return 2;
  ------------------
  |  Branch (134:9): [True: 3.66k, False: 28.2k]
  ------------------
  135|  28.2k|    if (unicode <  0x10000u) return 3;
  ------------------
  |  Branch (135:9): [True: 28.1k, False: 74]
  ------------------
  136|     74|    if (unicode < 0x110000u) return 4;
  ------------------
  |  Branch (136:9): [True: 74, False: 0]
  ------------------
  137|      0|    return 3;
  138|     74|  }
_ZN9hb_utf8_t6encodeEPhPKhj:
  144|    384|  {
  145|    384|    if (unlikely (unicode >= 0xD800u && (unicode <= 0xDFFFu || unicode > 0x10FFFFu)))
  ------------------
  |  |  259|    540|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 384]
  |  |  |  Branch (259:47): [True: 0, False: 52]
  |  |  |  Branch (259:47): [True: 0, False: 52]
  |  |  |  Branch (259:47): [True: 52, False: 332]
  |  |  ------------------
  ------------------
  146|      0|      unicode = 0xFFFDu;
  147|    384|    if (unicode < 0x0080u)
  ------------------
  |  Branch (147:9): [True: 262, False: 122]
  ------------------
  148|    262|     *text++ = unicode;
  149|    122|    else if (unicode < 0x0800u)
  ------------------
  |  Branch (149:14): [True: 33, False: 89]
  ------------------
  150|     33|    {
  151|     33|      if (end - text >= 2)
  ------------------
  |  Branch (151:11): [True: 29, False: 4]
  ------------------
  152|     29|      {
  153|     29|	*text++ =  0xC0u + (0x1Fu & (unicode >>  6));
  154|     29|	*text++ =  0x80u + (0x3Fu & (unicode      ));
  155|     29|      }
  156|     33|    }
  157|     89|    else if (unicode < 0x10000u)
  ------------------
  |  Branch (157:14): [True: 82, False: 7]
  ------------------
  158|     82|    {
  159|     82|      if (end - text >= 3)
  ------------------
  |  Branch (159:11): [True: 45, False: 37]
  ------------------
  160|     45|      {
  161|     45|	*text++ =  0xE0u + (0x0Fu & (unicode >> 12));
  162|     45|	*text++ =  0x80u + (0x3Fu & (unicode >>  6));
  163|     45|	*text++ =  0x80u + (0x3Fu & (unicode      ));
  164|     45|      }
  165|     82|    }
  166|      7|    else
  167|      7|    {
  168|      7|      if (end - text >= 4)
  ------------------
  |  Branch (168:11): [True: 1, False: 6]
  ------------------
  169|      1|      {
  170|      1|	*text++ =  0xF0u + (0x07u & (unicode >> 18));
  171|      1|	*text++ =  0x80u + (0x3Fu & (unicode >> 12));
  172|      1|	*text++ =  0x80u + (0x3Fu & (unicode >>  6));
  173|      1|	*text++ =  0x80u + (0x3Fu & (unicode      ));
  174|      1|      }
  175|      7|    }
  176|    384|    return text;
  177|    384|  }
_ZN10hb_ascii_t4nextEPKhS1_Pjj:
  413|  16.0k|  {
  414|  16.0k|    *unicode = *text++;
  415|  16.0k|    if (*unicode >= 0x0080u)
  ------------------
  |  Branch (415:9): [True: 1.49k, False: 14.5k]
  ------------------
  416|  1.49k|      *unicode = replacement;
  417|  16.0k|    return text;
  418|  16.0k|  }
_ZN13hb_utf16_xe_tIN2OT7IntTypeItLj2EEEE4nextEPKS2_S5_Pjj:
  193|   161k|  {
  194|   161k|    hb_codepoint_t c = *text++;
  195|       |
  196|   161k|    if (likely (!hb_in_range<hb_codepoint_t> (c, 0xD800u, 0xDFFFu)))
  ------------------
  |  |  258|   161k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 157k, False: 3.20k]
  |  |  ------------------
  ------------------
  197|   157k|    {
  198|   157k|      *unicode = c;
  199|   157k|      return text;
  200|   157k|    }
  201|       |
  202|  3.20k|    if (likely (c <= 0xDBFFu && text < end))
  ------------------
  |  |  258|  5.23k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.02k, False: 1.17k]
  |  |  |  Branch (258:45): [True: 2.02k, False: 1.17k]
  |  |  |  Branch (258:45): [True: 2.02k, False: 3]
  |  |  ------------------
  ------------------
  203|  2.02k|    {
  204|       |      /* High-surrogate in c */
  205|  2.02k|      hb_codepoint_t l = *text;
  206|  2.02k|      if (likely (hb_in_range<hb_codepoint_t> (l, 0xDC00u, 0xDFFFu)))
  ------------------
  |  |  258|  2.02k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 231, False: 1.79k]
  |  |  ------------------
  ------------------
  207|    231|      {
  208|       |	/* Low-surrogate in l */
  209|    231|	*unicode = (c << 10) + l - ((0xD800u << 10) - 0x10000u + 0xDC00u);
  210|    231|	 text++;
  211|    231|	 return text;
  212|    231|      }
  213|  2.02k|    }
  214|       |
  215|       |    /* Lonely / out-of-order surrogate. */
  216|  2.97k|    *unicode = replacement;
  217|  2.97k|    return text;
  218|  3.20k|  }
_ZN13hb_utf16_xe_tItE10encode_lenEj:
  263|  59.0k|  {
  264|  59.0k|    return unicode < 0x10000 ? 1 : 2;
  ------------------
  |  Branch (264:12): [True: 58.9k, False: 75]
  ------------------
  265|  59.0k|  }
_ZN13hb_utf32_xe_tIjLb1EE10encode_lenEj:
  331|  59.0k|  {
  332|  59.0k|    return 1;
  333|  59.0k|  }

_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_range_tELb1EEC2Ev:
   45|  11.1k|  hb_vector_t () = default;
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EEC2Ev:
   45|  22.3k|  hb_vector_t () = default;
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EEC2Ev:
   45|  11.1k|  hb_vector_t () = default;
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EED2Ev:
   86|  11.1k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE4finiEv:
  104|  11.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  11.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 10.0k, False: 1.10k]
  ------------------
  109|  10.0k|    {
  110|  10.0k|      shrink_vector (0);
  111|  10.0k|      hb_free (arrayZ);
  ------------------
  |  |  236|  10.0k|#define hb_free hb_free_impl
  ------------------
  112|  10.0k|    }
  113|  11.1k|    init ();
  114|  11.1k|  }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE13shrink_vectorEj:
  347|  10.0k|  {
  348|  24.6k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 14.5k, False: 10.0k]
  ------------------
  349|  14.5k|    {
  350|  14.5k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  14.5k|      length--;
  352|  14.5k|    }
  353|  10.0k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EED2Ev:
   86|  14.5k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE4finiEv:
  104|  14.5k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  14.5k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 14.5k, False: 0]
  ------------------
  109|  14.5k|    {
  110|  14.5k|      shrink_vector (0);
  111|  14.5k|      hb_free (arrayZ);
  ------------------
  |  |  236|  14.5k|#define hb_free hb_free_impl
  ------------------
  112|  14.5k|    }
  113|  14.5k|    init ();
  114|  14.5k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE13shrink_vectorEj:
  347|  14.5k|  {
  348|  28.4k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 13.8k, False: 14.5k]
  ------------------
  349|  13.8k|    {
  350|  13.8k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  13.8k|      length--;
  352|  13.8k|    }
  353|  14.5k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE4initEv:
   95|  14.5k|  {
   96|  14.5k|    allocated = length = 0;
   97|  14.5k|    arrayZ = nullptr;
   98|  14.5k|  }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE4initEv:
   95|  11.1k|  {
   96|  11.1k|    allocated = length = 0;
   97|  11.1k|    arrayZ = nullptr;
   98|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EED2Ev:
   86|  22.3k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE4finiEv:
  104|  22.3k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  22.3k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 0, False: 22.3k]
  ------------------
  109|      0|    {
  110|      0|      shrink_vector (0);
  111|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  112|      0|    }
  113|  22.3k|    init ();
  114|  22.3k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE4initEv:
   95|  22.3k|  {
   96|  22.3k|    allocated = length = 0;
   97|  22.3k|    arrayZ = nullptr;
   98|  22.3k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_range_tELb1EED2Ev:
   86|  11.1k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_range_tELb1EE4finiEv:
  104|  11.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  11.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 0, False: 11.1k]
  ------------------
  109|      0|    {
  110|      0|      shrink_vector (0);
  111|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  112|      0|    }
  113|  11.1k|    init ();
  114|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_range_tELb1EE4initEv:
   95|  11.1k|  {
   96|  11.1k|    allocated = length = 0;
   97|  11.1k|    arrayZ = nullptr;
   98|  11.1k|  }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE6resizeEibb:
  421|  10.5k|  {
  422|  10.5k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 10.5k]
  ------------------
  423|  10.5k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 526, False: 10.0k]
  ------------------
  424|    526|      return false;
  425|       |
  426|  10.0k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 9.55k, False: 474]
  ------------------
  427|  9.55k|    {
  428|  9.55k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 9.55k, False: 0]
  ------------------
  429|  9.55k|	grow_vector (size);
  430|  9.55k|    }
  431|    474|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 474]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  10.0k|    length = size;
  438|  10.0k|    return true;
  439|  10.5k|  }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE5allocEjb:
  364|  10.5k|  {
  365|  10.5k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.5k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  10.5k|    unsigned int new_allocated;
  369|  10.5k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 10.5k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  10.5k|    else
  380|  10.5k|    {
  381|  10.5k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  10.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 474, False: 10.0k]
  |  |  ------------------
  ------------------
  382|    474|	return true;
  383|       |
  384|  10.0k|      new_allocated = allocated;
  385|  20.1k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 10.0k, False: 10.0k]
  ------------------
  386|  10.0k|	new_allocated += (new_allocated >> 1) + 8;
  387|  10.0k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  10.0k|    bool overflows =
  393|  10.0k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 10.0k]
  ------------------
  394|  10.0k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 10.0k]
  ------------------
  395|  10.0k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 10.0k]
  ------------------
  396|       |
  397|  10.0k|    if (unlikely (overflows))
  ------------------
  |  |  259|  10.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.0k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  10.0k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  10.0k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  20.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 526, False: 9.55k]
  |  |  |  Branch (259:47): [True: 10.0k, False: 0]
  |  |  |  Branch (259:47): [True: 526, False: 9.55k]
  |  |  ------------------
  ------------------
  406|    526|    {
  407|    526|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 526]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    526|      allocated = -1;
  411|    526|      return false;
  412|    526|    }
  413|       |
  414|  9.55k|    arrayZ = new_array;
  415|  9.55k|    allocated = new_allocated;
  416|       |
  417|  9.55k|    return true;
  418|  10.0k|  }
_ZNK11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE8in_errorEv:
  247|  20.6k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE14realloc_vectorIS2_LPv0EEEPS2_j:
  265|  10.0k|  {
  266|  10.0k|    if (!new_allocated)
  ------------------
  |  Branch (266:9): [True: 0, False: 10.0k]
  ------------------
  267|      0|    {
  268|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  269|      0|      return nullptr;
  270|      0|    }
  271|  10.0k|    Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
  ------------------
  |  |  233|  10.0k|#define hb_malloc hb_malloc_impl
  ------------------
  272|  10.0k|    if (likely (new_array))
  ------------------
  |  |  258|  10.0k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 9.55k, False: 526]
  |  |  ------------------
  ------------------
  273|  9.55k|    {
  274|  9.55k|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (274:28): [True: 0, False: 9.55k]
  ------------------
  275|      0|      {
  276|      0|	new (std::addressof (new_array[i])) Type ();
  277|      0|	new_array[i] = std::move (arrayZ[i]);
  278|      0|	arrayZ[i].~Type ();
  279|      0|      }
  280|  9.55k|      hb_free (arrayZ);
  ------------------
  |  |  236|  9.55k|#define hb_free hb_free_impl
  ------------------
  281|  9.55k|    }
  282|  10.0k|    return new_array;
  283|  10.0k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEC2Ev:
   45|  14.5k|  hb_vector_t () = default;
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE11grow_vectorIS2_LPv0EEEvj:
  297|  9.55k|  {
  298|  24.1k|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 14.5k, False: 9.55k]
  ------------------
  299|  14.5k|      new (std::addressof (arrayZ[length])) Type ();
  300|  9.55k|  }
_ZN11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EEixEi:
  158|  14.5k|  {
  159|  14.5k|    unsigned int i = (unsigned int) i_;
  160|  14.5k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  14.5k|    return arrayZ[i];
  163|  14.5k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE4pushIS1_S1_LPv0EEEPS1_OT_:
  234|  14.5k|  {
  235|  14.5k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 725, False: 13.8k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    725|      return &Crap (Type);
  ------------------
  |  |  188|    725|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  13.8k|    length++;
  243|  13.8k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  13.8k|    return new (p) Type (std::forward<T> (v));
  245|  14.5k|  }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE5allocEjb:
  364|  14.5k|  {
  365|  14.5k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  14.5k|    unsigned int new_allocated;
  369|  14.5k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 14.5k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  14.5k|    else
  380|  14.5k|    {
  381|  14.5k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  14.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
  382|      0|	return true;
  383|       |
  384|  14.5k|      new_allocated = allocated;
  385|  29.1k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 14.5k, False: 14.5k]
  ------------------
  386|  14.5k|	new_allocated += (new_allocated >> 1) + 8;
  387|  14.5k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  14.5k|    bool overflows =
  393|  14.5k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 14.5k]
  ------------------
  394|  14.5k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 14.5k]
  ------------------
  395|  14.5k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 14.5k]
  ------------------
  396|       |
  397|  14.5k|    if (unlikely (overflows))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  14.5k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  14.5k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  29.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 725, False: 13.8k]
  |  |  |  Branch (259:47): [True: 14.5k, False: 0]
  |  |  |  Branch (259:47): [True: 725, False: 13.8k]
  |  |  ------------------
  ------------------
  406|    725|    {
  407|    725|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 725]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    725|      allocated = -1;
  411|    725|      return false;
  412|    725|    }
  413|       |
  414|  13.8k|    arrayZ = new_array;
  415|  13.8k|    allocated = new_allocated;
  416|       |
  417|  13.8k|    return true;
  418|  14.5k|  }
_ZNK11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE8in_errorEv:
  247|  29.1k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  14.5k|  {
  254|  14.5k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 14.5k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  14.5k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  14.5k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  14.5k|  }
_ZNK11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE7bsearchIS1_Lb1ELPv0EEEPKS1_RKT_S6_:
  511|   784k|  { return as_array ().bsearch (x, not_found); }
_ZNK11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE8as_arrayEv:
  183|   794k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZNK11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EEixEi:
  165|  16.3k|  {
  166|  16.3k|    unsigned int i = (unsigned int) i_;
  167|  16.3k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  16.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.82k, False: 14.5k]
  |  |  ------------------
  ------------------
  168|  1.82k|      return Null (Type);
  ------------------
  |  |  124|  1.82k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|  14.5k|    return arrayZ[i];
  170|  16.3k|  }
_ZNK11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE4iterEv:
  188|  29.6k|    iter_t   iter () const { return as_array (); }
_ZNK11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE8as_arrayEv:
  183|  29.6k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE4initEv:
   95|  66.3k|  {
   96|  66.3k|    allocated = length = 0;
   97|  66.3k|    arrayZ = nullptr;
   98|  66.3k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE4finiEv:
  104|  33.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  33.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 33.1k, False: 0]
  ------------------
  109|  33.1k|    {
  110|  33.1k|      shrink_vector (0);
  111|  33.1k|      hb_free (arrayZ);
  ------------------
  |  |  236|  33.1k|#define hb_free hb_free_impl
  ------------------
  112|  33.1k|    }
  113|  33.1k|    init ();
  114|  33.1k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE13shrink_vectorEj:
  347|  33.1k|  {
  348|  33.1k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 0, False: 33.1k]
  ------------------
  349|      0|    {
  350|      0|      arrayZ[(unsigned) length - 1].~Type ();
  351|      0|      length--;
  352|      0|    }
  353|  33.1k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE4tailEv:
  172|  32.6k|  Type& tail () { return (*this)[length - 1]; }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EEixEi:
  158|  32.6k|  {
  159|  32.6k|    unsigned int i = (unsigned int) i_;
  160|  32.6k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  32.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 32.6k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  32.6k|    return arrayZ[i];
  163|  32.6k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE3popEv:
  446|  32.6k|  {
  447|  32.6k|    if (!length) return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (447:9): [True: 0, False: 32.6k]
  ------------------
  448|  32.6k|    Type v {std::move (arrayZ[length - 1])};
  449|  32.6k|    arrayZ[length - 1].~Type ();
  450|  32.6k|    length--;
  451|  32.6k|    return v;
  452|  32.6k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE7lsearchIP18hb_user_data_key_tEEPS1_RKT_S6_:
  495|  63.9k|  { return as_array ().lsearch (x, not_found); }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE8as_arrayEv:
  182|  98.0k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE7lsearchIS1_EEPS1_RKT_S4_:
  495|  34.1k|  { return as_array ().lsearch (x, not_found); }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE4pushIRS1_S1_LPv0EEEPS1_OT_:
  234|  34.1k|  {
  235|  34.1k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  34.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.49k, False: 32.6k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|  1.49k|      return &Crap (Type);
  ------------------
  |  |  188|  1.49k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  32.6k|    length++;
  243|  32.6k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  32.6k|    return new (p) Type (std::forward<T> (v));
  245|  34.1k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE5allocEjb:
  364|  34.1k|  {
  365|  34.1k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  34.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 921, False: 33.1k]
  |  |  ------------------
  ------------------
  366|    921|      return false;
  367|       |
  368|  33.1k|    unsigned int new_allocated;
  369|  33.1k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 33.1k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  33.1k|    else
  380|  33.1k|    {
  381|  33.1k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  33.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  382|      0|	return true;
  383|       |
  384|  33.1k|      new_allocated = allocated;
  385|  66.3k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 33.1k, False: 33.1k]
  ------------------
  386|  33.1k|	new_allocated += (new_allocated >> 1) + 8;
  387|  33.1k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  33.1k|    bool overflows =
  393|  33.1k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 33.1k]
  ------------------
  394|  33.1k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 33.1k]
  ------------------
  395|  33.1k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 33.1k]
  ------------------
  396|       |
  397|  33.1k|    if (unlikely (overflows))
  ------------------
  |  |  259|  33.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 33.1k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  33.1k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  33.1k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  66.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 576, False: 32.6k]
  |  |  |  Branch (259:47): [True: 33.1k, False: 0]
  |  |  |  Branch (259:47): [True: 576, False: 32.6k]
  |  |  ------------------
  ------------------
  406|    576|    {
  407|    576|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 576]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    576|      allocated = -1;
  411|    576|      return false;
  412|    576|    }
  413|       |
  414|  32.6k|    arrayZ = new_array;
  415|  32.6k|    allocated = new_allocated;
  416|       |
  417|  32.6k|    return true;
  418|  33.1k|  }
_ZN11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  33.1k|  {
  254|  33.1k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 33.1k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  33.1k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  33.1k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  33.1k|  }
_ZNK11hb_vector_tIN20hb_user_data_array_t19hb_user_data_item_tELb0EE8in_errorEv:
  247|   101k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE5init0Ev:
  100|  49.3k|  {
  101|  49.3k|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE5init0Ev:
  100|  98.6k|  {
  101|  98.6k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE5init0Ev:
  100|  98.6k|  {
  101|  98.6k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE4finiEv:
  104|  98.6k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  98.6k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 48.6k, False: 49.9k]
  ------------------
  109|  48.6k|    {
  110|  48.6k|      shrink_vector (0);
  111|  48.6k|      hb_free (arrayZ);
  ------------------
  |  |  236|  48.6k|#define hb_free hb_free_impl
  ------------------
  112|  48.6k|    }
  113|  98.6k|    init ();
  114|  98.6k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE13shrink_vectorEj:
  347|  48.6k|  {
  348|   151k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 103k, False: 48.6k]
  ------------------
  349|   103k|    {
  350|   103k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   103k|      length--;
  352|   103k|    }
  353|  48.6k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE4initEv:
   95|  98.6k|  {
   96|  98.6k|    allocated = length = 0;
   97|  98.6k|    arrayZ = nullptr;
   98|  98.6k|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE4finiEv:
  104|   197k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   197k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 12.4k, False: 184k]
  ------------------
  109|  12.4k|    {
  110|  12.4k|      shrink_vector (0);
  111|  12.4k|      hb_free (arrayZ);
  ------------------
  |  |  236|  12.4k|#define hb_free hb_free_impl
  ------------------
  112|  12.4k|    }
  113|   197k|    init ();
  114|   197k|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE13shrink_vectorEj:
  347|  24.4k|  {
  348|  1.15M|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 1.13M, False: 24.4k]
  ------------------
  349|  1.13M|    {
  350|  1.13M|      arrayZ[(unsigned) length - 1].~Type ();
  351|  1.13M|      length--;
  352|  1.13M|    }
  353|  24.4k|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE4initEv:
   95|   197k|  {
   96|   197k|    allocated = length = 0;
   97|   197k|    arrayZ = nullptr;
   98|   197k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE4finiEv:
  104|   197k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   197k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 97.3k, False: 99.8k]
  ------------------
  109|  97.3k|    {
  110|  97.3k|      shrink_vector (0);
  111|  97.3k|      hb_free (arrayZ);
  ------------------
  |  |  236|  97.3k|#define hb_free hb_free_impl
  ------------------
  112|  97.3k|    }
  113|   197k|    init ();
  114|   197k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE13shrink_vectorEj:
  347|  97.3k|  {
  348|   314k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 217k, False: 97.3k]
  ------------------
  349|   217k|    {
  350|   217k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   217k|      length--;
  352|   217k|    }
  353|  97.3k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE4initEv:
   95|   197k|  {
   96|   197k|    allocated = length = 0;
   97|   197k|    arrayZ = nullptr;
   98|   197k|  }
_ZNK11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE7bsearchIjLb1ELPv0EEEPKS1_RKT_S6_:
  511|   511k|  { return as_array ().bsearch (x, not_found); }
_ZNK11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE8as_arrayEv:
  183|   511k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZNK11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EEixEi:
  165|  1.25M|  {
  166|  1.25M|    unsigned int i = (unsigned int) i_;
  167|  1.25M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  1.25M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.25M]
  |  |  ------------------
  ------------------
  168|      0|      return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|  1.25M|    return arrayZ[i];
  170|  1.25M|  }
_ZNK11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE8as_arrayEv:
  183|  1.11k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE4initEv:
   95|   295k|  {
   96|   295k|    allocated = length = 0;
   97|   295k|    arrayZ = nullptr;
   98|   295k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE4initEv:
   95|   295k|  {
   96|   295k|    allocated = length = 0;
   97|   295k|    arrayZ = nullptr;
   98|   295k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE4finiEv:
  104|   197k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   197k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 34.0k, False: 162k]
  ------------------
  109|  34.0k|    {
  110|  34.0k|      shrink_vector (0);
  111|  34.0k|      hb_free (arrayZ);
  ------------------
  |  |  236|  34.0k|#define hb_free hb_free_impl
  ------------------
  112|  34.0k|    }
  113|   197k|    init ();
  114|   197k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE13shrink_vectorEj:
  347|  48.6k|  {
  348|   929k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 880k, False: 48.6k]
  ------------------
  349|   880k|    {
  350|   880k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   880k|      length--;
  352|   880k|    }
  353|  48.6k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE4finiEv:
  104|   197k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   197k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 34.5k, False: 162k]
  ------------------
  109|  34.5k|    {
  110|  34.5k|      shrink_vector (0);
  111|  34.5k|      hb_free (arrayZ);
  ------------------
  |  |  236|  34.5k|#define hb_free hb_free_impl
  ------------------
  112|  34.5k|    }
  113|   197k|    init ();
  114|   197k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE13shrink_vectorEj:
  347|  49.5k|  {
  348|   930k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 881k, False: 49.5k]
  ------------------
  349|   881k|    {
  350|   881k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   881k|      length--;
  352|   881k|    }
  353|  49.5k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE6resizeEibb:
  421|   897k|  {
  422|   897k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 897k]
  ------------------
  423|   897k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 1.13k, False: 896k]
  ------------------
  424|  1.13k|      return false;
  425|       |
  426|   896k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 881k, False: 14.9k]
  ------------------
  427|   881k|    {
  428|   881k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 881k, False: 0]
  ------------------
  429|   881k|	grow_vector (size);
  430|   881k|    }
  431|  14.9k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 14.9k, False: 0]
  ------------------
  432|  14.9k|    {
  433|  14.9k|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 14.9k, False: 0]
  ------------------
  434|  14.9k|	shrink_vector (size);
  435|  14.9k|    }
  436|       |
  437|   896k|    length = size;
  438|   896k|    return true;
  439|   897k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE11grow_vectorIS0_LPv0EEEvj:
  289|   881k|  {
  290|   881k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   881k|    length = size;
  292|   881k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE6resizeEibb:
  421|   895k|  {
  422|   895k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 895k]
  ------------------
  423|   895k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 392, False: 895k]
  ------------------
  424|    392|      return false;
  425|       |
  426|   895k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 880k, False: 14.5k]
  ------------------
  427|   880k|    {
  428|   880k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 880k, False: 0]
  ------------------
  429|   880k|	grow_vector (size);
  430|   880k|    }
  431|  14.5k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 14.5k, False: 0]
  ------------------
  432|  14.5k|    {
  433|  14.5k|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 14.5k, False: 0]
  ------------------
  434|  14.5k|	shrink_vector (size);
  435|  14.5k|    }
  436|       |
  437|   895k|    length = size;
  438|   895k|    return true;
  439|   895k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE11grow_vectorIS1_LPv0EEEvj:
  289|   880k|  {
  290|   880k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   880k|    length = size;
  292|   880k|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE5allocEjb:
  364|   897k|  {
  365|   897k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   897k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 567, False: 896k]
  |  |  ------------------
  ------------------
  366|    567|      return false;
  367|       |
  368|   896k|    unsigned int new_allocated;
  369|   896k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 35.5k, False: 861k]
  ------------------
  370|  35.5k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  35.5k|      size = hb_max (size, length);
  373|  35.5k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 988, False: 34.5k]
  ------------------
  374|  35.5k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 368, False: 620]
  ------------------
  375|    368|	return true;
  376|       |
  377|  35.2k|      new_allocated = size;
  378|  35.2k|    }
  379|   861k|    else
  380|   861k|    {
  381|   861k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   861k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 852k, False: 8.33k]
  |  |  ------------------
  ------------------
  382|   852k|	return true;
  383|       |
  384|  8.33k|      new_allocated = allocated;
  385|  16.6k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 8.33k, False: 8.33k]
  ------------------
  386|  8.33k|	new_allocated += (new_allocated >> 1) + 8;
  387|  8.33k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  43.5k|    bool overflows =
  393|  43.5k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 43.5k]
  ------------------
  394|  43.5k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 43.5k]
  ------------------
  395|  43.5k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 43.5k]
  ------------------
  396|       |
  397|  43.5k|    if (unlikely (overflows))
  ------------------
  |  |  259|  43.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 43.5k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  43.5k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  43.5k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  87.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 573, False: 42.9k]
  |  |  |  Branch (259:47): [True: 43.5k, False: 0]
  |  |  |  Branch (259:47): [True: 573, False: 42.9k]
  |  |  ------------------
  ------------------
  406|    573|    {
  407|    573|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 6, False: 567]
  ------------------
  408|      6|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    567|      allocated = -1;
  411|    567|      return false;
  412|    573|    }
  413|       |
  414|  42.9k|    arrayZ = new_array;
  415|  42.9k|    allocated = new_allocated;
  416|       |
  417|  42.9k|    return true;
  418|  43.5k|  }
_ZNK11hb_vector_tI13hb_bit_page_tLb0EE8in_errorEv:
  247|   940k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tI13hb_bit_page_tLb0EE14realloc_vectorIS0_LPv0EEEPS0_j:
  253|  43.5k|  {
  254|  43.5k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 43.5k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  43.5k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  43.5k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  43.5k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5allocEjb:
  364|   895k|  {
  365|   895k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   895k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 895k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|   895k|    unsigned int new_allocated;
  369|   895k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 34.6k, False: 861k]
  ------------------
  370|  34.6k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  34.6k|      size = hb_max (size, length);
  373|  34.6k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 630, False: 34.0k]
  ------------------
  374|  34.6k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 10, False: 620]
  ------------------
  375|     10|	return true;
  376|       |
  377|  34.6k|      new_allocated = size;
  378|  34.6k|    }
  379|   861k|    else
  380|   861k|    {
  381|   861k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   861k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 852k, False: 8.28k]
  |  |  ------------------
  ------------------
  382|   852k|	return true;
  383|       |
  384|  8.28k|      new_allocated = allocated;
  385|  16.5k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 8.28k, False: 8.28k]
  ------------------
  386|  8.28k|	new_allocated += (new_allocated >> 1) + 8;
  387|  8.28k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  42.9k|    bool overflows =
  393|  42.9k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 42.9k]
  ------------------
  394|  42.9k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 42.9k]
  ------------------
  395|  42.9k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 42.9k]
  ------------------
  396|       |
  397|  42.9k|    if (unlikely (overflows))
  ------------------
  |  |  259|  42.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 42.9k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  42.9k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  42.9k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  85.9k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 399, False: 42.5k]
  |  |  |  Branch (259:47): [True: 42.9k, False: 0]
  |  |  |  Branch (259:47): [True: 399, False: 42.5k]
  |  |  ------------------
  ------------------
  406|    399|    {
  407|    399|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 7, False: 392]
  ------------------
  408|      7|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    392|      allocated = -1;
  411|    392|      return false;
  412|    399|    }
  413|       |
  414|  42.5k|    arrayZ = new_array;
  415|  42.5k|    allocated = new_allocated;
  416|       |
  417|  42.5k|    return true;
  418|  42.9k|  }
_ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE8in_errorEv:
  247|   938k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  42.9k|  {
  254|  42.9k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 42.9k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  42.9k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  42.9k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  42.9k|  }
_ZN11hb_vector_tIjLb0EE4finiEv:
  104|   226k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   226k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 23.5k, False: 202k]
  ------------------
  109|  23.5k|    {
  110|  23.5k|      shrink_vector (0);
  111|  23.5k|      hb_free (arrayZ);
  ------------------
  |  |  236|  23.5k|#define hb_free hb_free_impl
  ------------------
  112|  23.5k|    }
  113|   226k|    init ();
  114|   226k|  }
_ZN11hb_vector_tIjLb0EE13shrink_vectorEj:
  347|  23.5k|  {
  348|  43.5M|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 43.5M, False: 23.5k]
  ------------------
  349|  43.5M|    {
  350|  43.5M|      arrayZ[(unsigned) length - 1].~Type ();
  351|  43.5M|      length--;
  352|  43.5M|    }
  353|  23.5k|  }
_ZN11hb_vector_tIjLb0EE4initEv:
   95|   226k|  {
   96|   226k|    allocated = length = 0;
   97|   226k|    arrayZ = nullptr;
   98|   226k|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EEixEi:
  158|  1.81M|  {
  159|  1.81M|    unsigned int i = (unsigned int) i_;
  160|  1.81M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  1.81M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.81M]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  1.81M|    return arrayZ[i];
  163|  1.81M|  }
_ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE8as_arrayEv:
  183|  1.36M|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIjLb0EE12resize_exactEib:
  441|  14.5k|  {
  442|  14.5k|    return resize (size_, initialize, true);
  443|  14.5k|  }
_ZN11hb_vector_tIjLb0EE6writerEv:
  189|  23.2k|  writer_t writer ()       { return as_array (); }
_ZN11hb_vector_tIjLb0EE8as_arrayEv:
  182|  23.2k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIjLb0EEixEi:
  158|   209k|  {
  159|   209k|    unsigned int i = (unsigned int) i_;
  160|   209k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   209k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 209k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   209k|    return arrayZ[i];
  163|   209k|  }
_ZNK11hb_vector_tIjLb0EEixEi:
  165|  3.23M|  {
  166|  3.23M|    unsigned int i = (unsigned int) i_;
  167|  3.23M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  3.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.23M]
  |  |  ------------------
  ------------------
  168|      0|      return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|  3.23M|    return arrayZ[i];
  170|  3.23M|  }
_ZN11hb_vector_tI13hb_bit_page_tLb0EEixEi:
  158|   147k|  {
  159|   147k|    unsigned int i = (unsigned int) i_;
  160|   147k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   147k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 147k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   147k|    return arrayZ[i];
  163|   147k|  }
_ZNK11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EE5bfindIS1_Lb1ELPv0EEEbRKT_Pj14hb_not_found_tj:
  517|  1.36M|  { return as_array ().bfind (x, i, not_found, to_store); }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE4finiEv:
  104|  49.5k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  49.5k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 7.64k, False: 41.8k]
  ------------------
  109|  7.64k|    {
  110|  7.64k|      shrink_vector (0);
  111|  7.64k|      hb_free (arrayZ);
  ------------------
  |  |  236|  7.64k|#define hb_free hb_free_impl
  ------------------
  112|  7.64k|    }
  113|  49.5k|    init ();
  114|  49.5k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE13shrink_vectorEj:
  347|  7.64k|  {
  348|  30.3k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 22.6k, False: 7.64k]
  ------------------
  349|  22.6k|    {
  350|  22.6k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  22.6k|      length--;
  352|  22.6k|    }
  353|  7.64k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE4initEv:
   95|  49.5k|  {
   96|  49.5k|    allocated = length = 0;
   97|  49.5k|    arrayZ = nullptr;
   98|  49.5k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE5allocEjb:
  364|  22.7k|  {
  365|  22.7k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 22.7k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  22.7k|    unsigned int new_allocated;
  369|  22.7k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 22.7k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  22.7k|    else
  380|  22.7k|    {
  381|  22.7k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  22.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 14.6k, False: 8.11k]
  |  |  ------------------
  ------------------
  382|  14.6k|	return true;
  383|       |
  384|  8.11k|      new_allocated = allocated;
  385|  16.2k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 8.11k, False: 8.11k]
  ------------------
  386|  8.11k|	new_allocated += (new_allocated >> 1) + 8;
  387|  8.11k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  8.11k|    bool overflows =
  393|  8.11k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 8.11k]
  ------------------
  394|  8.11k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 8.11k]
  ------------------
  395|  8.11k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 8.11k]
  ------------------
  396|       |
  397|  8.11k|    if (unlikely (overflows))
  ------------------
  |  |  259|  8.11k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 8.11k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  8.11k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  8.11k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  16.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 89, False: 8.02k]
  |  |  |  Branch (259:47): [True: 8.11k, False: 0]
  |  |  |  Branch (259:47): [True: 89, False: 8.02k]
  |  |  ------------------
  ------------------
  406|     89|    {
  407|     89|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 89]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     89|      allocated = -1;
  411|     89|      return false;
  412|     89|    }
  413|       |
  414|  8.02k|    arrayZ = new_array;
  415|  8.02k|    allocated = new_allocated;
  416|       |
  417|  8.02k|    return true;
  418|  8.11k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE14realloc_vectorIS2_LPv0EEEPS2_j:
  253|  8.11k|  {
  254|  8.11k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 8.11k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  8.11k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  8.11k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  8.11k|  }
_ZNK11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE8as_bytesEv:
  151|  58.6k|  { return hb_bytes_t ((const char *) arrayZ, get_size ()); }
_ZNK11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE8get_sizeEv:
  176|  58.6k|  unsigned get_size () const { return length * item_size; }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE4finiEv:
  104|  1.71k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  1.71k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 1.71k, False: 0]
  ------------------
  109|  1.71k|    {
  110|  1.71k|      shrink_vector (0);
  111|  1.71k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.71k|#define hb_free hb_free_impl
  ------------------
  112|  1.71k|    }
  113|  1.71k|    init ();
  114|  1.71k|  }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE13shrink_vectorEj:
  347|  1.71k|  {
  348|  3.77k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 2.05k, False: 1.71k]
  ------------------
  349|  2.05k|    {
  350|  2.05k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  2.05k|      length--;
  352|  2.05k|    }
  353|  1.71k|  }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE4initEv:
   95|  1.71k|  {
   96|  1.71k|    allocated = length = 0;
   97|  1.71k|    arrayZ = nullptr;
   98|  1.71k|  }
_ZNK11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE4iterEv:
  188|  1.71k|    iter_t   iter () const { return as_array (); }
_ZNK11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE8as_arrayEv:
  183|  1.71k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZNK11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE4iterEv:
  188|  4.86k|    iter_t   iter () const { return as_array (); }
_ZNK11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE8as_arrayEv:
  183|  4.86k|  c_array_t as_array () const { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE4finiEv:
  104|  5.15k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  5.15k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 1.71k, False: 3.43k]
  ------------------
  109|  1.71k|    {
  110|  1.71k|      shrink_vector (0);
  111|  1.71k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.71k|#define hb_free hb_free_impl
  ------------------
  112|  1.71k|    }
  113|  5.15k|    init ();
  114|  5.15k|  }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE13shrink_vectorEj:
  347|  1.71k|  {
  348|  20.3k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 18.6k, False: 1.71k]
  ------------------
  349|  18.6k|    {
  350|  18.6k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  18.6k|      length--;
  352|  18.6k|    }
  353|  1.71k|  }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE4initEv:
   95|  5.15k|  {
   96|  5.15k|    allocated = length = 0;
   97|  5.15k|    arrayZ = nullptr;
   98|  5.15k|  }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE4pushIDnS2_LPv0EEEPS2_OT_:
  234|  1.71k|  {
  235|  1.71k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 55, False: 1.66k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|     55|      return &Crap (Type);
  ------------------
  |  |  188|     55|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  1.66k|    length++;
  243|  1.66k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  1.66k|    return new (p) Type (std::forward<T> (v));
  245|  1.71k|  }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE5allocEjb:
  364|  18.7k|  {
  365|  18.7k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  18.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 53, False: 18.7k]
  |  |  ------------------
  ------------------
  366|     53|      return false;
  367|       |
  368|  18.7k|    unsigned int new_allocated;
  369|  18.7k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 18.7k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  18.7k|    else
  380|  18.7k|    {
  381|  18.7k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  18.7k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 16.1k, False: 2.51k]
  |  |  ------------------
  ------------------
  382|  16.1k|	return true;
  383|       |
  384|  2.51k|      new_allocated = allocated;
  385|  5.03k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 2.51k, False: 2.51k]
  ------------------
  386|  2.51k|	new_allocated += (new_allocated >> 1) + 8;
  387|  2.51k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  2.51k|    bool overflows =
  393|  2.51k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 2.51k]
  ------------------
  394|  2.51k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 2.51k]
  ------------------
  395|  2.51k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 2.51k]
  ------------------
  396|       |
  397|  2.51k|    if (unlikely (overflows))
  ------------------
  |  |  259|  2.51k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.51k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  2.51k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  2.51k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  5.03k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 72, False: 2.44k]
  |  |  |  Branch (259:47): [True: 2.51k, False: 0]
  |  |  |  Branch (259:47): [True: 72, False: 2.44k]
  |  |  ------------------
  ------------------
  406|     72|    {
  407|     72|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 72]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     72|      allocated = -1;
  411|     72|      return false;
  412|     72|    }
  413|       |
  414|  2.44k|    arrayZ = new_array;
  415|  2.44k|    allocated = new_allocated;
  416|       |
  417|  2.44k|    return true;
  418|  2.51k|  }
_ZNK11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE8in_errorEv:
  247|  40.0k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE14realloc_vectorIS2_LPv0EEEPS2_j:
  253|  2.51k|  {
  254|  2.51k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 2.51k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  2.51k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  2.51k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  2.51k|  }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EE4pushIRS2_S2_LPv0EEEPS2_OT_:
  234|  17.0k|  {
  235|  17.0k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  17.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 70, False: 16.9k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|     70|      return &Crap (Type);
  ------------------
  |  |  188|     70|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  16.9k|    length++;
  243|  16.9k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  16.9k|    return new (p) Type (std::forward<T> (v));
  245|  17.0k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE4pushEv:
  210|  22.7k|  {
  211|  22.7k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  22.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 89, False: 22.6k]
  |  |  ------------------
  ------------------
  212|     89|      return &Crap (Type);
  ------------------
  |  |  188|     89|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  22.6k|    return std::addressof (arrayZ[length - 1]);
  214|  22.7k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE6resizeEibb:
  421|  22.7k|  {
  422|  22.7k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 22.7k]
  ------------------
  423|  22.7k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 89, False: 22.6k]
  ------------------
  424|     89|      return false;
  425|       |
  426|  22.6k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 22.6k, False: 0]
  ------------------
  427|  22.6k|    {
  428|  22.6k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 22.6k, False: 0]
  ------------------
  429|  22.6k|	grow_vector (size);
  430|  22.6k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  22.6k|    length = size;
  438|  22.6k|    return true;
  439|  22.7k|  }
_ZN11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE11grow_vectorIS2_LPv0EEEvj:
  289|  22.6k|  {
  290|  22.6k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|  22.6k|    length = size;
  292|  22.6k|  }
_ZNK11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE8in_errorEv:
  247|  53.6k|  bool in_error () const { return allocated < 0; }
_ZNK11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE5beginEv:
  194|  23.1k|  Type *begin () const { return arrayZ; }
_ZNK11hb_vector_tIN22hb_serialize_context_t8object_t6link_tELb0EE3endEv:
  195|  23.1k|  Type *end () const { return arrayZ + length; }
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EEixEi:
  158|  26.2k|  {
  159|  26.2k|    unsigned int i = (unsigned int) i_;
  160|  26.2k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  26.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 26.2k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  26.2k|    return arrayZ[i];
  163|  26.2k|  }
_ZN11hb_vector_tIjLb0EE4pushIRjjLPv0EEEPjOT_:
  234|  1.15k|  {
  235|  1.15k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  1.15k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 36, False: 1.11k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|     36|      return &Crap (Type);
  ------------------
  |  |  188|     36|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  1.11k|    length++;
  243|  1.11k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  1.11k|    return new (p) Type (std::forward<T> (v));
  245|  1.15k|  }
_ZN11hb_vector_tIjLb0EE5allocEjb:
  364|   371k|  {
  365|   371k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   371k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 256, False: 371k]
  |  |  ------------------
  ------------------
  366|    256|      return false;
  367|       |
  368|   371k|    unsigned int new_allocated;
  369|   371k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 14.5k, False: 356k]
  ------------------
  370|  14.5k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  14.5k|      size = hb_max (size, length);
  373|  14.5k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 14.5k]
  ------------------
  374|  14.5k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|  14.5k|      new_allocated = size;
  378|  14.5k|    }
  379|   356k|    else
  380|   356k|    {
  381|   356k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   356k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 347k, False: 9.79k]
  |  |  ------------------
  ------------------
  382|   347k|	return true;
  383|       |
  384|  9.79k|      new_allocated = allocated;
  385|  58.8k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 49.0k, False: 9.79k]
  ------------------
  386|  49.0k|	new_allocated += (new_allocated >> 1) + 8;
  387|  9.79k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  24.3k|    bool overflows =
  393|  24.3k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 24.3k]
  ------------------
  394|  24.3k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 24.3k]
  ------------------
  395|  24.3k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 24.3k]
  ------------------
  396|       |
  397|  24.3k|    if (unlikely (overflows))
  ------------------
  |  |  259|  24.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 24.3k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  24.3k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  24.3k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  48.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 316, False: 24.0k]
  |  |  |  Branch (259:47): [True: 24.3k, False: 0]
  |  |  |  Branch (259:47): [True: 316, False: 24.0k]
  |  |  ------------------
  ------------------
  406|    316|    {
  407|    316|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 316]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    316|      allocated = -1;
  411|    316|      return false;
  412|    316|    }
  413|       |
  414|  24.0k|    arrayZ = new_array;
  415|  24.0k|    allocated = new_allocated;
  416|       |
  417|  24.0k|    return true;
  418|  24.3k|  }
_ZNK11hb_vector_tIjLb0EE8in_errorEv:
  247|   399k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIjLb0EE14realloc_vectorIjLPv0EEEPjj:
  253|  24.3k|  {
  254|  24.3k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 24.3k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  24.3k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  24.3k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  24.3k|  }
_ZN11hb_vector_tIjLb0EE6resizeEibb:
  421|  26.6k|  {
  422|  26.6k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 26.6k]
  ------------------
  423|  26.6k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 284, False: 26.4k]
  ------------------
  424|    284|      return false;
  425|       |
  426|  26.4k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 22.5k, False: 3.82k]
  ------------------
  427|  22.5k|    {
  428|  22.5k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 14.5k, False: 7.99k]
  ------------------
  429|  14.5k|	grow_vector (size);
  430|  22.5k|    }
  431|  3.82k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 311, False: 3.51k]
  ------------------
  432|    311|    {
  433|    311|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 311]
  ------------------
  434|      0|	shrink_vector (size);
  435|    311|    }
  436|       |
  437|  26.4k|    length = size;
  438|  26.4k|    return true;
  439|  26.6k|  }
_ZN11hb_vector_tIjLb0EE11grow_vectorIjLPv0EEEvj:
  289|  14.5k|  {
  290|  14.5k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|  14.5k|    length = size;
  292|  14.5k|  }
_ZN11hb_vector_tIiLb0EE4finiEv:
  104|   391k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   391k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 307k, False: 83.0k]
  ------------------
  109|   307k|    {
  110|   307k|      shrink_vector (0);
  111|   307k|      hb_free (arrayZ);
  ------------------
  |  |  236|   307k|#define hb_free hb_free_impl
  ------------------
  112|   307k|    }
  113|   391k|    init ();
  114|   391k|  }
_ZN11hb_vector_tIiLb0EE13shrink_vectorEj:
  347|   307k|  {
  348|   321M|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 321M, False: 307k]
  ------------------
  349|   321M|    {
  350|   321M|      arrayZ[(unsigned) length - 1].~Type ();
  351|   321M|      length--;
  352|   321M|    }
  353|   307k|  }
_ZN11hb_vector_tIiLb0EE4initEv:
   95|   391k|  {
   96|   391k|    allocated = length = 0;
   97|   391k|    arrayZ = nullptr;
   98|   391k|  }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE5allocEjb:
  364|  4.19k|  {
  365|  4.19k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  4.19k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 4.19k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  4.19k|    unsigned int new_allocated;
  369|  4.19k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 4.19k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  4.19k|    else
  380|  4.19k|    {
  381|  4.19k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  4.19k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.48k, False: 1.71k]
  |  |  ------------------
  ------------------
  382|  2.48k|	return true;
  383|       |
  384|  1.71k|      new_allocated = allocated;
  385|  3.43k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 1.71k, False: 1.71k]
  ------------------
  386|  1.71k|	new_allocated += (new_allocated >> 1) + 8;
  387|  1.71k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  1.71k|    bool overflows =
  393|  1.71k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 1.71k]
  ------------------
  394|  1.71k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 1.71k]
  ------------------
  395|  1.71k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 1.71k]
  ------------------
  396|       |
  397|  1.71k|    if (unlikely (overflows))
  ------------------
  |  |  259|  1.71k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.71k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  1.71k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  1.71k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  3.43k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 42, False: 1.67k]
  |  |  |  Branch (259:47): [True: 1.71k, False: 0]
  |  |  |  Branch (259:47): [True: 42, False: 1.67k]
  |  |  ------------------
  ------------------
  406|     42|    {
  407|     42|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 42]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     42|      allocated = -1;
  411|     42|      return false;
  412|     42|    }
  413|       |
  414|  1.67k|    arrayZ = new_array;
  415|  1.67k|    allocated = new_allocated;
  416|       |
  417|  1.67k|    return true;
  418|  1.71k|  }
_ZNK11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE8in_errorEv:
  247|  5.91k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE14realloc_vectorIS5_LPv0EEEPS5_j:
  253|  1.71k|  {
  254|  1.71k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 1.71k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  1.71k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  1.71k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  1.71k|  }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EE4pushIRS5_S5_LPv0EEEPS5_OT_:
  234|  2.05k|  {
  235|  2.05k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  2.05k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|      0|      return &Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  2.05k|    length++;
  243|  2.05k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  2.05k|    return new (p) Type (std::forward<T> (v));
  245|  2.05k|  }
_ZNK11hb_vector_tIjLb0EE5beginEv:
  194|  3.23k|  Type *begin () const { return arrayZ; }
_ZNK11hb_vector_tIjLb0EE3endEv:
  195|  3.23k|  Type *end () const { return arrayZ + length; }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EEC2Ev:
   45|  11.1k|  hb_vector_t () = default;
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EED2Ev:
   86|  11.1k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE4finiEv:
  104|  11.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  11.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 11.1k, False: 0]
  ------------------
  109|  11.1k|    {
  110|  11.1k|      shrink_vector (0);
  111|  11.1k|      hb_free (arrayZ);
  ------------------
  |  |  236|  11.1k|#define hb_free hb_free_impl
  ------------------
  112|  11.1k|    }
  113|  11.1k|    init ();
  114|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE13shrink_vectorEj:
  347|  11.1k|  {
  348|  21.7k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 10.5k, False: 11.1k]
  ------------------
  349|  10.5k|    {
  350|  10.5k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  10.5k|      length--;
  352|  10.5k|    }
  353|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE4initEv:
   95|  11.1k|  {
   96|  11.1k|    allocated = length = 0;
   97|  11.1k|    arrayZ = nullptr;
   98|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE4pushEv:
  210|  11.1k|  {
  211|  11.1k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  11.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 628, False: 10.5k]
  |  |  ------------------
  ------------------
  212|    628|      return &Crap (Type);
  ------------------
  |  |  188|    628|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  10.5k|    return std::addressof (arrayZ[length - 1]);
  214|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE6resizeEibb:
  421|  11.1k|  {
  422|  11.1k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 11.1k]
  ------------------
  423|  11.1k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 628, False: 10.5k]
  ------------------
  424|    628|      return false;
  425|       |
  426|  10.5k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 10.5k, False: 0]
  ------------------
  427|  10.5k|    {
  428|  10.5k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 10.5k, False: 0]
  ------------------
  429|  10.5k|	grow_vector (size);
  430|  10.5k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  10.5k|    length = size;
  438|  10.5k|    return true;
  439|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE5allocEjb:
  364|  11.1k|  {
  365|  11.1k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  11.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.1k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  11.1k|    unsigned int new_allocated;
  369|  11.1k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 11.1k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  11.1k|    else
  380|  11.1k|    {
  381|  11.1k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  11.1k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 11.1k]
  |  |  ------------------
  ------------------
  382|      0|	return true;
  383|       |
  384|  11.1k|      new_allocated = allocated;
  385|  22.3k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 11.1k, False: 11.1k]
  ------------------
  386|  11.1k|	new_allocated += (new_allocated >> 1) + 8;
  387|  11.1k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  11.1k|    bool overflows =
  393|  11.1k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 11.1k]
  ------------------
  394|  11.1k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 11.1k]
  ------------------
  395|  11.1k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 11.1k]
  ------------------
  396|       |
  397|  11.1k|    if (unlikely (overflows))
  ------------------
  |  |  259|  11.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 11.1k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  11.1k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  11.1k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  22.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 628, False: 10.5k]
  |  |  |  Branch (259:47): [True: 11.1k, False: 0]
  |  |  |  Branch (259:47): [True: 628, False: 10.5k]
  |  |  ------------------
  ------------------
  406|    628|    {
  407|    628|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 628]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    628|      allocated = -1;
  411|    628|      return false;
  412|    628|    }
  413|       |
  414|  10.5k|    arrayZ = new_array;
  415|  10.5k|    allocated = new_allocated;
  416|       |
  417|  10.5k|    return true;
  418|  11.1k|  }
_ZNK11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE8in_errorEv:
  247|  22.3k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  11.1k|  {
  254|  11.1k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 11.1k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  11.1k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  11.1k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  11.1k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  289|  10.5k|  {
  290|  10.5k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|  10.5k|    length = size;
  292|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE5qsortEPFiPKvS4_E:
  490|  11.1k|  { as_array ().qsort (cmp); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EE8as_arrayEv:
  182|  11.1k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t15feature_event_tELb0EEixEi:
  158|  10.5k|  {
  159|  10.5k|    unsigned int i = (unsigned int) i_;
  160|  10.5k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.5k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  10.5k|    return arrayZ[i];
  163|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EEaSERKS2_:
  135|  10.5k|  {
  136|  10.5k|    reset ();
  137|  10.5k|    alloc (o.length, true);
  138|  10.5k|    if (unlikely (in_error ())) return *this;
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.5k]
  |  |  ------------------
  ------------------
  139|       |
  140|  10.5k|    copy_array (o.as_array ());
  141|       |
  142|  10.5k|    return *this;
  143|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE5resetEv:
  117|  10.5k|  {
  118|  10.5k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  10.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 10.5k]
  |  |  ------------------
  ------------------
  119|       |      /* Big Hack! We don't know the true allocated size before
  120|       |       * an allocation failure happened. But we know it was at
  121|       |       * least as big as length. Restore it to that and continue
  122|       |       * as if error did not happen. */
  123|      0|      allocated = length;
  124|  10.5k|    resize (0);
  125|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE6resizeEibb:
  421|  10.5k|  {
  422|  10.5k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 10.5k]
  ------------------
  423|  10.5k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 0, False: 10.5k]
  ------------------
  424|      0|      return false;
  425|       |
  426|  10.5k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 0, False: 10.5k]
  ------------------
  427|      0|    {
  428|      0|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 0, False: 0]
  ------------------
  429|      0|	grow_vector (size);
  430|      0|    }
  431|  10.5k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 10.5k]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  10.5k|    length = size;
  438|  10.5k|    return true;
  439|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE5allocEjb:
  364|  21.1k|  {
  365|  21.1k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  21.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 21.1k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  21.1k|    unsigned int new_allocated;
  369|  21.1k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 10.5k, False: 10.5k]
  ------------------
  370|  10.5k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  10.5k|      size = hb_max (size, length);
  373|  10.5k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 10.5k, False: 0]
  ------------------
  374|  10.5k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 10.5k, False: 0]
  ------------------
  375|  10.5k|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  10.5k|    else
  380|  10.5k|    {
  381|  10.5k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  10.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 10.5k, False: 0]
  |  |  ------------------
  ------------------
  382|  10.5k|	return true;
  383|       |
  384|      0|      new_allocated = allocated;
  385|      0|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 0, False: 0]
  ------------------
  386|      0|	new_allocated += (new_allocated >> 1) + 8;
  387|      0|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|      0|    bool overflows =
  393|      0|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 0]
  ------------------
  394|      0|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 0]
  ------------------
  395|      0|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 0]
  ------------------
  396|       |
  397|      0|    if (unlikely (overflows))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|      0|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|      0|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|      0|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  406|      0|    {
  407|      0|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 0]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      0|      allocated = -1;
  411|      0|      return false;
  412|      0|    }
  413|       |
  414|      0|    arrayZ = new_array;
  415|      0|    allocated = new_allocated;
  416|       |
  417|      0|    return true;
  418|      0|  }
_ZNK11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE8in_errorEv:
  247|  42.2k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE10copy_arrayIS1_LPv0EEEv10hb_array_tIKS1_E:
  306|  10.5k|  {
  307|  10.5k|    length = other.length;
  308|  10.5k|    if (!HB_OPTIMIZE_SIZE_VAL && sizeof (T) >= sizeof (long long))
  ------------------
  |  |  200|  21.1k|#define HB_OPTIMIZE_SIZE_VAL 0
  ------------------
  |  Branch (308:9): [Folded - Ignored]
  |  Branch (308:34): [Folded - Ignored]
  ------------------
  309|       |      /* This runs faster because of alignment. */
  310|  10.5k|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (310:28): [True: 0, False: 10.5k]
  ------------------
  311|      0|	arrayZ[i] = other.arrayZ[i];
  312|      0|    else
  313|      0|       hb_memcpy ((void *) arrayZ, (const void *) other.arrayZ, length * item_size);
  314|  10.5k|  }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE8as_arrayEv:
  182|  10.5k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN20hb_aat_map_builder_t14feature_info_tELb1EE7lsearchIS1_EEPS1_RKT_S4_:
  495|  10.5k|  { return as_array ().lsearch (x, not_found); }
_ZNK11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE5beginEv:
  194|  11.1k|  Type *begin () const { return arrayZ; }
_ZNK11hb_vector_tIS_IN12hb_aat_map_t13range_flags_tELb1EELb0EE3endEv:
  195|  11.1k|  Type *end () const { return arrayZ + length; }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EE4tailEv:
  172|  14.5k|  Type& tail () { return (*this)[length - 1]; }
_ZN11hb_vector_tIN12hb_aat_map_t13range_flags_tELb1EEixEi:
  158|  14.5k|  {
  159|  14.5k|    unsigned int i = (unsigned int) i_;
  160|  14.5k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  14.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 725, False: 13.8k]
  |  |  ------------------
  ------------------
  161|    725|      return Crap (Type);
  ------------------
  |  |  188|    725|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  13.8k|    return arrayZ[i];
  163|  14.5k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EEC2Ev:
   45|   221k|  hb_vector_t () = default;
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE5allocEjb:
  364|  2.09M|  {
  365|  2.09M|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  2.09M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 684, False: 2.09M]
  |  |  ------------------
  ------------------
  366|    684|      return false;
  367|       |
  368|  2.09M|    unsigned int new_allocated;
  369|  2.09M|    if (exact)
  ------------------
  |  Branch (369:9): [True: 10.1k, False: 2.08M]
  ------------------
  370|  10.1k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  10.1k|      size = hb_max (size, length);
  373|  10.1k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 1.06k, False: 9.03k]
  ------------------
  374|  10.1k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 819, False: 250]
  ------------------
  375|    819|	return true;
  376|       |
  377|  9.28k|      new_allocated = size;
  378|  9.28k|    }
  379|  2.08M|    else
  380|  2.08M|    {
  381|  2.08M|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  2.08M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.85M, False: 236k]
  |  |  ------------------
  ------------------
  382|  1.85M|	return true;
  383|       |
  384|   236k|      new_allocated = allocated;
  385|   513k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 276k, False: 236k]
  ------------------
  386|   276k|	new_allocated += (new_allocated >> 1) + 8;
  387|   236k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|   245k|    bool overflows =
  393|   245k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 245k]
  ------------------
  394|   245k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 245k]
  ------------------
  395|   245k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 245k]
  ------------------
  396|       |
  397|   245k|    if (unlikely (overflows))
  ------------------
  |  |  259|   245k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 245k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|   245k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|   245k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|   490k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.39k, False: 244k]
  |  |  |  Branch (259:47): [True: 245k, False: 0]
  |  |  |  Branch (259:47): [True: 1.39k, False: 244k]
  |  |  ------------------
  ------------------
  406|  1.39k|    {
  407|  1.39k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.39k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.39k|      allocated = -1;
  411|  1.39k|      return false;
  412|  1.39k|    }
  413|       |
  414|   244k|    arrayZ = new_array;
  415|   244k|    allocated = new_allocated;
  416|       |
  417|   244k|    return true;
  418|   245k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|   245k|  {
  254|   245k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 245k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|   245k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|   245k|#define hb_realloc hb_realloc_impl
  ------------------
  260|   245k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE6resizeEibb:
  421|  1.40M|  {
  422|  1.40M|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 206k, False: 1.20M]
  ------------------
  423|  1.40M|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 1.39k, False: 1.40M]
  ------------------
  424|  1.39k|      return false;
  425|       |
  426|  1.40M|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 699k, False: 707k]
  ------------------
  427|   699k|    {
  428|   699k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 261k, False: 437k]
  ------------------
  429|   261k|	grow_vector (size);
  430|   699k|    }
  431|   707k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 169k, False: 538k]
  ------------------
  432|   169k|    {
  433|   169k|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 169k, False: 0]
  ------------------
  434|   169k|	shrink_vector (size);
  435|   169k|    }
  436|       |
  437|  1.40M|    length = size;
  438|  1.40M|    return true;
  439|  1.40M|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  297|   261k|  {
  298|  1.08M|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 818k, False: 261k]
  ------------------
  299|   818k|      new (std::addressof (arrayZ[length])) Type ();
  300|   261k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE13shrink_vectorEj:
  347|   367k|  {
  348|  40.0M|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 39.6M, False: 367k]
  ------------------
  349|  39.6M|    {
  350|  39.6M|      arrayZ[(unsigned) length - 1].~Type ();
  351|  39.6M|      length--;
  352|  39.6M|    }
  353|   367k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE8as_arrayEv:
  182|   817k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIjLb0EEC2Ev:
   45|   226k|  hb_vector_t () = default;
_ZN11hb_vector_tIiLb0EEC2Ev:
   45|   391k|  hb_vector_t () = default;
_ZN11hb_vector_tIjLb0EEcv10hb_array_tIjEEv:
  191|  8.69k|  operator writer_t ()       { return writer (); }
_ZN11hb_vector_tIiLb0EE6resizeEibb:
  421|   417k|  {
  422|   417k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 417k]
  ------------------
  423|   417k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 21.6k, False: 396k]
  ------------------
  424|  21.6k|      return false;
  425|       |
  426|   396k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 363k, False: 32.5k]
  ------------------
  427|   363k|    {
  428|   363k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 349k, False: 14.5k]
  ------------------
  429|   349k|	grow_vector (size);
  430|   363k|    }
  431|  32.5k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 318, False: 32.2k]
  ------------------
  432|    318|    {
  433|    318|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 318]
  ------------------
  434|      0|	shrink_vector (size);
  435|    318|    }
  436|       |
  437|   396k|    length = size;
  438|   396k|    return true;
  439|   417k|  }
_ZN11hb_vector_tIiLb0EE5allocEjb:
  364|   752k|  {
  365|   752k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   752k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 20.7k, False: 731k]
  |  |  ------------------
  ------------------
  366|  20.7k|      return false;
  367|       |
  368|   731k|    unsigned int new_allocated;
  369|   731k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 334k, False: 397k]
  ------------------
  370|   334k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|   334k|      size = hb_max (size, length);
  373|   334k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 69.0k, False: 265k]
  ------------------
  374|   334k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 69.0k, False: 0]
  ------------------
  375|  69.0k|	return true;
  376|       |
  377|   265k|      new_allocated = size;
  378|   265k|    }
  379|   397k|    else
  380|   397k|    {
  381|   397k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   397k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 229k, False: 167k]
  |  |  ------------------
  ------------------
  382|   229k|	return true;
  383|       |
  384|   167k|      new_allocated = allocated;
  385|   613k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 445k, False: 167k]
  ------------------
  386|   445k|	new_allocated += (new_allocated >> 1) + 8;
  387|   167k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|   433k|    bool overflows =
  393|   433k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 433k]
  ------------------
  394|   433k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 433k]
  ------------------
  395|   433k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 433k]
  ------------------
  396|       |
  397|   433k|    if (unlikely (overflows))
  ------------------
  |  |  259|   433k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 433k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|   433k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|   433k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|   866k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.47k, False: 431k]
  |  |  |  Branch (259:47): [True: 433k, False: 0]
  |  |  |  Branch (259:47): [True: 1.47k, False: 431k]
  |  |  ------------------
  ------------------
  406|  1.47k|    {
  407|  1.47k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.47k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.47k|      allocated = -1;
  411|  1.47k|      return false;
  412|  1.47k|    }
  413|       |
  414|   431k|    arrayZ = new_array;
  415|   431k|    allocated = new_allocated;
  416|       |
  417|   431k|    return true;
  418|   433k|  }
_ZNK11hb_vector_tIiLb0EE8in_errorEv:
  247|  1.51M|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIiLb0EE14realloc_vectorIiLPv0EEEPij:
  253|   433k|  {
  254|   433k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 433k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|   433k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|   433k|#define hb_realloc hb_realloc_impl
  ------------------
  260|   433k|  }
_ZN11hb_vector_tIiLb0EE11grow_vectorIiLPv0EEEvj:
  289|   349k|  {
  290|   349k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   349k|    length = size;
  292|   349k|  }
_ZNK11hb_vector_tIjLb0EEcvbEv:
  175|  3.25k|  explicit operator bool () const { return length; }
_ZN11hb_vector_tIiLb0EED2Ev:
   86|   391k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIjLb0EED2Ev:
   86|   226k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIiLb0EEC2E10hb_array_tIiE:
   68|   334k|  {
   69|   334k|    alloc (o.length, true);
   70|   334k|    if (unlikely (in_error ())) return;
  ------------------
  |  |  259|   334k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 599, False: 333k]
  |  |  ------------------
  ------------------
   71|   333k|    copy_array (o);
   72|   333k|  }
_ZN11hb_vector_tIiLb0EE10copy_arrayIiLPv0EEEv10hb_array_tIKiE:
  306|   333k|  {
  307|   333k|    length = other.length;
  308|   333k|    if (!HB_OPTIMIZE_SIZE_VAL && sizeof (T) >= sizeof (long long))
  ------------------
  |  |  200|   667k|#define HB_OPTIMIZE_SIZE_VAL 0
  ------------------
  |  Branch (308:9): [Folded - Ignored]
  |  Branch (308:34): [Folded - Ignored]
  ------------------
  309|       |      /* This runs faster because of alignment. */
  310|      0|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (310:28): [True: 0, False: 0]
  ------------------
  311|      0|	arrayZ[i] = other.arrayZ[i];
  312|   333k|    else
  313|   333k|       hb_memcpy ((void *) arrayZ, (const void *) other.arrayZ, length * item_size);
  314|   333k|  }
_ZN11hb_vector_tIiLb0EEixEi:
  158|  6.98M|  {
  159|  6.98M|    unsigned int i = (unsigned int) i_;
  160|  6.98M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  6.98M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 21.1k, False: 6.96M]
  |  |  ------------------
  ------------------
  161|  21.1k|      return Crap (Type);
  ------------------
  |  |  188|  21.1k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  6.96M|    return arrayZ[i];
  163|  6.98M|  }
_ZN11hb_vector_tIiLb0EE8as_arrayEv:
  182|   115k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZNK11hb_vector_tIN2OT15contour_point_tELb0EE5beginEv:
  194|  2.07k|  Type *begin () const { return arrayZ; }
_ZNK11hb_vector_tIN2OT15contour_point_tELb0EE3endEv:
  195|  2.07k|  Type *end () const { return arrayZ + length; }
_ZNK11hb_vector_tIN2OT15contour_point_tELb0EE8in_errorEv:
  247|  2.50M|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EEixEi:
  158|   321k|  {
  159|   321k|    unsigned int i = (unsigned int) i_;
  160|   321k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   321k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 321k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   321k|    return arrayZ[i];
  163|   321k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EED2Ev:
   86|   221k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE4finiEv:
  104|   221k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   221k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 197k, False: 23.1k]
  ------------------
  109|   197k|    {
  110|   197k|      shrink_vector (0);
  111|   197k|      hb_free (arrayZ);
  ------------------
  |  |  236|   197k|#define hb_free hb_free_impl
  ------------------
  112|   197k|    }
  113|   221k|    init ();
  114|   221k|  }
_ZN11hb_vector_tIN2OT15contour_point_tELb0EE4initEv:
   95|   221k|  {
   96|   221k|    allocated = length = 0;
   97|   221k|    arrayZ = nullptr;
   98|   221k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE4finiEv:
  104|  11.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  11.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 11.1k, False: 0]
  ------------------
  109|  11.1k|    {
  110|  11.1k|      shrink_vector (0);
  111|  11.1k|      hb_free (arrayZ);
  ------------------
  |  |  236|  11.1k|#define hb_free hb_free_impl
  ------------------
  112|  11.1k|    }
  113|  11.1k|    init ();
  114|  11.1k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE13shrink_vectorEj:
  347|  11.1k|  {
  348|  21.5k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 10.3k, False: 11.1k]
  ------------------
  349|  10.3k|    {
  350|  10.3k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  10.3k|      length--;
  352|  10.3k|    }
  353|  11.1k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE4initEv:
   95|  11.1k|  {
   96|  11.1k|    allocated = length = 0;
   97|  11.1k|    arrayZ = nullptr;
   98|  11.1k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE4finiEv:
  104|  22.2k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  22.2k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 22.2k, False: 0]
  ------------------
  109|  22.2k|    {
  110|  22.2k|      shrink_vector (0);
  111|  22.2k|      hb_free (arrayZ);
  ------------------
  |  |  236|  22.2k|#define hb_free hb_free_impl
  ------------------
  112|  22.2k|    }
  113|  22.2k|    init ();
  114|  22.2k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE13shrink_vectorEj:
  347|  22.2k|  {
  348|  43.2k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 20.9k, False: 22.2k]
  ------------------
  349|  20.9k|    {
  350|  20.9k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  20.9k|      length--;
  352|  20.9k|    }
  353|  22.2k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE4initEv:
   95|  22.2k|  {
   96|  22.2k|    allocated = length = 0;
   97|  22.2k|    arrayZ = nullptr;
   98|  22.2k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE4pushIS0_S0_LPv0EEEPS0_OT_:
  234|  11.1k|  {
  235|  11.1k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  11.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 345, False: 10.7k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    345|      return &Crap (Type);
  ------------------
  |  |  188|    345|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  10.7k|    length++;
  243|  10.7k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  10.7k|    return new (p) Type (std::forward<T> (v));
  245|  11.1k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE5allocEjb:
  364|   740k|  {
  365|   740k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   740k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 132k, False: 607k]
  |  |  ------------------
  ------------------
  366|   132k|      return false;
  367|       |
  368|   607k|    unsigned int new_allocated;
  369|   607k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 607k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|   607k|    else
  380|   607k|    {
  381|   607k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   607k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 589k, False: 17.4k]
  |  |  ------------------
  ------------------
  382|   589k|	return true;
  383|       |
  384|  17.4k|      new_allocated = allocated;
  385|  34.8k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 17.4k, False: 17.4k]
  ------------------
  386|  17.4k|	new_allocated += (new_allocated >> 1) + 8;
  387|  17.4k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  17.4k|    bool overflows =
  393|  17.4k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 17.4k]
  ------------------
  394|  17.4k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 17.4k]
  ------------------
  395|  17.4k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 17.4k]
  ------------------
  396|       |
  397|  17.4k|    if (unlikely (overflows))
  ------------------
  |  |  259|  17.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 17.4k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  17.4k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  17.4k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  34.8k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 734, False: 16.6k]
  |  |  |  Branch (259:47): [True: 17.4k, False: 0]
  |  |  |  Branch (259:47): [True: 734, False: 16.6k]
  |  |  ------------------
  ------------------
  406|    734|    {
  407|    734|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 734]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    734|      allocated = -1;
  411|    734|      return false;
  412|    734|    }
  413|       |
  414|  16.6k|    arrayZ = new_array;
  415|  16.6k|    allocated = new_allocated;
  416|       |
  417|  16.6k|    return true;
  418|  17.4k|  }
_ZNK11hb_vector_tI14hb_transform_tLb0EE8in_errorEv:
  247|   757k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tI14hb_transform_tLb0EE14realloc_vectorIS0_LPv0EEEPS0_j:
  253|  17.4k|  {
  254|  17.4k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 17.4k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  17.4k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  17.4k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  17.4k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE4pushIS0_S0_LPv0EEEPS0_OT_:
  234|  1.74M|  {
  235|  1.74M|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  1.74M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 96.3k, False: 1.64M]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|  96.3k|      return &Crap (Type);
  ------------------
  |  |  188|  96.3k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  1.64M|    length++;
  243|  1.64M|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  1.64M|    return new (p) Type (std::forward<T> (v));
  245|  1.74M|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE5allocEjb:
  364|  1.74M|  {
  365|  1.74M|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  1.74M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 95.0k, False: 1.64M]
  |  |  ------------------
  ------------------
  366|  95.0k|      return false;
  367|       |
  368|  1.64M|    unsigned int new_allocated;
  369|  1.64M|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 1.64M]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  1.64M|    else
  380|  1.64M|    {
  381|  1.64M|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  1.64M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.62M, False: 27.3k]
  |  |  ------------------
  ------------------
  382|  1.62M|	return true;
  383|       |
  384|  27.3k|      new_allocated = allocated;
  385|  54.6k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 27.3k, False: 27.3k]
  ------------------
  386|  27.3k|	new_allocated += (new_allocated >> 1) + 8;
  387|  27.3k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  27.3k|    bool overflows =
  393|  27.3k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 27.3k]
  ------------------
  394|  27.3k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 27.3k]
  ------------------
  395|  27.3k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 27.3k]
  ------------------
  396|       |
  397|  27.3k|    if (unlikely (overflows))
  ------------------
  |  |  259|  27.3k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 27.3k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  27.3k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  27.3k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  54.6k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.25k, False: 26.0k]
  |  |  |  Branch (259:47): [True: 27.3k, False: 0]
  |  |  |  Branch (259:47): [True: 1.25k, False: 26.0k]
  |  |  ------------------
  ------------------
  406|  1.25k|    {
  407|  1.25k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.25k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.25k|      allocated = -1;
  411|  1.25k|      return false;
  412|  1.25k|    }
  413|       |
  414|  26.0k|    arrayZ = new_array;
  415|  26.0k|    allocated = new_allocated;
  416|       |
  417|  26.0k|    return true;
  418|  27.3k|  }
_ZNK11hb_vector_tI11hb_bounds_tLb0EE8in_errorEv:
  247|  1.77M|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tI11hb_bounds_tLb0EE14realloc_vectorIS0_LPv0EEEPS0_j:
  253|  27.3k|  {
  254|  27.3k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 27.3k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  27.3k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  27.3k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  27.3k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE4tailEv:
  172|  1.87M|  Type& tail () { return (*this)[length - 1]; }
_ZN11hb_vector_tI11hb_bounds_tLb0EEixEi:
  158|  1.87M|  {
  159|  1.87M|    unsigned int i = (unsigned int) i_;
  160|  1.87M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  1.87M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 109k, False: 1.76M]
  |  |  ------------------
  ------------------
  161|   109k|      return Crap (Type);
  ------------------
  |  |  188|   109k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  1.76M|    return arrayZ[i];
  163|  1.87M|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE4tailEv:
  172|   841k|  Type& tail () { return (*this)[length - 1]; }
_ZN11hb_vector_tI14hb_transform_tLb0EEixEi:
  158|   841k|  {
  159|   841k|    unsigned int i = (unsigned int) i_;
  160|   841k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   841k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 135k, False: 705k]
  |  |  ------------------
  ------------------
  161|   135k|      return Crap (Type);
  ------------------
  |  |  188|   135k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   705k|    return arrayZ[i];
  163|   841k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE4pushIRS0_S0_LPv0EEEPS0_OT_:
  234|   728k|  {
  235|   728k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|   728k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 133k, False: 595k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|   133k|      return &Crap (Type);
  ------------------
  |  |  188|   133k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|   595k|    length++;
  243|   595k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|   595k|    return new (p) Type (std::forward<T> (v));
  245|   728k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EE3popEv:
  446|   728k|  {
  447|   728k|    if (!length) return Null (Type);
  ------------------
  |  |  124|   132k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (447:9): [True: 132k, False: 596k]
  ------------------
  448|   596k|    Type v {std::move (arrayZ[length - 1])};
  449|   596k|    arrayZ[length - 1].~Type ();
  450|   596k|    length--;
  451|   596k|    return v;
  452|   728k|  }
_ZN11hb_vector_tI11hb_bounds_tLb0EE3popEv:
  446|  1.72M|  {
  447|  1.72M|    if (!length) return Null (Type);
  ------------------
  |  |  124|  95.0k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  |  Branch (447:9): [True: 95.0k, False: 1.62M]
  ------------------
  448|  1.62M|    Type v {std::move (arrayZ[length - 1])};
  449|  1.62M|    arrayZ[length - 1].~Type ();
  450|  1.62M|    length--;
  451|  1.62M|    return v;
  452|  1.72M|  }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EEC2Ev:
   45|  98.5k|  hb_vector_t () = default;
_ZN11hb_vector_tI13hb_bit_page_tLb0EEC2Ev:
   45|  98.5k|  hb_vector_t () = default;
_ZN11hb_vector_tI13hb_bit_page_tLb0EED2Ev:
   86|  98.5k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN12hb_bit_set_t10page_map_tELb1EED2Ev:
   86|  98.5k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIcLb0EE5allocEjb:
  364|    834|  {
  365|    834|    if (unlikely (in_error ()))
  ------------------
  |  |  259|    834|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 834]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|    834|    unsigned int new_allocated;
  369|    834|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 834]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|    834|    else
  380|    834|    {
  381|    834|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|    834|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 834]
  |  |  ------------------
  ------------------
  382|      0|	return true;
  383|       |
  384|    834|      new_allocated = allocated;
  385|  6.67k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 5.83k, False: 834]
  ------------------
  386|  5.83k|	new_allocated += (new_allocated >> 1) + 8;
  387|    834|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|    834|    bool overflows =
  393|    834|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 834]
  ------------------
  394|    834|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 834]
  ------------------
  395|    834|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 834]
  ------------------
  396|       |
  397|    834|    if (unlikely (overflows))
  ------------------
  |  |  259|    834|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 834]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|    834|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|    834|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  1.66k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 68, False: 766]
  |  |  |  Branch (259:47): [True: 834, False: 0]
  |  |  |  Branch (259:47): [True: 68, False: 766]
  |  |  ------------------
  ------------------
  406|     68|    {
  407|     68|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 68]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     68|      allocated = -1;
  411|     68|      return false;
  412|     68|    }
  413|       |
  414|    766|    arrayZ = new_array;
  415|    766|    allocated = new_allocated;
  416|       |
  417|    766|    return true;
  418|    834|  }
_ZNK11hb_vector_tIcLb0EE8in_errorEv:
  247|  1.66k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIcLb0EE14realloc_vectorIcLPv0EEEPcj:
  253|    834|  {
  254|    834|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 834]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|    834|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|    834|#define hb_realloc hb_realloc_impl
  ------------------
  260|    834|  }
_ZN11hb_vector_tIcLb0EE13shrink_vectorEj:
  347|    834|  {
  348|   158k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 157k, False: 834]
  ------------------
  349|   157k|    {
  350|   157k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   157k|      length--;
  352|   157k|    }
  353|    834|  }
_ZN11hb_vector_tIcLb0EE4initEv:
   95|    834|  {
   96|    834|    allocated = length = 0;
   97|    834|    arrayZ = nullptr;
   98|    834|  }
_ZN11hb_vector_tIcLb0EE4finiEv:
  104|    834|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|    834|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 834, False: 0]
  ------------------
  109|    834|    {
  110|    834|      shrink_vector (0);
  111|    834|      hb_free (arrayZ);
  ------------------
  |  |  236|    834|#define hb_free hb_free_impl
  ------------------
  112|    834|    }
  113|    834|    init ();
  114|    834|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EED2Ev:
   86|  32.6k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE4finiEv:
  104|  32.6k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  32.6k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 665, False: 31.9k]
  ------------------
  109|    665|    {
  110|    665|      shrink_vector (0);
  111|    665|      hb_free (arrayZ);
  ------------------
  |  |  236|    665|#define hb_free hb_free_impl
  ------------------
  112|    665|    }
  113|  32.6k|    init ();
  114|  32.6k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE13shrink_vectorEj:
  347|  1.10k|  {
  348|   566k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 565k, False: 1.10k]
  ------------------
  349|   565k|    {
  350|   565k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   565k|      length--;
  352|   565k|    }
  353|  1.10k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE4initEv:
   95|  32.6k|  {
   96|  32.6k|    allocated = length = 0;
   97|  32.6k|    arrayZ = nullptr;
   98|  32.6k|  }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE4finiEv:
  104|    829|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|    829|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 829, False: 0]
  ------------------
  109|    829|    {
  110|    829|      shrink_vector (0);
  111|    829|      hb_free (arrayZ);
  ------------------
  |  |  236|    829|#define hb_free hb_free_impl
  ------------------
  112|    829|    }
  113|    829|    init ();
  114|    829|  }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE13shrink_vectorEj:
  347|    829|  {
  348|   118k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 117k, False: 829]
  ------------------
  349|   117k|    {
  350|   117k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   117k|      length--;
  352|   117k|    }
  353|    829|  }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE4initEv:
   95|  1.65k|  {
   96|  1.65k|    allocated = length = 0;
   97|  1.65k|    arrayZ = nullptr;
   98|  1.65k|  }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE4finiEv:
  104|  97.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  97.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 1.63k, False: 95.4k]
  ------------------
  109|  1.63k|    {
  110|  1.63k|      shrink_vector (0);
  111|  1.63k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.63k|#define hb_free hb_free_impl
  ------------------
  112|  1.63k|    }
  113|  97.1k|    init ();
  114|  97.1k|  }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE13shrink_vectorEj:
  347|  1.63k|  {
  348|  13.0k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 11.4k, False: 1.63k]
  ------------------
  349|  11.4k|    {
  350|  11.4k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  11.4k|      length--;
  352|  11.4k|    }
  353|  1.63k|  }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE4initEv:
   95|   131k|  {
   96|   131k|    allocated = length = 0;
   97|   131k|    arrayZ = nullptr;
   98|   131k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE4finiEv:
  104|  97.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  97.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 115, False: 96.9k]
  ------------------
  109|    115|    {
  110|    115|      shrink_vector (0);
  111|    115|      hb_free (arrayZ);
  ------------------
  |  |  236|    115|#define hb_free hb_free_impl
  ------------------
  112|    115|    }
  113|  97.1k|    init ();
  114|  97.1k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE13shrink_vectorEj:
  347|    115|  {
  348|  23.6k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 23.5k, False: 115]
  ------------------
  349|  23.5k|    {
  350|  23.5k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  23.5k|      length--;
  352|  23.5k|    }
  353|    115|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EED2Ev:
   86|   267k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE4finiEv:
  104|   330k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   330k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 3.34k, False: 326k]
  ------------------
  109|  3.34k|    {
  110|  3.34k|      shrink_vector (0);
  111|  3.34k|      hb_free (arrayZ);
  ------------------
  |  |  236|  3.34k|#define hb_free hb_free_impl
  ------------------
  112|  3.34k|    }
  113|   330k|    init ();
  114|   330k|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE13shrink_vectorEj:
  347|  3.34k|  {
  348|  9.12k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 5.77k, False: 3.34k]
  ------------------
  349|  5.77k|    {
  350|  5.77k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  5.77k|      length--;
  352|  5.77k|    }
  353|  3.34k|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE4initEv:
   95|   504k|  {
   96|   504k|    allocated = length = 0;
   97|   504k|    arrayZ = nullptr;
   98|   504k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE4initEv:
   95|   129k|  {
   96|   129k|    allocated = length = 0;
   97|   129k|    arrayZ = nullptr;
   98|   129k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE4finiEv:
  104|  97.1k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  97.1k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 1.36k, False: 95.7k]
  ------------------
  109|  1.36k|    {
  110|  1.36k|      shrink_vector (0);
  111|  1.36k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.36k|#define hb_free hb_free_impl
  ------------------
  112|  1.36k|    }
  113|  97.1k|    init ();
  114|  97.1k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE13shrink_vectorEj:
  347|  1.36k|  {
  348|  47.7k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 46.3k, False: 1.36k]
  ------------------
  349|  46.3k|    {
  350|  46.3k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  46.3k|      length--;
  352|  46.3k|    }
  353|  1.36k|  }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EED2Ev:
   86|   219k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE4finiEv:
  104|   219k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   219k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 1.98k, False: 217k]
  ------------------
  109|  1.98k|    {
  110|  1.98k|      shrink_vector (0);
  111|  1.98k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.98k|#define hb_free hb_free_impl
  ------------------
  112|  1.98k|    }
  113|   219k|    init ();
  114|   219k|  }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE13shrink_vectorEj:
  347|  1.98k|  {
  348|  14.4k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 12.4k, False: 1.98k]
  ------------------
  349|  12.4k|    {
  350|  12.4k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  12.4k|      length--;
  352|  12.4k|    }
  353|  1.98k|  }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE4initEv:
   95|   408k|  {
   96|   408k|    allocated = length = 0;
   97|   408k|    arrayZ = nullptr;
   98|   408k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE4initEv:
   95|   129k|  {
   96|   129k|    allocated = length = 0;
   97|   129k|    arrayZ = nullptr;
   98|   129k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EED2Ev:
   86|  32.7k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EED2Ev:
   86|  32.7k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EED2Ev:
   86|  32.7k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE4finiEv:
  104|  95.0k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  95.0k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 331, False: 94.7k]
  ------------------
  109|    331|    {
  110|    331|      shrink_vector (0);
  111|    331|      hb_free (arrayZ);
  ------------------
  |  |  236|    331|#define hb_free hb_free_impl
  ------------------
  112|    331|    }
  113|  95.0k|    init ();
  114|  95.0k|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE13shrink_vectorEj:
  347|    331|  {
  348|  46.5k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 46.2k, False: 331]
  ------------------
  349|  46.2k|    {
  350|  46.2k|      arrayZ[(unsigned) length - 1].~Type ();
  351|  46.2k|      length--;
  352|  46.2k|    }
  353|    331|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE4initEv:
   95|   127k|  {
   96|   127k|    allocated = length = 0;
   97|   127k|    arrayZ = nullptr;
   98|   127k|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE4finiEv:
  104|  95.0k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  95.0k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 333, False: 94.7k]
  ------------------
  109|    333|    {
  110|    333|      shrink_vector (0);
  111|    333|      hb_free (arrayZ);
  ------------------
  |  |  236|    333|#define hb_free hb_free_impl
  ------------------
  112|    333|    }
  113|  95.0k|    init ();
  114|  95.0k|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE13shrink_vectorEj:
  347|    333|  {
  348|   173k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 173k, False: 333]
  ------------------
  349|   173k|    {
  350|   173k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   173k|      length--;
  352|   173k|    }
  353|    333|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE4initEv:
   95|   127k|  {
   96|   127k|    allocated = length = 0;
   97|   127k|    arrayZ = nullptr;
   98|   127k|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EED2Ev:
   86|  31.9k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EED2Ev:
   86|  31.9k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE4pushIRKS1_S1_LPv0EEEPS1_OT_:
  234|  11.7k|  {
  235|  11.7k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  11.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 309, False: 11.4k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    309|      return &Crap (Type);
  ------------------
  |  |  188|    309|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  11.4k|    length++;
  243|  11.4k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  11.4k|    return new (p) Type (std::forward<T> (v));
  245|  11.7k|  }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE5allocEjb:
  364|  11.7k|  {
  365|  11.7k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  11.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 297, False: 11.4k]
  |  |  ------------------
  ------------------
  366|    297|      return false;
  367|       |
  368|  11.4k|    unsigned int new_allocated;
  369|  11.4k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 11.4k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  11.4k|    else
  380|  11.4k|    {
  381|  11.4k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  11.4k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 9.40k, False: 2.07k]
  |  |  ------------------
  ------------------
  382|  9.40k|	return true;
  383|       |
  384|  2.07k|      new_allocated = allocated;
  385|  4.14k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 2.07k, False: 2.07k]
  ------------------
  386|  2.07k|	new_allocated += (new_allocated >> 1) + 8;
  387|  2.07k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  2.07k|    bool overflows =
  393|  2.07k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 2.07k]
  ------------------
  394|  2.07k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 2.07k]
  ------------------
  395|  2.07k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 2.07k]
  ------------------
  396|       |
  397|  2.07k|    if (unlikely (overflows))
  ------------------
  |  |  259|  2.07k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.07k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  2.07k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  2.07k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  4.14k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 12, False: 2.06k]
  |  |  |  Branch (259:47): [True: 2.07k, False: 0]
  |  |  |  Branch (259:47): [True: 12, False: 2.06k]
  |  |  ------------------
  ------------------
  406|     12|    {
  407|     12|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 12]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     12|      allocated = -1;
  411|     12|      return false;
  412|     12|    }
  413|       |
  414|  2.06k|    arrayZ = new_array;
  415|  2.06k|    allocated = new_allocated;
  416|       |
  417|  2.06k|    return true;
  418|  2.07k|  }
_ZNK11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE8in_errorEv:
  247|  13.8k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  2.07k|  {
  254|  2.07k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 2.07k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  2.07k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  2.07k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  2.07k|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE4pushIRKS1_S1_LPv0EEEPS1_OT_:
  234|  5.90k|  {
  235|  5.90k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  5.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 130, False: 5.77k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    130|      return &Crap (Type);
  ------------------
  |  |  188|    130|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  5.77k|    length++;
  243|  5.77k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  5.77k|    return new (p) Type (std::forward<T> (v));
  245|  5.90k|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE5allocEjb:
  364|  5.90k|  {
  365|  5.90k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  5.90k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 61, False: 5.84k]
  |  |  ------------------
  ------------------
  366|     61|      return false;
  367|       |
  368|  5.84k|    unsigned int new_allocated;
  369|  5.84k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 5.84k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  5.84k|    else
  380|  5.84k|    {
  381|  5.84k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  5.84k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 2.47k, False: 3.37k]
  |  |  ------------------
  ------------------
  382|  2.47k|	return true;
  383|       |
  384|  3.37k|      new_allocated = allocated;
  385|  6.74k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 3.37k, False: 3.37k]
  ------------------
  386|  3.37k|	new_allocated += (new_allocated >> 1) + 8;
  387|  3.37k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  3.37k|    bool overflows =
  393|  3.37k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 3.37k]
  ------------------
  394|  3.37k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 3.37k]
  ------------------
  395|  3.37k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 3.37k]
  ------------------
  396|       |
  397|  3.37k|    if (unlikely (overflows))
  ------------------
  |  |  259|  3.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 3.37k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  3.37k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  3.37k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  6.74k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 69, False: 3.30k]
  |  |  |  Branch (259:47): [True: 3.37k, False: 0]
  |  |  |  Branch (259:47): [True: 69, False: 3.30k]
  |  |  ------------------
  ------------------
  406|     69|    {
  407|     69|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 69]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     69|      allocated = -1;
  411|     69|      return false;
  412|     69|    }
  413|       |
  414|  3.30k|    arrayZ = new_array;
  415|  3.30k|    allocated = new_allocated;
  416|       |
  417|  3.30k|    return true;
  418|  3.37k|  }
_ZNK11hb_vector_tIN3CFF8op_str_tELb0EE8in_errorEv:
  247|  9.27k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  3.37k|  {
  254|  3.37k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 3.37k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  3.37k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  3.37k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  3.37k|  }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE4pushIRKS1_S1_LPv0EEEPS1_OT_:
  234|  13.1k|  {
  235|  13.1k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 685, False: 12.4k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    685|      return &Crap (Type);
  ------------------
  |  |  188|    685|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|  12.4k|    length++;
  243|  12.4k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|  12.4k|    return new (p) Type (std::forward<T> (v));
  245|  13.1k|  }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE5allocEjb:
  364|  13.1k|  {
  365|  13.1k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  13.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 626, False: 12.5k]
  |  |  ------------------
  ------------------
  366|    626|      return false;
  367|       |
  368|  12.5k|    unsigned int new_allocated;
  369|  12.5k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 12.5k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  12.5k|    else
  380|  12.5k|    {
  381|  12.5k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  12.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 10.2k, False: 2.25k]
  |  |  ------------------
  ------------------
  382|  10.2k|	return true;
  383|       |
  384|  2.25k|      new_allocated = allocated;
  385|  4.50k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 2.25k, False: 2.25k]
  ------------------
  386|  2.25k|	new_allocated += (new_allocated >> 1) + 8;
  387|  2.25k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  2.25k|    bool overflows =
  393|  2.25k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 2.25k]
  ------------------
  394|  2.25k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 2.25k]
  ------------------
  395|  2.25k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 2.25k]
  ------------------
  396|       |
  397|  2.25k|    if (unlikely (overflows))
  ------------------
  |  |  259|  2.25k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.25k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  2.25k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  2.25k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  4.50k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 59, False: 2.19k]
  |  |  |  Branch (259:47): [True: 2.25k, False: 0]
  |  |  |  Branch (259:47): [True: 59, False: 2.19k]
  |  |  ------------------
  ------------------
  406|     59|    {
  407|     59|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 59]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     59|      allocated = -1;
  411|     59|      return false;
  412|     59|    }
  413|       |
  414|  2.19k|    arrayZ = new_array;
  415|  2.19k|    allocated = new_allocated;
  416|       |
  417|  2.19k|    return true;
  418|  2.25k|  }
_ZNK11hb_vector_tIN3CFF10dict_val_tELb0EE8in_errorEv:
  247|  15.4k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  2.25k|  {
  254|  2.25k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 2.25k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  2.25k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  2.25k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  2.25k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE6resizeEibb:
  421|  1.37k|  {
  422|  1.37k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 1.37k]
  ------------------
  423|  1.37k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 1, False: 1.37k]
  ------------------
  424|      1|      return false;
  425|       |
  426|  1.37k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 1.36k, False: 4]
  ------------------
  427|  1.36k|    {
  428|  1.36k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 1.36k, False: 0]
  ------------------
  429|  1.36k|	grow_vector (size);
  430|  1.36k|    }
  431|      4|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 4]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  1.37k|    length = size;
  438|  1.37k|    return true;
  439|  1.37k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE5allocEjb:
  364|  1.37k|  {
  365|  1.37k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  1.37k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.37k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  1.37k|    unsigned int new_allocated;
  369|  1.37k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 1.37k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  1.37k|    else
  380|  1.37k|    {
  381|  1.37k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  1.37k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 4, False: 1.36k]
  |  |  ------------------
  ------------------
  382|      4|	return true;
  383|       |
  384|  1.36k|      new_allocated = allocated;
  385|  3.38k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 2.01k, False: 1.36k]
  ------------------
  386|  2.01k|	new_allocated += (new_allocated >> 1) + 8;
  387|  1.36k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  1.36k|    bool overflows =
  393|  1.36k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 1.36k]
  ------------------
  394|  1.36k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 1.36k]
  ------------------
  395|  1.36k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 1.36k]
  ------------------
  396|       |
  397|  1.36k|    if (unlikely (overflows))
  ------------------
  |  |  259|  1.36k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.36k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  1.36k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  1.36k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  2.73k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 1.36k]
  |  |  |  Branch (259:47): [True: 1.36k, False: 0]
  |  |  |  Branch (259:47): [True: 1, False: 1.36k]
  |  |  ------------------
  ------------------
  406|      1|    {
  407|      1|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      1|      allocated = -1;
  411|      1|      return false;
  412|      1|    }
  413|       |
  414|  1.36k|    arrayZ = new_array;
  415|  1.36k|    allocated = new_allocated;
  416|       |
  417|  1.36k|    return true;
  418|  1.36k|  }
_ZNK11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE8in_errorEv:
  247|  2.74k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE14realloc_vectorIS3_LPv0EEEPS3_j:
  265|  1.36k|  {
  266|  1.36k|    if (!new_allocated)
  ------------------
  |  Branch (266:9): [True: 0, False: 1.36k]
  ------------------
  267|      0|    {
  268|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  269|      0|      return nullptr;
  270|      0|    }
  271|  1.36k|    Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
  ------------------
  |  |  233|  1.36k|#define hb_malloc hb_malloc_impl
  ------------------
  272|  1.36k|    if (likely (new_array))
  ------------------
  |  |  258|  1.36k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.36k, False: 1]
  |  |  ------------------
  ------------------
  273|  1.36k|    {
  274|  1.36k|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (274:28): [True: 0, False: 1.36k]
  ------------------
  275|      0|      {
  276|      0|	new (std::addressof (new_array[i])) Type ();
  277|      0|	new_array[i] = std::move (arrayZ[i]);
  278|      0|	arrayZ[i].~Type ();
  279|      0|      }
  280|  1.36k|      hb_free (arrayZ);
  ------------------
  |  |  236|  1.36k|#define hb_free hb_free_impl
  ------------------
  281|  1.36k|    }
  282|  1.36k|    return new_array;
  283|  1.36k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EE11grow_vectorIS3_LPv0EEEvj:
  297|  1.36k|  {
  298|  47.7k|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 46.3k, False: 1.36k]
  ------------------
  299|  46.3k|      new (std::addressof (arrayZ[length])) Type ();
  300|  1.36k|  }
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EEixEi:
  158|  71.1k|  {
  159|  71.1k|    unsigned int i = (unsigned int) i_;
  160|  71.1k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  71.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 71.1k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  71.1k|    return arrayZ[i];
  163|  71.1k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE4pushEv:
  210|  23.5k|  {
  211|  23.5k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 23.5k]
  |  |  ------------------
  ------------------
  212|      5|      return &Crap (Type);
  ------------------
  |  |  188|      5|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  23.5k|    return std::addressof (arrayZ[length - 1]);
  214|  23.5k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE6resizeEibb:
  421|  23.5k|  {
  422|  23.5k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 23.5k]
  ------------------
  423|  23.5k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 5, False: 23.5k]
  ------------------
  424|      5|      return false;
  425|       |
  426|  23.5k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 23.5k, False: 0]
  ------------------
  427|  23.5k|    {
  428|  23.5k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 23.5k, False: 0]
  ------------------
  429|  23.5k|	grow_vector (size);
  430|  23.5k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  23.5k|    length = size;
  438|  23.5k|    return true;
  439|  23.5k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE5allocEjb:
  364|  23.5k|  {
  365|  23.5k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  23.5k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 23.5k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  23.5k|    unsigned int new_allocated;
  369|  23.5k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 23.5k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  23.5k|    else
  380|  23.5k|    {
  381|  23.5k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  23.5k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 23.0k, False: 494]
  |  |  ------------------
  ------------------
  382|  23.0k|	return true;
  383|       |
  384|    494|      new_allocated = allocated;
  385|    988|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 494, False: 494]
  ------------------
  386|    494|	new_allocated += (new_allocated >> 1) + 8;
  387|    494|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|    494|    bool overflows =
  393|    494|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 494]
  ------------------
  394|    494|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 494]
  ------------------
  395|    494|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 494]
  ------------------
  396|       |
  397|    494|    if (unlikely (overflows))
  ------------------
  |  |  259|    494|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 494]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|    494|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|    494|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|    988|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 5, False: 489]
  |  |  |  Branch (259:47): [True: 494, False: 0]
  |  |  |  Branch (259:47): [True: 5, False: 489]
  |  |  ------------------
  ------------------
  406|      5|    {
  407|      5|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 5]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      5|      allocated = -1;
  411|      5|      return false;
  412|      5|    }
  413|       |
  414|    489|    arrayZ = new_array;
  415|    489|    allocated = new_allocated;
  416|       |
  417|    489|    return true;
  418|    494|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  265|    494|  {
  266|    494|    if (!new_allocated)
  ------------------
  |  Branch (266:9): [True: 0, False: 494]
  ------------------
  267|      0|    {
  268|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  269|      0|      return nullptr;
  270|      0|    }
  271|    494|    Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
  ------------------
  |  |  233|    494|#define hb_malloc hb_malloc_impl
  ------------------
  272|    494|    if (likely (new_array))
  ------------------
  |  |  258|    494|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 489, False: 5]
  |  |  ------------------
  ------------------
  273|    489|    {
  274|  56.8k|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (274:28): [True: 56.3k, False: 489]
  ------------------
  275|  56.3k|      {
  276|  56.3k|	new (std::addressof (new_array[i])) Type ();
  277|  56.3k|	new_array[i] = std::move (arrayZ[i]);
  278|  56.3k|	arrayZ[i].~Type ();
  279|  56.3k|      }
  280|    489|      hb_free (arrayZ);
  ------------------
  |  |  236|    489|#define hb_free hb_free_impl
  ------------------
  281|    489|    }
  282|    494|    return new_array;
  283|    494|  }
_ZN11hb_vector_tIN3CFF8op_str_tELb0EEaSEOS2_:
  145|   165k|  {
  146|   165k|    hb_swap (*this, o);
  147|   165k|    return *this;
  148|   165k|  }
_Z4swapR11hb_vector_tIN3CFF8op_str_tELb0EES3_:
  128|   165k|  {
  129|   165k|    hb_swap (a.allocated, b.allocated);
  130|   165k|    hb_swap (a.length, b.length);
  131|   165k|    hb_swap (a.arrayZ, b.arrayZ);
  132|   165k|  }
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  297|  23.5k|  {
  298|  47.1k|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 23.5k, False: 23.5k]
  ------------------
  299|  23.5k|      new (std::addressof (arrayZ[length])) Type ();
  300|  23.5k|  }
_ZNK11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EE8in_errorEv:
  247|  47.6k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE4pushIRS3_S3_LPv0EEEPS3_OT_:
  234|   117k|  {
  235|   117k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|   117k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 117k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|      0|      return &Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|   117k|    length++;
  243|   117k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|   117k|    return new (p) Type (std::forward<T> (v));
  245|   117k|  }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE5allocEjb:
  364|   117k|  {
  365|   117k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   117k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 117k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|   117k|    unsigned int new_allocated;
  369|   117k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 117k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|   117k|    else
  380|   117k|    {
  381|   117k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   117k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 115k, False: 2.34k]
  |  |  ------------------
  ------------------
  382|   115k|	return true;
  383|       |
  384|  2.34k|      new_allocated = allocated;
  385|  4.68k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 2.34k, False: 2.34k]
  ------------------
  386|  2.34k|	new_allocated += (new_allocated >> 1) + 8;
  387|  2.34k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  2.34k|    bool overflows =
  393|  2.34k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 2.34k]
  ------------------
  394|  2.34k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 2.34k]
  ------------------
  395|  2.34k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 2.34k]
  ------------------
  396|       |
  397|  2.34k|    if (unlikely (overflows))
  ------------------
  |  |  259|  2.34k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.34k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  2.34k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  2.34k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  4.68k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 2.34k]
  |  |  |  Branch (259:47): [True: 2.34k, False: 0]
  |  |  |  Branch (259:47): [True: 0, False: 2.34k]
  |  |  ------------------
  ------------------
  406|      0|    {
  407|      0|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 0]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      0|      allocated = -1;
  411|      0|      return false;
  412|      0|    }
  413|       |
  414|  2.34k|    arrayZ = new_array;
  415|  2.34k|    allocated = new_allocated;
  416|       |
  417|  2.34k|    return true;
  418|  2.34k|  }
_ZNK11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE8in_errorEv:
  247|   120k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE14realloc_vectorIS3_LPv0EEEPS3_j:
  253|  2.34k|  {
  254|  2.34k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 2.34k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  2.34k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  2.34k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  2.34k|  }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE5qsortEPFiPKvS6_E:
  490|    829|  { as_array ().qsort (cmp); }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE8as_arrayEv:
  182|  1.65k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN2OT4cff113accelerator_t7gname_tELb1EE7bsearchIS3_Lb1ELPv0EEEPS3_RKT_S7_:
  507|    829|  { return as_array ().bsearch (x, not_found); }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE6resizeEibb:
  421|  1.00k|  {
  422|  1.00k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 1.00k]
  ------------------
  423|  1.00k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 2, False: 1.00k]
  ------------------
  424|      2|      return false;
  425|       |
  426|  1.00k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 331, False: 671]
  ------------------
  427|    331|    {
  428|    331|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 331, False: 0]
  ------------------
  429|    331|	grow_vector (size);
  430|    331|    }
  431|    671|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 671]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  1.00k|    length = size;
  438|  1.00k|    return true;
  439|  1.00k|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE5allocEjb:
  364|  1.00k|  {
  365|  1.00k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  1.00k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  1.00k|    unsigned int new_allocated;
  369|  1.00k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 1.00k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  1.00k|    else
  380|  1.00k|    {
  381|  1.00k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  1.00k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 671, False: 333]
  |  |  ------------------
  ------------------
  382|    671|	return true;
  383|       |
  384|    333|      new_allocated = allocated;
  385|  1.33k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 999, False: 333]
  ------------------
  386|    999|	new_allocated += (new_allocated >> 1) + 8;
  387|    333|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|    333|    bool overflows =
  393|    333|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 333]
  ------------------
  394|    333|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 333]
  ------------------
  395|    333|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 333]
  ------------------
  396|       |
  397|    333|    if (unlikely (overflows))
  ------------------
  |  |  259|    333|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 333]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|    333|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|    333|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|    666|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2, False: 331]
  |  |  |  Branch (259:47): [True: 333, False: 0]
  |  |  |  Branch (259:47): [True: 2, False: 331]
  |  |  ------------------
  ------------------
  406|      2|    {
  407|      2|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 2]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      2|      allocated = -1;
  411|      2|      return false;
  412|      2|    }
  413|       |
  414|    331|    arrayZ = new_array;
  415|    331|    allocated = new_allocated;
  416|       |
  417|    331|    return true;
  418|    333|  }
_ZNK11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE8in_errorEv:
  247|  1.33k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE14realloc_vectorIS3_LPv0EEEPS3_j:
  265|    333|  {
  266|    333|    if (!new_allocated)
  ------------------
  |  Branch (266:9): [True: 0, False: 333]
  ------------------
  267|      0|    {
  268|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  269|      0|      return nullptr;
  270|      0|    }
  271|    333|    Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
  ------------------
  |  |  233|    333|#define hb_malloc hb_malloc_impl
  ------------------
  272|    333|    if (likely (new_array))
  ------------------
  |  |  258|    333|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 331, False: 2]
  |  |  ------------------
  ------------------
  273|    331|    {
  274|    331|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (274:28): [True: 0, False: 331]
  ------------------
  275|      0|      {
  276|      0|	new (std::addressof (new_array[i])) Type ();
  277|      0|	new_array[i] = std::move (arrayZ[i]);
  278|      0|	arrayZ[i].~Type ();
  279|      0|      }
  280|    331|      hb_free (arrayZ);
  ------------------
  |  |  236|    331|#define hb_free hb_free_impl
  ------------------
  281|    331|    }
  282|    333|    return new_array;
  283|    333|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EE11grow_vectorIS3_LPv0EEEvj:
  297|    331|  {
  298|   173k|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 173k, False: 331]
  ------------------
  299|   173k|      new (std::addressof (arrayZ[length])) Type ();
  300|    331|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE4pushEv:
  210|  46.2k|  {
  211|  46.2k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  46.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 46.2k]
  |  |  ------------------
  ------------------
  212|      9|      return &Crap (Type);
  ------------------
  |  |  188|      9|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  46.2k|    return std::addressof (arrayZ[length - 1]);
  214|  46.2k|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE6resizeEibb:
  421|  46.2k|  {
  422|  46.2k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 46.2k]
  ------------------
  423|  46.2k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 9, False: 46.2k]
  ------------------
  424|      9|      return false;
  425|       |
  426|  46.2k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 46.2k, False: 0]
  ------------------
  427|  46.2k|    {
  428|  46.2k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 46.2k, False: 0]
  ------------------
  429|  46.2k|	grow_vector (size);
  430|  46.2k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  46.2k|    length = size;
  438|  46.2k|    return true;
  439|  46.2k|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE5allocEjb:
  364|  46.2k|  {
  365|  46.2k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  46.2k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 46.2k]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|  46.2k|    unsigned int new_allocated;
  369|  46.2k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 46.2k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  46.2k|    else
  380|  46.2k|    {
  381|  46.2k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  46.2k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 45.5k, False: 715]
  |  |  ------------------
  ------------------
  382|  45.5k|	return true;
  383|       |
  384|    715|      new_allocated = allocated;
  385|  1.43k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 715, False: 715]
  ------------------
  386|    715|	new_allocated += (new_allocated >> 1) + 8;
  387|    715|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|    715|    bool overflows =
  393|    715|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 715]
  ------------------
  394|    715|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 715]
  ------------------
  395|    715|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 715]
  ------------------
  396|       |
  397|    715|    if (unlikely (overflows))
  ------------------
  |  |  259|    715|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 715]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|    715|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|    715|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  1.43k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9, False: 706]
  |  |  |  Branch (259:47): [True: 715, False: 0]
  |  |  |  Branch (259:47): [True: 9, False: 706]
  |  |  ------------------
  ------------------
  406|      9|    {
  407|      9|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 9]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      9|      allocated = -1;
  411|      9|      return false;
  412|      9|    }
  413|       |
  414|    706|    arrayZ = new_array;
  415|    706|    allocated = new_allocated;
  416|       |
  417|    706|    return true;
  418|    715|  }
_ZNK11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE8in_errorEv:
  247|  46.9k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  265|    715|  {
  266|    715|    if (!new_allocated)
  ------------------
  |  Branch (266:9): [True: 0, False: 715]
  ------------------
  267|      0|    {
  268|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  269|      0|      return nullptr;
  270|      0|    }
  271|    715|    Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
  ------------------
  |  |  233|    715|#define hb_malloc hb_malloc_impl
  ------------------
  272|    715|    if (likely (new_array))
  ------------------
  |  |  258|    715|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 706, False: 9]
  |  |  ------------------
  ------------------
  273|    706|    {
  274|   109k|      for (unsigned i = 0; i < length; i++)
  ------------------
  |  Branch (274:28): [True: 109k, False: 706]
  ------------------
  275|   109k|      {
  276|   109k|	new (std::addressof (new_array[i])) Type ();
  277|   109k|	new_array[i] = std::move (arrayZ[i]);
  278|   109k|	arrayZ[i].~Type ();
  279|   109k|      }
  280|    706|      hb_free (arrayZ);
  ------------------
  |  |  236|    706|#define hb_free hb_free_impl
  ------------------
  281|    706|    }
  282|    715|    return new_array;
  283|    715|  }
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  297|  46.2k|  {
  298|  92.5k|    for (; length < size; length++)
  ------------------
  |  Branch (298:12): [True: 46.2k, False: 46.2k]
  ------------------
  299|  46.2k|      new (std::addressof (arrayZ[length])) Type ();
  300|  46.2k|  }
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EEixEi:
  158|   231k|  {
  159|   231k|    unsigned int i = (unsigned int) i_;
  160|   231k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   231k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 231k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   231k|    return arrayZ[i];
  163|   231k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE5allocEjb:
  364|   634k|  {
  365|   634k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   634k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.69k, False: 630k]
  |  |  ------------------
  ------------------
  366|  3.69k|      return false;
  367|       |
  368|   630k|    unsigned int new_allocated;
  369|   630k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 32.6k, False: 598k]
  ------------------
  370|  32.6k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  32.6k|      size = hb_max (size, length);
  373|  32.6k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 31.9k, False: 665]
  ------------------
  374|  32.6k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 31.9k, False: 0]
  ------------------
  375|  31.9k|	return true;
  376|       |
  377|    665|      new_allocated = size;
  378|    665|    }
  379|   598k|    else
  380|   598k|    {
  381|   598k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   598k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 598k, False: 0]
  |  |  ------------------
  ------------------
  382|   598k|	return true;
  383|       |
  384|      0|      new_allocated = allocated;
  385|      0|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 0, False: 0]
  ------------------
  386|      0|	new_allocated += (new_allocated >> 1) + 8;
  387|      0|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|    665|    bool overflows =
  393|    665|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 665]
  ------------------
  394|    665|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 665]
  ------------------
  395|    665|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 665]
  ------------------
  396|       |
  397|    665|    if (unlikely (overflows))
  ------------------
  |  |  259|    665|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 665]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|    665|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|    665|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  1.33k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 14, False: 651]
  |  |  |  Branch (259:47): [True: 665, False: 0]
  |  |  |  Branch (259:47): [True: 14, False: 651]
  |  |  ------------------
  ------------------
  406|     14|    {
  407|     14|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 14]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|     14|      allocated = -1;
  411|     14|      return false;
  412|     14|    }
  413|       |
  414|    651|    arrayZ = new_array;
  415|    651|    allocated = new_allocated;
  416|       |
  417|    651|    return true;
  418|    665|  }
_ZNK11hb_vector_tI18hb_ot_name_entry_tLb0EE8in_errorEv:
  247|   635k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE14realloc_vectorIS0_LPv0EEEPS0_j:
  253|    665|  {
  254|    665|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 665]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|    665|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|    665|#define hb_realloc hb_realloc_impl
  ------------------
  260|    665|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE4pushEv:
  210|   569k|  {
  211|   569k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|   569k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 3.67k, False: 565k]
  |  |  ------------------
  ------------------
  212|  3.67k|      return &Crap (Type);
  ------------------
  |  |  188|  3.67k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|   565k|    return std::addressof (arrayZ[length - 1]);
  214|   569k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE5qsortEPFiPKvS3_E:
  490|  32.6k|  { as_array ().qsort (cmp); }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE8as_arrayEv:
  182|  32.6k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EEixEi:
  158|  1.19M|  {
  159|  1.19M|    unsigned int i = (unsigned int) i_;
  160|  1.19M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  1.19M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.19M]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  1.19M|    return arrayZ[i];
  163|  1.19M|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE6resizeEibb:
  421|   602k|  {
  422|   602k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 602k]
  ------------------
  423|   602k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 3.69k, False: 598k]
  ------------------
  424|  3.69k|      return false;
  425|       |
  426|   598k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 565k, False: 32.6k]
  ------------------
  427|   565k|    {
  428|   565k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 565k, False: 0]
  ------------------
  429|   565k|	grow_vector (size);
  430|   565k|    }
  431|  32.6k|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 441, False: 32.2k]
  ------------------
  432|    441|    {
  433|    441|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 441, False: 0]
  ------------------
  434|    441|	shrink_vector (size);
  435|    441|    }
  436|       |
  437|   598k|    length = size;
  438|   598k|    return true;
  439|   602k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EE11grow_vectorIS0_LPv0EEEvj:
  289|   565k|  {
  290|   565k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   565k|    length = size;
  292|   565k|  }
_ZNK11hb_vector_tI18hb_ot_name_entry_tLb0EEcvPKT_IS0_EEv:
  204|   232k|  template <typename T> explicit operator const T * () const { return arrayZ; }
_ZN11hb_vector_tIjLb0EE4pushIljLPv0EEEPjOT_:
  234|   343k|  {
  235|   343k|    if (unlikely (!alloc (length + 1)))
  ------------------
  |  |  259|   343k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 251, False: 343k]
  |  |  ------------------
  ------------------
  236|       |      // If push failed to allocate then don't copy v, since this may cause
  237|       |      // the created copy to leak memory since we won't have stored a
  238|       |      // reference to it.
  239|    251|      return &Crap (Type);
  ------------------
  |  |  188|    251|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  240|       |
  241|       |    /* Emplace. */
  242|   343k|    length++;
  243|   343k|    Type *p = std::addressof (arrayZ[length - 1]);
  244|   343k|    return new (p) Type (std::forward<T> (v));
  245|   343k|  }
_ZN11hb_vector_tI18hb_outline_point_tLb0EEC2Ev:
   45|   139k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF19cff1_top_dict_val_tELb0EEC2Ev:
   45|  32.7k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF23cff1_font_dict_values_tELb0EEC2Ev:
   45|  32.7k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EEC2Ev:
   45|  32.7k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF10dict_val_tELb0EEC2Ev:
   45|   219k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF8op_str_tELb0EEC2Ev:
   45|   267k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF23cff2_font_dict_values_tELb0EEC2Ev:
   45|  31.9k|  hb_vector_t () = default;
_ZN11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EEC2Ev:
   45|  31.9k|  hb_vector_t () = default;
_ZN11hb_vector_tI18hb_outline_point_tLb0EED2Ev:
   86|   139k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tI18hb_outline_point_tLb0EE4finiEv:
  104|   139k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   139k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 0, False: 139k]
  ------------------
  109|      0|    {
  110|      0|      shrink_vector (0);
  111|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  112|      0|    }
  113|   139k|    init ();
  114|   139k|  }
_ZN11hb_vector_tI18hb_outline_point_tLb0EE4initEv:
   95|   139k|  {
   96|   139k|    allocated = length = 0;
   97|   139k|    arrayZ = nullptr;
   98|   139k|  }
_ZN11hb_vector_tI14hb_transform_tLb0EEC2Ev:
   45|  11.1k|  hb_vector_t () = default;
_ZN11hb_vector_tI11hb_bounds_tLb0EEC2Ev:
   45|  22.2k|  hb_vector_t () = default;
_ZN11hb_vector_tI11hb_bounds_tLb0EED2Ev:
   86|  22.2k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tI14hb_transform_tLb0EED2Ev:
   86|  11.1k|  ~hb_vector_t () { fini (); }
_ZNK11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EEixEi:
  165|   714k|  {
  166|   714k|    unsigned int i = (unsigned int) i_;
  167|   714k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   714k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 714k]
  |  |  ------------------
  ------------------
  168|      0|      return Null (Type);
  ------------------
  |  |  124|      0|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|   714k|    return arrayZ[i];
  170|   714k|  }
_ZN11hb_vector_tI18hb_ot_name_entry_tLb0EEC2Ev:
   45|  32.6k|  hb_vector_t () = default;
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EEC2Ev:
   45|  49.4k|  hb_vector_t () = default;
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EEC2Ev:
   45|  98.9k|  hb_vector_t () = default;
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EEC2Ev:
   45|  98.9k|  hb_vector_t () = default;
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EED2Ev:
   86|  98.5k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EED2Ev:
   86|  98.5k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EED2Ev:
   86|  49.2k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIcLb0EEC2Ev:
   45|    834|  hb_vector_t () = default;
_ZN11hb_vector_tIcLb0EED2Ev:
   86|    834|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIcLb0EE6resizeEibb:
  421|    834|  {
  422|    834|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 834]
  ------------------
  423|    834|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 68, False: 766]
  ------------------
  424|     68|      return false;
  425|       |
  426|    766|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 766, False: 0]
  ------------------
  427|    766|    {
  428|    766|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 766, False: 0]
  ------------------
  429|    766|	grow_vector (size);
  430|    766|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|    766|    length = size;
  438|    766|    return true;
  439|    834|  }
_ZN11hb_vector_tIcLb0EE11grow_vectorIcLPv0EEEvj:
  289|    766|  {
  290|    766|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|    766|    length = size;
  292|    766|  }
_ZNK11hb_vector_tIN3CFF31cff1_private_dict_values_base_tINS0_10dict_val_tEEELb0EEixEi:
  165|   274k|  {
  166|   274k|    unsigned int i = (unsigned int) i_;
  167|   274k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   274k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 22, False: 274k]
  |  |  ------------------
  ------------------
  168|     22|      return Null (Type);
  ------------------
  |  |  124|     22|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|   274k|    return arrayZ[i];
  170|   274k|  }
_ZN11hb_vector_tIfLb0EED2Ev:
   86|  12.0k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIfLb0EE4finiEv:
  104|  12.0k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  12.0k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 29, False: 12.0k]
  ------------------
  109|     29|    {
  110|     29|      shrink_vector (0);
  111|     29|      hb_free (arrayZ);
  ------------------
  |  |  236|     29|#define hb_free hb_free_impl
  ------------------
  112|     29|    }
  113|  12.0k|    init ();
  114|  12.0k|  }
_ZN11hb_vector_tIfLb0EE13shrink_vectorEj:
  347|     29|  {
  348|    465|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 436, False: 29]
  ------------------
  349|    436|    {
  350|    436|      arrayZ[(unsigned) length - 1].~Type ();
  351|    436|      length--;
  352|    436|    }
  353|     29|  }
_ZN11hb_vector_tIfLb0EE4initEv:
   95|  24.1k|  {
   96|  24.1k|    allocated = length = 0;
   97|  24.1k|    arrayZ = nullptr;
   98|  24.1k|  }
_ZNK11hb_vector_tIN3CFF31cff2_private_dict_values_base_tINS0_10dict_val_tEEELb0EEixEi:
  165|  24.1k|  {
  166|  24.1k|    unsigned int i = (unsigned int) i_;
  167|  24.1k|    if (unlikely (i >= length))
  ------------------
  |  |  259|  24.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 9.91k, False: 14.2k]
  |  |  ------------------
  ------------------
  168|  9.91k|      return Null (Type);
  ------------------
  |  |  124|  9.91k|#define Null(Type) NullHelper<Type>::get_null ()
  ------------------
  169|  14.2k|    return arrayZ[i];
  170|  24.1k|  }
_ZN11hb_vector_tIfLb0EEC2Ev:
   45|  12.0k|  hb_vector_t () = default;
_ZN11hb_vector_tIfLb0EE12resize_exactEib:
  441|     55|  {
  442|     55|    return resize (size_, initialize, true);
  443|     55|  }
_ZN11hb_vector_tIfLb0EE6resizeEibb:
  421|     55|  {
  422|     55|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 55]
  ------------------
  423|     55|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 1, False: 54]
  ------------------
  424|      1|      return false;
  425|       |
  426|     54|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 28, False: 26]
  ------------------
  427|     28|    {
  428|     28|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 28, False: 0]
  ------------------
  429|     28|	grow_vector (size);
  430|     28|    }
  431|     26|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 26]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|     54|    length = size;
  438|     54|    return true;
  439|     55|  }
_ZN11hb_vector_tIfLb0EE5allocEjb:
  364|     55|  {
  365|     55|    if (unlikely (in_error ()))
  ------------------
  |  |  259|     55|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 55]
  |  |  ------------------
  ------------------
  366|      0|      return false;
  367|       |
  368|     55|    unsigned int new_allocated;
  369|     55|    if (exact)
  ------------------
  |  Branch (369:9): [True: 55, False: 0]
  ------------------
  370|     55|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|     55|      size = hb_max (size, length);
  373|     55|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 26, False: 29]
  ------------------
  374|     55|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 26, False: 0]
  ------------------
  375|     26|	return true;
  376|       |
  377|     29|      new_allocated = size;
  378|     29|    }
  379|      0|    else
  380|      0|    {
  381|      0|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|      0|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  382|      0|	return true;
  383|       |
  384|      0|      new_allocated = allocated;
  385|      0|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 0, False: 0]
  ------------------
  386|      0|	new_allocated += (new_allocated >> 1) + 8;
  387|      0|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|     29|    bool overflows =
  393|     29|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 29]
  ------------------
  394|     29|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 29]
  ------------------
  395|     29|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 29]
  ------------------
  396|       |
  397|     29|    if (unlikely (overflows))
  ------------------
  |  |  259|     29|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 29]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|     29|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|     29|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|     58|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1, False: 28]
  |  |  |  Branch (259:47): [True: 29, False: 0]
  |  |  |  Branch (259:47): [True: 1, False: 28]
  |  |  ------------------
  ------------------
  406|      1|    {
  407|      1|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|      1|      allocated = -1;
  411|      1|      return false;
  412|      1|    }
  413|       |
  414|     28|    arrayZ = new_array;
  415|     28|    allocated = new_allocated;
  416|       |
  417|     28|    return true;
  418|     29|  }
_ZNK11hb_vector_tIfLb0EE8in_errorEv:
  247|     84|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIfLb0EE14realloc_vectorIfLPv0EEEPfj:
  253|     29|  {
  254|     29|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 29]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|     29|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|     29|#define hb_realloc hb_realloc_impl
  ------------------
  260|     29|  }
_ZN11hb_vector_tIfLb0EE11grow_vectorIfLPv0EEEvj:
  289|     28|  {
  290|     28|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|     28|    length = size;
  292|     28|  }
_ZN11hb_vector_tIfLb0EEixEi:
  158|     54|  {
  159|     54|    unsigned int i = (unsigned int) i_;
  160|     54|    if (unlikely (i >= length))
  ------------------
  |  |  259|     54|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 26, False: 28]
  |  |  ------------------
  ------------------
  161|     26|      return Crap (Type);
  ------------------
  |  |  188|     26|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|     28|    return arrayZ[i];
  163|     54|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EEC2Ev:
   45|  49.3k|  hb_vector_t () = default;
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EEC2Ev:
   45|  98.6k|  hb_vector_t () = default;
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EED2Ev:
   86|  98.6k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EED2Ev:
   86|  49.3k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE4initEv:
   95|   147k|  {
   96|   147k|    allocated = length = 0;
   97|   147k|    arrayZ = nullptr;
   98|   147k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE4initEv:
   95|   295k|  {
   96|   295k|    allocated = length = 0;
   97|   295k|    arrayZ = nullptr;
   98|   295k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE4finiEv:
  104|  98.6k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|  98.6k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 49.3k, False: 49.3k]
  ------------------
  109|  49.3k|    {
  110|  49.3k|      shrink_vector (0);
  111|  49.3k|      hb_free (arrayZ);
  ------------------
  |  |  236|  49.3k|#define hb_free hb_free_impl
  ------------------
  112|  49.3k|    }
  113|  98.6k|    init ();
  114|  98.6k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE13shrink_vectorEj:
  347|  56.2k|  {
  348|  1.42M|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 1.37M, False: 56.2k]
  ------------------
  349|  1.37M|    {
  350|  1.37M|      arrayZ[(unsigned) length - 1].~Type ();
  351|  1.37M|      length--;
  352|  1.37M|    }
  353|  56.2k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE4finiEv:
  104|   197k|  {
  105|       |    /* We allow a hack to make the vector point to a foriegn array
  106|       |     * by the user. In that case length/arrayZ are non-zero but
  107|       |     * allocated is zero. Don't free anything. */
  108|   197k|    if (allocated)
  ------------------
  |  Branch (108:9): [True: 98.6k, False: 98.6k]
  ------------------
  109|  98.6k|    {
  110|  98.6k|      shrink_vector (0);
  111|  98.6k|      hb_free (arrayZ);
  ------------------
  |  |  236|  98.6k|#define hb_free hb_free_impl
  ------------------
  112|  98.6k|    }
  113|   197k|    init ();
  114|   197k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE13shrink_vectorEj:
  347|  98.6k|  {
  348|   318k|    while ((unsigned) length > size)
  ------------------
  |  Branch (348:12): [True: 219k, False: 98.6k]
  ------------------
  349|   219k|    {
  350|   219k|      arrayZ[(unsigned) length - 1].~Type ();
  351|   219k|      length--;
  352|   219k|    }
  353|  98.6k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE4pushEv:
  210|  1.40M|  {
  211|  1.40M|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  1.40M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 32.6k, False: 1.37M]
  |  |  ------------------
  ------------------
  212|  32.6k|      return &Crap (Type);
  ------------------
  |  |  188|  32.6k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  1.37M|    return std::addressof (arrayZ[length - 1]);
  214|  1.40M|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE6resizeEibb:
  421|  1.40M|  {
  422|  1.40M|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 1.40M]
  ------------------
  423|  1.40M|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 32.6k, False: 1.37M]
  ------------------
  424|  32.6k|      return false;
  425|       |
  426|  1.37M|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 1.37M, False: 0]
  ------------------
  427|  1.37M|    {
  428|  1.37M|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 1.37M, False: 0]
  ------------------
  429|  1.37M|	grow_vector (size);
  430|  1.37M|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  1.37M|    length = size;
  438|  1.37M|    return true;
  439|  1.40M|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE5allocEjb:
  364|  1.41M|  {
  365|  1.41M|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  1.41M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 30.8k, False: 1.38M]
  |  |  ------------------
  ------------------
  366|  30.8k|      return false;
  367|       |
  368|  1.38M|    unsigned int new_allocated;
  369|  1.38M|    if (exact)
  ------------------
  |  Branch (369:9): [True: 6.89k, False: 1.37M]
  ------------------
  370|  6.89k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  6.89k|      size = hb_max (size, length);
  373|  6.89k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 6.89k, False: 0]
  ------------------
  374|  6.89k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 6.89k, False: 0]
  ------------------
  375|  6.89k|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|  1.37M|    else
  380|  1.37M|    {
  381|  1.37M|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  1.37M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.22M, False: 152k]
  |  |  ------------------
  ------------------
  382|  1.22M|	return true;
  383|       |
  384|   152k|      new_allocated = allocated;
  385|   304k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 152k, False: 152k]
  ------------------
  386|   152k|	new_allocated += (new_allocated >> 1) + 8;
  387|   152k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|   152k|    bool overflows =
  393|   152k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 152k]
  ------------------
  394|   152k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 152k]
  ------------------
  395|   152k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 152k]
  ------------------
  396|       |
  397|   152k|    if (unlikely (overflows))
  ------------------
  |  |  259|   152k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 152k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|   152k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|   152k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|   304k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.86k, False: 150k]
  |  |  |  Branch (259:47): [True: 152k, False: 0]
  |  |  |  Branch (259:47): [True: 1.86k, False: 150k]
  |  |  ------------------
  ------------------
  406|  1.86k|    {
  407|  1.86k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.86k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.86k|      allocated = -1;
  411|  1.86k|      return false;
  412|  1.86k|    }
  413|       |
  414|   150k|    arrayZ = new_array;
  415|   150k|    allocated = new_allocated;
  416|       |
  417|   150k|    return true;
  418|   152k|  }
_ZNK11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE8in_errorEv:
  247|  1.56M|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|   152k|  {
  254|   152k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 152k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|   152k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|   152k|#define hb_realloc hb_realloc_impl
  ------------------
  260|   152k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  289|  1.37M|  {
  290|  1.37M|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|  1.37M|    length = size;
  292|  1.37M|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE4pushEv:
  210|  1.23M|  {
  211|  1.23M|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|  1.23M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 108k, False: 1.13M]
  |  |  ------------------
  ------------------
  212|   108k|      return &Crap (Type);
  ------------------
  |  |  188|   108k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|  1.13M|    return std::addressof (arrayZ[length - 1]);
  214|  1.23M|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE6resizeEibb:
  421|  1.23M|  {
  422|  1.23M|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 1.23M]
  ------------------
  423|  1.23M|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 108k, False: 1.13M]
  ------------------
  424|   108k|      return false;
  425|       |
  426|  1.13M|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 1.13M, False: 0]
  ------------------
  427|  1.13M|    {
  428|  1.13M|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 1.13M, False: 0]
  ------------------
  429|  1.13M|	grow_vector (size);
  430|  1.13M|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|  1.13M|    length = size;
  438|  1.13M|    return true;
  439|  1.23M|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE5allocEjb:
  364|  1.25M|  {
  365|  1.25M|    if (unlikely (in_error ()))
  ------------------
  |  |  259|  1.25M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 108k, False: 1.14M]
  |  |  ------------------
  ------------------
  366|   108k|      return false;
  367|       |
  368|  1.14M|    unsigned int new_allocated;
  369|  1.14M|    if (exact)
  ------------------
  |  Branch (369:9): [True: 11.8k, False: 1.13M]
  ------------------
  370|  11.8k|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|  11.8k|      size = hb_max (size, length);
  373|  11.8k|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 11.8k, False: 0]
  ------------------
  374|  11.8k|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 5.57k, False: 6.24k]
  ------------------
  375|  5.57k|	return true;
  376|       |
  377|  6.24k|      new_allocated = size;
  378|  6.24k|    }
  379|  1.13M|    else
  380|  1.13M|    {
  381|  1.13M|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|  1.13M|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 1.09M, False: 35.8k]
  |  |  ------------------
  ------------------
  382|  1.09M|	return true;
  383|       |
  384|  35.8k|      new_allocated = allocated;
  385|  71.6k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 35.8k, False: 35.8k]
  ------------------
  386|  35.8k|	new_allocated += (new_allocated >> 1) + 8;
  387|  35.8k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  42.0k|    bool overflows =
  393|  42.0k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 42.0k]
  ------------------
  394|  42.0k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 42.0k]
  ------------------
  395|  42.0k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 42.0k]
  ------------------
  396|       |
  397|  42.0k|    if (unlikely (overflows))
  ------------------
  |  |  259|  42.0k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 42.0k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  42.0k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  42.0k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  84.1k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 315, False: 41.7k]
  |  |  |  Branch (259:47): [True: 42.0k, False: 0]
  |  |  |  Branch (259:47): [True: 315, False: 41.7k]
  |  |  ------------------
  ------------------
  406|    315|    {
  407|    315|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 50, False: 265]
  ------------------
  408|     50|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    265|      allocated = -1;
  411|    265|      return false;
  412|    315|    }
  413|       |
  414|  41.7k|    arrayZ = new_array;
  415|  41.7k|    allocated = new_allocated;
  416|       |
  417|  41.7k|    return true;
  418|  42.0k|  }
_ZNK11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE8in_errorEv:
  247|  1.29M|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  42.0k|  {
  254|  42.0k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 42.0k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  42.0k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  42.0k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  42.0k|  }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  289|  1.13M|  {
  290|  1.13M|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|  1.13M|    length = size;
  292|  1.13M|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE4pushEv:
  210|   222k|  {
  211|   222k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|   222k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.52k, False: 219k]
  |  |  ------------------
  ------------------
  212|  2.52k|      return &Crap (Type);
  ------------------
  |  |  188|  2.52k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|   219k|    return std::addressof (arrayZ[length - 1]);
  214|   222k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE6resizeEibb:
  421|   222k|  {
  422|   222k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 222k]
  ------------------
  423|   222k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 2.52k, False: 219k]
  ------------------
  424|  2.52k|      return false;
  425|       |
  426|   219k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 219k, False: 0]
  ------------------
  427|   219k|    {
  428|   219k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 219k, False: 0]
  ------------------
  429|   219k|	grow_vector (size);
  430|   219k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|   219k|    length = size;
  438|   219k|    return true;
  439|   222k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE5allocEjb:
  364|   222k|  {
  365|   222k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   222k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.19k, False: 220k]
  |  |  ------------------
  ------------------
  366|  1.19k|      return false;
  367|       |
  368|   220k|    unsigned int new_allocated;
  369|   220k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 220k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|   220k|    else
  380|   220k|    {
  381|   220k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   220k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 116k, False: 104k]
  |  |  ------------------
  ------------------
  382|   116k|	return true;
  383|       |
  384|   104k|      new_allocated = allocated;
  385|   209k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 104k, False: 104k]
  ------------------
  386|   104k|	new_allocated += (new_allocated >> 1) + 8;
  387|   104k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|   104k|    bool overflows =
  393|   104k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 104k]
  ------------------
  394|   104k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 104k]
  ------------------
  395|   104k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 104k]
  ------------------
  396|       |
  397|   104k|    if (unlikely (overflows))
  ------------------
  |  |  259|   104k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 104k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|   104k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|   104k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|   209k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.33k, False: 103k]
  |  |  |  Branch (259:47): [True: 104k, False: 0]
  |  |  |  Branch (259:47): [True: 1.33k, False: 103k]
  |  |  ------------------
  ------------------
  406|  1.33k|    {
  407|  1.33k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.33k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.33k|      allocated = -1;
  411|  1.33k|      return false;
  412|  1.33k|    }
  413|       |
  414|   103k|    arrayZ = new_array;
  415|   103k|    allocated = new_allocated;
  416|       |
  417|   103k|    return true;
  418|   104k|  }
_ZNK11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE8in_errorEv:
  247|   326k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|   104k|  {
  254|   104k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 104k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|   104k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|   104k|#define hb_realloc hb_realloc_impl
  ------------------
  260|   104k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  289|   219k|  {
  290|   219k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   219k|    length = size;
  292|   219k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE5qsortEPFiPKvS4_E:
  490|  48.6k|  { as_array ().qsort (cmp); }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE8as_arrayEv:
  182|  48.6k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EE6shrinkEib:
  476|  48.6k|  {
  477|  48.6k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (477:25): [True: 0, False: 48.6k]
  ------------------
  478|  48.6k|    if (size >= length)
  ------------------
  |  Branch (478:9): [True: 41.7k, False: 6.94k]
  ------------------
  479|  41.7k|      return;
  480|       |
  481|  6.94k|    shrink_vector (size);
  482|       |
  483|  6.94k|    if (shrink_memory)
  ------------------
  |  Branch (483:9): [True: 6.94k, False: 0]
  ------------------
  484|  6.94k|      alloc (size, true); /* To force shrinking memory if needed. */
  485|  6.94k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t14feature_info_tELb0EEixEi:
  158|  1.35M|  {
  159|  1.35M|    unsigned int i = (unsigned int) i_;
  160|  1.35M|    if (unlikely (i >= length))
  ------------------
  |  |  259|  1.35M|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 1.35M]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|  1.35M|    return arrayZ[i];
  163|  1.35M|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE4pushEv:
  210|   104k|  {
  211|   104k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|   104k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.33k, False: 103k]
  |  |  ------------------
  ------------------
  212|  1.33k|      return &Crap (Type);
  ------------------
  |  |  188|  1.33k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|   103k|    return std::addressof (arrayZ[length - 1]);
  214|   104k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE6resizeEibb:
  421|   104k|  {
  422|   104k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 104k]
  ------------------
  423|   104k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 1.33k, False: 103k]
  ------------------
  424|  1.33k|      return false;
  425|       |
  426|   103k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 103k, False: 0]
  ------------------
  427|   103k|    {
  428|   103k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 103k, False: 0]
  ------------------
  429|   103k|	grow_vector (size);
  430|   103k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|   103k|    length = size;
  438|   103k|    return true;
  439|   104k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE5allocEjb:
  364|   104k|  {
  365|   104k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   104k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 659, False: 103k]
  |  |  ------------------
  ------------------
  366|    659|      return false;
  367|       |
  368|   103k|    unsigned int new_allocated;
  369|   103k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 103k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|   103k|    else
  380|   103k|    {
  381|   103k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   103k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 55.0k, False: 48.7k]
  |  |  ------------------
  ------------------
  382|  55.0k|	return true;
  383|       |
  384|  48.7k|      new_allocated = allocated;
  385|  97.4k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 48.7k, False: 48.7k]
  ------------------
  386|  48.7k|	new_allocated += (new_allocated >> 1) + 8;
  387|  48.7k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|  48.7k|    bool overflows =
  393|  48.7k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 48.7k]
  ------------------
  394|  48.7k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 48.7k]
  ------------------
  395|  48.7k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 48.7k]
  ------------------
  396|       |
  397|  48.7k|    if (unlikely (overflows))
  ------------------
  |  |  259|  48.7k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 48.7k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|  48.7k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|  48.7k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|  97.4k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 679, False: 48.0k]
  |  |  |  Branch (259:47): [True: 48.7k, False: 0]
  |  |  |  Branch (259:47): [True: 679, False: 48.0k]
  |  |  ------------------
  ------------------
  406|    679|    {
  407|    679|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 679]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|    679|      allocated = -1;
  411|    679|      return false;
  412|    679|    }
  413|       |
  414|  48.0k|    arrayZ = new_array;
  415|  48.0k|    allocated = new_allocated;
  416|       |
  417|  48.0k|    return true;
  418|  48.7k|  }
_ZNK11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE8in_errorEv:
  247|   153k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|  48.7k|  {
  254|  48.7k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 48.7k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|  48.7k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|  48.7k|#define hb_realloc hb_realloc_impl
  ------------------
  260|  48.7k|  }
_ZN11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE11grow_vectorIS1_LPv0EEEvj:
  289|   103k|  {
  290|   103k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   103k|    length = size;
  292|   103k|  }
_ZNK11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE5beginEv:
  194|   222k|  Type *begin () const { return arrayZ; }
_ZNK11hb_vector_tIN11hb_ot_map_t13feature_map_tELb1EE3endEv:
  195|   222k|  Type *end () const { return arrayZ + length; }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE8as_arrayEv:
  182|  13.7k|  array_t   as_array ()       { return hb_array (arrayZ, length); }
_ZN11hb_vector_tIN11hb_ot_map_t12lookup_map_tELb0EE6shrinkEib:
  476|  13.7k|  {
  477|  13.7k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (477:25): [True: 0, False: 13.7k]
  ------------------
  478|  13.7k|    if (size >= length)
  ------------------
  |  Branch (478:9): [True: 1.76k, False: 12.0k]
  ------------------
  479|  1.76k|      return;
  480|       |
  481|  12.0k|    shrink_vector (size);
  482|       |
  483|  12.0k|    if (shrink_memory)
  ------------------
  |  Branch (483:9): [True: 12.0k, False: 0]
  ------------------
  484|  12.0k|      alloc (size, true); /* To force shrinking memory if needed. */
  485|  12.0k|  }
_ZN11hb_vector_tIN19hb_ot_map_builder_t12stage_info_tELb0EEixEi:
  158|   439k|  {
  159|   439k|    unsigned int i = (unsigned int) i_;
  160|   439k|    if (unlikely (i >= length))
  ------------------
  |  |  259|   439k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 439k]
  |  |  ------------------
  ------------------
  161|      0|      return Crap (Type);
  ------------------
  |  |  188|      0|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  162|   439k|    return arrayZ[i];
  163|   439k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE4pushEv:
  210|   219k|  {
  211|   219k|    if (unlikely (!resize (length + 1)))
  ------------------
  |  |  259|   219k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 2.08k, False: 217k]
  |  |  ------------------
  ------------------
  212|  2.08k|      return &Crap (Type);
  ------------------
  |  |  188|  2.08k|#define Crap(Type) CrapHelper<Type>::get_crap ()
  ------------------
  213|   217k|    return std::addressof (arrayZ[length - 1]);
  214|   219k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE6resizeEibb:
  421|   219k|  {
  422|   219k|    unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
  ------------------
  |  Branch (422:25): [True: 0, False: 219k]
  ------------------
  423|   219k|    if (!alloc (size, exact))
  ------------------
  |  Branch (423:9): [True: 2.08k, False: 217k]
  ------------------
  424|  2.08k|      return false;
  425|       |
  426|   217k|    if (size > length)
  ------------------
  |  Branch (426:9): [True: 217k, False: 0]
  ------------------
  427|   217k|    {
  428|   217k|      if (initialize)
  ------------------
  |  Branch (428:11): [True: 217k, False: 0]
  ------------------
  429|   217k|	grow_vector (size);
  430|   217k|    }
  431|      0|    else if (size < length)
  ------------------
  |  Branch (431:14): [True: 0, False: 0]
  ------------------
  432|      0|    {
  433|      0|      if (initialize)
  ------------------
  |  Branch (433:11): [True: 0, False: 0]
  ------------------
  434|      0|	shrink_vector (size);
  435|      0|    }
  436|       |
  437|   217k|    length = size;
  438|   217k|    return true;
  439|   219k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE5allocEjb:
  364|   219k|  {
  365|   219k|    if (unlikely (in_error ()))
  ------------------
  |  |  259|   219k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 897, False: 218k]
  |  |  ------------------
  ------------------
  366|    897|      return false;
  367|       |
  368|   218k|    unsigned int new_allocated;
  369|   218k|    if (exact)
  ------------------
  |  Branch (369:9): [True: 0, False: 218k]
  ------------------
  370|      0|    {
  371|       |      /* If exact was specified, we allow shrinking the storage. */
  372|      0|      size = hb_max (size, length);
  373|      0|      if (size <= (unsigned) allocated &&
  ------------------
  |  Branch (373:11): [True: 0, False: 0]
  ------------------
  374|      0|	  size >= (unsigned) allocated >> 2)
  ------------------
  |  Branch (374:4): [True: 0, False: 0]
  ------------------
  375|      0|	return true;
  376|       |
  377|      0|      new_allocated = size;
  378|      0|    }
  379|   218k|    else
  380|   218k|    {
  381|   218k|      if (likely (size <= (unsigned) allocated))
  ------------------
  |  |  258|   218k|#define likely(expr) __builtin_expect (bool(expr), 1)
  |  |  ------------------
  |  |  |  Branch (258:22): [True: 115k, False: 103k]
  |  |  ------------------
  ------------------
  382|   115k|	return true;
  383|       |
  384|   103k|      new_allocated = allocated;
  385|   206k|      while (size > new_allocated)
  ------------------
  |  Branch (385:14): [True: 103k, False: 103k]
  ------------------
  386|   103k|	new_allocated += (new_allocated >> 1) + 8;
  387|   103k|    }
  388|       |
  389|       |
  390|       |    /* Reallocate */
  391|       |
  392|   103k|    bool overflows =
  393|   103k|      (int) in_error () ||
  ------------------
  |  Branch (393:7): [True: 0, False: 103k]
  ------------------
  394|   103k|      (new_allocated < size) ||
  ------------------
  |  Branch (394:7): [True: 0, False: 103k]
  ------------------
  395|   103k|      hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
  ------------------
  |  Branch (395:7): [True: 0, False: 103k]
  ------------------
  396|       |
  397|   103k|    if (unlikely (overflows))
  ------------------
  |  |  259|   103k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 0, False: 103k]
  |  |  ------------------
  ------------------
  398|      0|    {
  399|      0|      allocated = -1;
  400|      0|      return false;
  401|      0|    }
  402|       |
  403|   103k|    Type *new_array = realloc_vector (new_allocated);
  404|       |
  405|   103k|    if (unlikely (new_allocated && !new_array))
  ------------------
  |  |  259|   206k|#define unlikely(expr) __builtin_expect (bool(expr), 0)
  |  |  ------------------
  |  |  |  Branch (259:24): [True: 1.19k, False: 102k]
  |  |  |  Branch (259:47): [True: 103k, False: 0]
  |  |  |  Branch (259:47): [True: 1.19k, False: 102k]
  |  |  ------------------
  ------------------
  406|  1.19k|    {
  407|  1.19k|      if (new_allocated <= (unsigned) allocated)
  ------------------
  |  Branch (407:11): [True: 0, False: 1.19k]
  ------------------
  408|      0|        return true; // shrinking failed; it's okay; happens in our fuzzer
  409|       |
  410|  1.19k|      allocated = -1;
  411|  1.19k|      return false;
  412|  1.19k|    }
  413|       |
  414|   102k|    arrayZ = new_array;
  415|   102k|    allocated = new_allocated;
  416|       |
  417|   102k|    return true;
  418|   103k|  }
_ZNK11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE8in_errorEv:
  247|   323k|  bool in_error () const { return allocated < 0; }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE14realloc_vectorIS1_LPv0EEEPS1_j:
  253|   103k|  {
  254|   103k|    if (!new_allocated)
  ------------------
  |  Branch (254:9): [True: 0, False: 103k]
  ------------------
  255|      0|    {
  256|      0|      hb_free (arrayZ);
  ------------------
  |  |  236|      0|#define hb_free hb_free_impl
  ------------------
  257|      0|      return nullptr;
  258|      0|    }
  259|   103k|    return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
  ------------------
  |  |  235|   103k|#define hb_realloc hb_realloc_impl
  ------------------
  260|   103k|  }
_ZN11hb_vector_tIN11hb_ot_map_t11stage_map_tELb0EE11grow_vectorIS1_LPv0EEEvj:
  289|   217k|  {
  290|   217k|    memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
  291|   217k|    length = size;
  292|   217k|  }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EEC2Ev:
   45|  1.71k|  hb_vector_t () = default;
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EEC2Ev:
   45|  1.71k|  hb_vector_t () = default;
_ZN11hb_vector_tIPN22hb_serialize_context_t8object_tELb0EED2Ev:
   86|  1.71k|  ~hb_vector_t () { fini (); }
_ZN11hb_vector_tIPN9hb_pool_tIN22hb_serialize_context_t8object_tELj32EE7chunk_tELb0EED2Ev:
   86|  1.71k|  ~hb_vector_t () { fini (); }

hb-shape-fuzzer.cc:_ZL9test_fontP9hb_font_tj:
   38|  33.3k|{
   39|  33.3k|  long long result = 0;
   40|       |
   41|  33.3k|  hb_face_t *face = hb_font_get_face (font);
   42|  33.3k|  hb_set_t *set;
   43|  33.3k|  hb_codepoint_t g = 0;
   44|  33.3k|  hb_position_t x = 0, y = 0;
   45|  33.3k|  char buf[5] = {0};
   46|  33.3k|  unsigned int len = 0;
   47|  33.3k|  hb_glyph_extents_t extents = {0};
   48|  33.3k|  hb_ot_font_set_funcs (font);
   49|       |
   50|  33.3k|  set = hb_set_create ();
   51|  33.3k|  hb_face_collect_unicodes (face, set);
   52|  33.3k|  hb_face_collect_variation_selectors (face, set);
   53|  33.3k|  hb_face_collect_variation_unicodes (face, cp, set);
   54|       |
   55|  33.3k|  hb_font_get_nominal_glyph (font, cp, &g);
   56|  33.3k|  hb_font_get_variation_glyph (font, cp, cp, &g);
   57|  33.3k|  hb_font_get_glyph_h_advance (font, cp);
   58|  33.3k|  hb_font_get_glyph_v_advance (font, cp);
   59|  33.3k|  hb_font_get_glyph_h_origin (font, cp, &x, &y);
   60|  33.3k|  hb_font_get_glyph_v_origin (font, cp, &x, &y);
   61|  33.3k|  hb_font_get_glyph_extents (font, cp, &extents);
   62|  33.3k|  hb_font_get_glyph_contour_point (font, cp, 0, &x, &y);
   63|  33.3k|  hb_font_get_glyph_name (font, cp, buf, sizeof (buf));
   64|  33.3k|  hb_font_get_glyph_from_name (font, buf, strlen (buf), &g);
   65|       |
   66|  33.3k|  hb_ot_color_has_palettes (face);
   67|  33.3k|  hb_ot_color_palette_get_count (face);
   68|  33.3k|  hb_ot_color_palette_get_name_id (face, cp);
   69|  33.3k|  hb_ot_color_palette_color_get_name_id (face, cp);
   70|  33.3k|  hb_ot_color_palette_get_flags (face, cp);
   71|  33.3k|  hb_ot_color_palette_get_colors (face, cp, 0, NULL, NULL);
   72|  33.3k|  hb_ot_color_has_layers (face);
   73|  33.3k|  hb_ot_color_glyph_get_layers (face, cp, 0, NULL, NULL);
   74|  33.3k|  hb_ot_color_has_svg (face);
   75|  33.3k|  hb_blob_destroy (hb_ot_color_glyph_reference_svg (face, cp));
   76|  33.3k|  hb_ot_color_has_png (face);
   77|  33.3k|  hb_blob_destroy (hb_ot_color_glyph_reference_png (font, cp));
   78|       |
   79|  33.3k|  {
   80|  33.3k|    hb_aat_layout_feature_type_t feature = HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC;
   81|  33.3k|    unsigned count = 1;
   82|  33.3k|    hb_aat_layout_get_feature_types (face, 0, &count, &feature);
   83|  33.3k|    hb_aat_layout_feature_type_get_name_id (face, HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE);
   84|  33.3k|    hb_aat_layout_feature_selector_info_t setting = {0};
   85|  33.3k|    unsigned default_index;
   86|  33.3k|    count = 1;
   87|  33.3k|    hb_aat_layout_feature_type_get_selector_infos (face, HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE, 0, &count, &setting, &default_index);
   88|  33.3k|    result += count + feature + setting.disable + setting.disable + setting.name_id + setting.reserved + default_index;
   89|  33.3k|  }
   90|       |
   91|  33.3k|  hb_set_t *lookup_indexes = hb_set_create ();
   92|  33.3k|  hb_set_add (lookup_indexes, 0);
   93|       |
   94|  33.3k|  hb_map_t *lookup_mapping = hb_map_create ();
   95|  33.3k|  hb_map_set (lookup_mapping, 0, 0);
   96|  33.3k|  hb_set_t *feature_indices = hb_set_create ();
   97|  33.3k|  hb_set_destroy (lookup_indexes);
   98|  33.3k|  hb_set_destroy (feature_indices);
   99|  33.3k|  hb_map_destroy (lookup_mapping);
  100|       |
  101|  33.3k|  hb_ot_layout_get_baseline (font, HB_OT_LAYOUT_BASELINE_TAG_HANGING, HB_DIRECTION_RTL, HB_SCRIPT_HANGUL, HB_TAG_NONE, NULL);
  ------------------
  |  |  197|  33.3k|#define HB_TAG_NONE HB_TAG(0,0,0,0)
  |  |  ------------------
  |  |  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  102|       |
  103|  33.3k|  hb_ot_layout_has_glyph_classes (face);
  104|  33.3k|  hb_ot_layout_has_substitution (face);
  105|  33.3k|  hb_ot_layout_has_positioning (face);
  106|       |
  107|  33.3k|  hb_ot_layout_get_ligature_carets (font, HB_DIRECTION_LTR, cp, 0, NULL, NULL);
  108|       |
  109|  33.3k|  {
  110|  33.3k|    unsigned temp = 0, temp2 = 0;
  111|  33.3k|    hb_ot_name_id_t name = HB_OT_NAME_ID_FULL_NAME;
  112|  33.3k|    hb_ot_layout_get_size_params (face, &temp, &temp, &name, &temp, &temp);
  113|  33.3k|    hb_tag_t cv01 = HB_TAG ('c','v','0','1');
  ------------------
  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  ------------------
  114|  33.3k|    unsigned feature_index = 0;
  115|  33.3k|    hb_ot_layout_language_find_feature (face, HB_OT_TAG_GSUB, 0,
  ------------------
  |  |   58|  33.3k|#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
  |  |  ------------------
  |  |  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  116|  33.3k|					HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX,
  ------------------
  |  |  205|  33.3k|#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX	0xFFFFu
  ------------------
  117|  33.3k|					cv01, &feature_index);
  118|  33.3k|    hb_ot_layout_feature_get_name_ids (face, HB_OT_TAG_GSUB, feature_index,
  ------------------
  |  |   58|  33.3k|#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
  |  |  ------------------
  |  |  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  119|  33.3k|				       &name, &name, &name, &temp, &name);
  120|  33.3k|    temp = 1;
  121|  33.3k|    hb_ot_layout_feature_get_characters (face, HB_OT_TAG_GSUB, feature_index, 0, &temp, &g);
  ------------------
  |  |   58|  33.3k|#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
  |  |  ------------------
  |  |  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  122|  33.3k|    temp = 1;
  123|  33.3k|    hb_ot_layout_language_get_feature_indexes (face, HB_OT_TAG_GSUB, 0, 0, 0, &temp, &temp2);
  ------------------
  |  |   58|  33.3k|#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
  |  |  ------------------
  |  |  |  |  179|  33.3k|#define HB_TAG(c1,c2,c3,c4) ((hb_tag_t)((((uint32_t)(c1)&0xFF)<<24)|(((uint32_t)(c2)&0xFF)<<16)|(((uint32_t)(c3)&0xFF)<<8)|((uint32_t)(c4)&0xFF)))
  |  |  ------------------
  ------------------
  124|       |
  125|  33.3k|    result += temp + name + feature_index + temp2;
  126|  33.3k|  }
  127|       |
  128|  33.3k|  hb_ot_math_has_data (face);
  129|  1.90M|  for (unsigned constant = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN; constant <= HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT; constant++) {
  ------------------
  |  Branch (129:75): [True: 1.86M, False: 33.3k]
  ------------------
  130|  1.86M|    hb_ot_math_get_constant (font, (hb_ot_math_constant_t)constant);
  131|  1.86M|  }
  132|       |
  133|  33.3k|  hb_ot_math_get_glyph_italics_correction (font, cp);
  134|  33.3k|  hb_ot_math_get_glyph_top_accent_attachment (font, cp);
  135|  33.3k|  hb_ot_math_is_glyph_extended_shape (face, cp);
  136|       |
  137|  33.3k|  {
  138|  33.3k|    hb_ot_math_get_glyph_kerning (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0);
  139|  33.3k|    hb_ot_math_get_glyph_kernings (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0, NULL, NULL);
  140|  33.3k|    hb_ot_math_kern_entry_t entries[5];
  141|  33.3k|    unsigned count = sizeof (entries) / sizeof (entries[0]);
  142|  33.3k|    hb_ot_math_get_glyph_kernings (font, cp, HB_OT_MATH_KERN_BOTTOM_RIGHT, 0, &count, entries);
  143|  33.3k|  }
  144|       |
  145|  33.3k|  {
  146|  33.3k|    hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_LTR, 0, NULL, NULL);
  147|  33.3k|    hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_TTB, 0, NULL, NULL);
  148|  33.3k|    hb_ot_math_glyph_variant_t entries[5];
  149|  33.3k|    unsigned count = sizeof (entries) / sizeof (entries[0]);
  150|  33.3k|    hb_ot_math_get_glyph_variants (font, cp, HB_DIRECTION_LTR, 0, &count, entries);
  151|  33.3k|  }
  152|       |
  153|  33.3k|  {
  154|  33.3k|    hb_ot_math_get_min_connector_overlap (font, HB_DIRECTION_LTR);
  155|  33.3k|    hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_LTR, 0, NULL, NULL, NULL);
  156|  33.3k|    hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_TTB, 0, NULL, NULL, NULL);
  157|  33.3k|    hb_ot_math_glyph_part_t entries[5];
  158|  33.3k|    unsigned count = sizeof (entries) / sizeof (entries[0]);
  159|  33.3k|    hb_position_t corr;
  160|  33.3k|    hb_ot_math_get_glyph_assembly (font, cp, HB_DIRECTION_LTR, 0, &count, entries, &corr);
  161|  33.3k|  }
  162|       |
  163|  33.3k|  hb_ot_meta_get_entry_tags (face, 0, NULL, NULL);
  164|  33.3k|  hb_blob_destroy (hb_ot_meta_reference_entry (face, HB_OT_META_TAG_DESIGN_LANGUAGES));
  165|       |
  166|  33.3k|  hb_ot_metrics_get_position (font, HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER, NULL);
  167|  33.3k|  hb_ot_metrics_get_variation (font, HB_OT_METRICS_TAG_UNDERLINE_OFFSET);
  168|  33.3k|  hb_ot_metrics_get_x_variation (font, HB_OT_METRICS_TAG_STRIKEOUT_OFFSET);
  169|  33.3k|  hb_ot_metrics_get_y_variation (font, HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET);
  170|       |
  171|  33.3k|  len = sizeof (buf);
  172|  33.3k|  hb_ot_name_list_names (face, NULL);
  173|  33.3k|  hb_ot_name_get_utf8 (face, cp, NULL, &len, buf);
  174|  33.3k|  hb_ot_name_get_utf16 (face, cp, NULL, NULL, NULL);
  175|  33.3k|  hb_ot_name_get_utf32 (face, cp, NULL, NULL, NULL);
  176|       |
  177|       |#if 0
  178|       |  hb_style_get_value (font, HB_STYLE_TAG_ITALIC);
  179|       |  hb_style_get_value (font, HB_STYLE_TAG_OPTICAL_SIZE);
  180|       |  hb_style_get_value (font, HB_STYLE_TAG_SLANT);
  181|       |  hb_style_get_value (font, HB_STYLE_TAG_WIDTH);
  182|       |  hb_style_get_value (font, HB_STYLE_TAG_WEIGHT);
  183|       |#endif
  184|       |
  185|  33.3k|  hb_ot_var_get_axis_count (face);
  186|  33.3k|  hb_ot_var_get_axis_infos (face, 0, NULL, NULL);
  187|  33.3k|  hb_ot_var_normalize_variations (face, NULL, 0, NULL, 0);
  188|  33.3k|  hb_ot_var_normalize_coords (face, 0, NULL, NULL);
  189|       |
  190|  33.3k|  hb_draw_funcs_t *funcs = hb_draw_funcs_create ();
  191|  33.3k|  hb_font_get_glyph_shape (font, cp, funcs, NULL);
  192|  33.3k|  hb_draw_funcs_destroy (funcs);
  193|       |
  194|  33.3k|  hb_set_destroy (set);
  195|       |
  196|  33.3k|  return result + g + x + y + buf[0] + buf[1] + buf[2] + buf[3] + buf[4] + len +
  197|  33.3k|	 extents.height + extents.width + extents.x_bearing + extents.y_bearing;
  198|  33.3k|}

hb-shape-fuzzer.cc:_ZL20_fuzzing_alloc_statePKhm:
   26|  33.3k|{
   27|       |  /* https://github.com/harfbuzz/harfbuzz/pull/2764#issuecomment-1172589849 */
   28|       |
   29|       |  /* In 50% of the runs, don't fail the allocator. */
   30|  33.3k|  if (size && data[size - 1] < 0x80)
  ------------------
  |  Branch (30:7): [True: 33.3k, False: 0]
  |  Branch (30:15): [True: 25.7k, False: 7.59k]
  ------------------
   31|  25.7k|    return 0;
   32|       |
   33|  7.59k|  return size;
   34|  33.3k|}

LLVMFuzzerTestOneInput:
   13|  33.3k|{
   14|  33.3k|  alloc_state = _fuzzing_alloc_state (data, size);
   15|       |
   16|  33.3k|  hb_blob_t *blob = hb_blob_create ((const char *)data, size,
   17|  33.3k|				    HB_MEMORY_MODE_READONLY, nullptr, nullptr);
   18|  33.3k|  hb_face_t *face = hb_face_create (blob, 0);
   19|  33.3k|  hb_font_t *font = hb_font_create (face);
   20|  33.3k|  hb_ot_font_set_funcs (font);
   21|  33.3k|  hb_font_set_scale (font, 12, 12);
   22|       |
   23|  33.3k|  unsigned num_coords = 0;
   24|  33.3k|  if (size) num_coords = data[size - 1];
  ------------------
  |  Branch (24:7): [True: 33.3k, False: 0]
  ------------------
   25|  33.3k|  num_coords = hb_ot_var_get_axis_count (face) > num_coords ? num_coords : hb_ot_var_get_axis_count (face);
  ------------------
  |  Branch (25:16): [True: 47, False: 33.2k]
  ------------------
   26|  33.3k|  int *coords = (int *) calloc (num_coords, sizeof (int));
   27|  33.3k|  if (size > num_coords + 1)
  ------------------
  |  Branch (27:7): [True: 33.3k, False: 37]
  ------------------
   28|  38.9k|    for (unsigned i = 0; i < num_coords; ++i)
  ------------------
  |  Branch (28:26): [True: 5.62k, False: 33.3k]
  ------------------
   29|  5.62k|      coords[i] = ((int) data[size - num_coords + i - 1] - 128) * 10;
   30|  33.3k|  hb_font_set_var_coords_normalized (font, coords, num_coords);
   31|  33.3k|  free (coords);
   32|       |
   33|  33.3k|  {
   34|  33.3k|    const char text[] = "ABCDEXYZ123@_%&)*$!";
   35|  33.3k|    hb_buffer_t *buffer = hb_buffer_create ();
   36|  33.3k|    hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAG_VERIFY /* | HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT */));
   37|  33.3k|    hb_buffer_add_utf8 (buffer, text, -1, 0, -1);
   38|  33.3k|    hb_buffer_guess_segment_properties (buffer);
   39|  33.3k|    hb_shape (font, buffer, nullptr, 0);
   40|  33.3k|    hb_buffer_destroy (buffer);
   41|  33.3k|  }
   42|       |
   43|  33.3k|  uint32_t text32[16] = {0};
   44|  33.3k|  unsigned int len = sizeof (text32);
   45|  33.3k|  if (size < len)
  ------------------
  |  Branch (45:7): [True: 6.73k, False: 26.6k]
  ------------------
   46|  6.73k|    len = size;
   47|  33.3k|  if (len)
  ------------------
  |  Branch (47:7): [True: 33.3k, False: 0]
  ------------------
   48|  33.3k|    memcpy (text32, data + size - len, len);
   49|       |
   50|       |  /* Misc calls on font. */
   51|  33.3k|  text32[10] = test_font (font, text32[15]) % 256;
   52|       |
   53|  33.3k|  hb_buffer_t *buffer = hb_buffer_create ();
   54|       | // hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAG_VERIFY | HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT));
   55|  33.3k|  hb_buffer_add_utf32 (buffer, text32, sizeof (text32) / sizeof (text32[0]), 0, -1);
   56|  33.3k|  hb_buffer_guess_segment_properties (buffer);
   57|  33.3k|  hb_shape (font, buffer, nullptr, 0);
   58|  33.3k|  hb_buffer_destroy (buffer);
   59|       |
   60|  33.3k|  hb_font_destroy (font);
   61|  33.3k|  hb_face_destroy (face);
   62|  33.3k|  hb_blob_destroy (blob);
   63|  33.3k|  return 0;
   64|  33.3k|}

